実現したいこと
- ESP32でIoTデバイスを開発したい
- WiFiのセットアップにWiFi Easy Connect(以下DPP)を使いたい
- DPP Uriを静的にすることで、QRコードを物理的に印刷し、ディスプレイのない状況でもWiFiのセットアップができるようにしたい
環境
OS Windows10
Editor Visual Studio Code
IDF ESP IDF
秘密鍵用OS Ubuntu 22.04.2 LTS
手順
その前に
VSCode上でdpp_enrolleeプロジェクトを開けていることが前提となります。
記事に出てくる秘密鍵などは少し変えてあるので、コピペでは動かない可能性が高いです。
ご自身で生成していただけると幸いです。
コード
手順は簡単で、以下のように書き換えるだけです。
それにあたって、秘密鍵を生成しないといけないので、このあたりが少し手間取りました。
dpp_enrollee_main.c
#include -----------
+ #define ORIGINAL_ESP_DPP_BOOTSTRAPPING_KEY "ここに生成する32桁の16進数"
+ /*
#ifdef CONFIG_ESP_DPP_BOOTSTRAPPING_KEY
#define EXAMPLE_DPP_BOOTSTRAPPING_KEY CONFIG_ESP_DPP_BOOTSTRAPPING_KEY
#else
#define EXAMPLE_DPP_BOOTSTRAPPING_KEY 0
#endif
+ */
esp_err_t dpp_enrollee_bootstrap(void)
{
+ size_t pkey_len = strlen(ORIGINAL_ESP_DPP_BOOTSTRAPPING_KEY);
- size_t pkey_len = strlen(CONFIG_ESP_DPP_BOOTSTRAPPING_KEY);
if (pkey_len) {
+ sprintf(key, "%s%s%s", prefix, ORIGINAL_ESP_DPP_BOOTSTRAPPING_KEY, postfix);
- sprintf(key, "%s%s%s", prefix, EXAMPLE_DPP_BOOTSTRAPPING_KEY, postfix);
}
}
秘密鍵
Linuxの環境を使って以下のOpenSSLのコマンドを実行します。
openssl pkey -in [key file] -text
[key file]
には以下が書き込まれている、file.txt
などのテキストファイルを指定する。
ここで使用している、プライベートキーはdpp-enrolleeの出力からコピペしてきます。(それ以外の方法を知らないのと、楽だからです。)
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIK7RQHOGfGjDlCIuqxrIWIpNN+h24aPD1Qr+P8gLDbwxoAoGCCqGSM49
AwEHoUQDQgAEYnNGCHd4ThO5azrtrek7g7XYYvhoVOlA+O5GGxmezPOrydPeLQqn
U/jqX6z602dnMRJdm3q7TStUh3tJnar3dg==
-----END EC PRIVATE KEY-----
実行をすると、以下のような出力が得られる。
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgrtFAc4Z8aMOUIi6r
GshYik036Hbho8PVCv4/yAsNvDGhId3hOE7lrOu2t6TuA6vJRANCAARic0Y097td
hi+GhU6UD47tCqdT+OpfrMxEl2bertNK3rTZ2kYbGZ7M8dSHe0mdqvd2
-----END PRIVATE KEY-----
Private-Key: (256 bit)
priv:
ae:d1:40:73:86:1a:c8:58:7c:68:c3:94:22:2e:ab:
8a:4d:37:e8:76:e1:c8:0b:0d:a3:c3:d5:0a:fe:3f:
bc:31
pub:
04:62:73:46:08:77:78:4e:13:b9:6b:3a:ed:ad:e9:
3b:80:ea:2d:0a:a7:53:f8:f2:74:f7:bb:5d:86:2f:
8e:e4:61:b1:99:ec:cf:ea:5f:ac:86:85:4e:94:0f:
cc:44:97:66:de:ae:d3:4a:de:b4:d9:d9:d4:87:7b:
aa:f7:49:9d:76
ASN1 OID: prime256v1
NIST CURVE: P-256
つぎに記されるpriv:
の16進数を使う。
しかし、このままだと指定されている型が違うよってエラーが出るので、:
これを削除して、
#define ORIGINAL_ESP_DPP_BOOTSTRAPPING_KEY "ここに生成する32桁の16進数"
このダブルコーテーションで囲われている中に配置する。
これで、静的なQRコードを生成することが可能になる。
参考
WiFi Easy Connectのドキュメント
- https://www.wi-fi.org/discover-wi-fi/wi-fi-easy-connect
- https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_dpp.html?highlight=dpp_bootstrap
- https://internet.watch.impress.co.jp/docs/column/nettech/1158782.html
ESP32とAndroidで実装している記事
静的なDPP Uriの生成に関して
- https://github.com/espressif/esp-idf/issues/8478
- https://www.esp32.com/viewtopic.php?t=19479
- https://esp32.com/viewtopic.php?t=24408