現在、homeassistant(ESPhome)があるネットワークと、ESP32がWIFI接続されるネットワークが別になってしまうので、
ESP32がネットワークで接続されているか(Wifiで)を確認すべく、curlでgpioを操作することをためす。
調査
ESPhomeから書き込まれたESP32がhomeassistantから操作されるときには、
ESPHomeネイティブAPI(TCP/IPベース)というのが使用されてる様子。
curlからネイティブAPIを使用するのは大変らしいので、esp32の中にREST APIを使用できるサーバーを有効化することがで、REST APIを使用し、curlで操作できる。
web_serverを有効化したところ、このような画面が見えており、
OTA updateも可能な様子。

プログラム全体
esphome: name: esp32-wifi friendly_name: ESP32_WIFI esp32: board: esp32dev framework: type: esp-idf # Enable logging logger: # Enable Home Assistant API api: encryption: key: "xxxxxxxxx" ota: - platform: esphome password: "xxxxxxxxx" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esp32-Wifi Fallback Hotspot" password: "xxxxxxxxx" captive_portal: web_server: port: 80 # 通常はポート80を使用 switch: - platform: gpio pin: GPIO2 id: gpio2_led # interval: # - interval: 500ms # then: # - switch.toggle: gpio2_led
動作
プログラムを書き込むと、シリアルポートのログにIPアドレスが表示されるので
そこに対して、curlで操作を行う

コマンドは以下
curl -X POST -d "" http://<ip_address>/switch/<id>/toggle

LEDが点滅するとともに、gpio2_ledをtoggleするログが表示される。
[19:58:31][0;36m[D][switch:030]: 'gpio2_led' Toggling ON.[0m [19:58:31][0;36m[D][switch:065]: 'gpio2_led': Sending state ON[0m [19:58:32][0;36m[D][switch:030]: 'gpio2_led' Toggling OFF.[0m [19:58:32][0;36m[D][switch:065]: 'gpio2_led': Sending state OFF[0m [19:58:33][0;36m[D][switch:030]: 'gpio2_led' Toggling ON.[0m [19:58:33][0;36m[D][switch:065]: 'gpio2_led': Sending state ON[0m
Webサーバーのページにも表示されている(すごい)

その他
ESP32が発売された当初、Arduino IDEでプログラミングするしかなく、それなりにwebサーバーを立てようもんならjavascriptを書いた文字列をコードに埋め込んでどうのこうのする必要があって、かなりめんどくさそうだった。
それがめちゃくちゃ簡単に準備できて、しかもデバッグログも出てくるしすごい。
次のステップではWifiではなく、有線経由での接続確認を行いたいと思う。
