Archive: 2022/12/31

IRKit再改修

最近auひかり方面のルーターASUS RT-AX3000からDHCPでアドレスが降ってこないケースが目立つようになってきたので、年明けのルーター交換を視野にIR受信結果のアップロードを首絞めしたIRKitのWiFi接続先も変えておこうかな、とRESETスイッチを長押ししてファクトリーリセット

IRKitのサービスを終了しました。 2022-12-10追記
IRKitサービス終了しました - maaash.jp

…したところ、iPhoneアプリからのWiFi接続設定を行っても"インターネットに接続してください"と表示されて、何度やっても設定できなくなった。

「しまったー、ここでもIRKitサービス終了が効いているのか…」と思ったが"あとの祭り"というやつだ。

大晦日夕方の失態に軽く焦りつつ、どうしたもんかとDevice HTTP APIを眺めたところ、curlで"POST /wifi"すれば設定できるという事はわかった。

ただ、SSIDなどをシリアライズするのもちょっと面倒なので、それならファームウェアを直接書き換える方が早いかも?と思ってIRKit.inoを確認したところ、connect関数の

309 if (keys.isWifiCredentialsSet()) {
310 if (config::ledFeedback < config::LED_OFF) {
311 color.setLedColor( 0, 1, 0, FullColorLed::BLINK_THEN_ON ); // green blink: connecting
312 }
313
314 gs.join(keys.getSecurity(),
315 keys.getSSID(),
316 keys.getPassword());
315 }
あたりのgs.joinでWiFi接続しているのが確認できたので、単刀直入にgs.joinの引数をハードコードしてしまおうかと思ったのだが、isWifiCredentialsSetなどkeysクラスの実装を眺めてみるとそれだけでは済まないような気がしてきた。

代わりにkeys.set関数でSSIDなどをEEPROMに書き込む方向で試行錯誤してみたところ、これでも問題無くWiFi接続できたので、結局RESETスイッチ長押し契機のlong_pressed関数でkeys.setするように改修。

device/firmware at settings-led-cloudからの差分は以下の通り。

$ git -b diff
diff --git a/firmware/src/IRKit/IRKit.ino b/firmware/src/IRKit/IRKit.ino
index 2351b59..81a6614 100644
--- a/firmware/src/IRKit/IRKit.ino
+++ b/firmware/src/IRKit/IRKit.ino
@@ -169,6 +169,12 @@ void long_pressed() {
color.setLedColor( 1, 0, 0, FullColorLed::ALWAYS_ON ); // red: error

keys.clear();
+#ifndef CLOUD_CONTROL
+ keys.set(GSSECURITY_WPA2_PSK,
+ PB("SSID",1),
+ PB("PASSWORD",2));
+/* keys.setKey(P("5284CF0D43994784897ECAB3D9935498")); */
+#endif // CLOUD_CONTROL
keys.save();
software_reset();
}