e-tipsmemo

ごった煮

curlでESP32に接続されたLEDを操作するプログラムをESPhomeで書く

現在、homeassistant(ESPhome)があるネットワークと、ESP32がWIFI接続されるネットワークが別になってしまうので、
ESP32がネットワークで接続されているか(Wifiで)を確認すべく、curlでgpioを操作することをためす。

調査

ESPhomeから書き込まれたESP32がhomeassistantから操作されるときには、
ESPHomeネイティブAPITCP/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ではなく、有線経由での接続確認を行いたいと思う。