謎のコンパイルエラー(intrrupt.hがnot found)でちょっとハマったので、うまくいった方法の備忘録を書いときます。
やったこと:
- Arduino環境を焼き払う
- board managerでesp32をインストール
- library managerでPubSubClientをインストール
- PubSubClientのスケッチ例であるmqtt_esp8266.inoをちょこっと書き換え。
これで接続できました。
書き換え部分はこんなかんじ:
mintel2-3:~ kmf$ diff Documents/Arduino/libraries/PubSubClient/examples/mqtt_esp8266/mqtt_esp8266.ino Documents/Arduino/mqtt_esp8266_kamo/mqtt_esp8266_kamo.ino 21c21 < #include <ESP8266WiFi.h> --- > #include <WiFi.h> 26,28c26,29 < const char* ssid = "........"; < const char* password = "........"; < const char* mqtt_server = "broker.mqtt-dashboard.com"; --- > const char* ssid = "MYSSID"; > const char* password = "MYPASSWD"; > const char* mqtt_server = "MYMQTTSERVER"; > const int BUILTIN_LED = 21; // MYLED 35c36 < int value = 0; --- > int long value = 0; 72c73,74 < digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level --- > Serial.println("LED ON"); > digitalWrite(BUILTIN_LED, HIGH); // Turn the LED on (Note that LOW is the voltage level 76c78 < digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH --- > digitalWrite(BUILTIN_LED, LOW); // Turn the LED off by making the voltage HIGH
ポイントなど:
- ESP8266WiFi.hの代わりにWiFi.hを使う
- MYSSID: 自分のWiFiのSSID
- MYPASSWD: 自分のWiFiパスワード
- MYMQTTSERVER: 自分のMQTTサーバのアドレス
- MYLED: esp32だとBUILTIN_LEDが定義されてないみたいなので接続したピン番号を入れた
- メッセージをパッキングするsnprintf関数がint longを要求するようになったらしいのでvalue変数の型を変更
- 72行から後のLED点灯のHIGH/LOWを入れ替え。(サンプルプログラムはLOWで点灯となっている。想定されてるESP-01モジュールはハイとローが入れ替わってるらしいが、ESP32-WROVERは普通にHIGHで点灯。)