LoginSignup
0
0

ESP32 WiFi Easy Connect(DPP)で静的なUriを生成する方法

Last updated at Posted at 2023-09-07

実現したいこと

  • 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のドキュメント

ESP32とAndroidで実装している記事

静的なDPP Uriの生成に関して

秘密鍵の生成に関して

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0