ESP32で一番簡単にMQTT

謎のコンパイルエラー(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: 自分のWiFiSSID
  • MYPASSWD: 自分のWiFiパスワード
  • MYMQTTSERVER: 自分のMQTTサーバのアドレス
  • MYLED: esp32だとBUILTIN_LEDが定義されてないみたいなので接続したピン番号を入れた
  • メッセージをパッキングするsnprintf関数がint longを要求するようになったらしいのでvalue変数の型を変更
  • 72行から後のLED点灯のHIGH/LOWを入れ替え。(サンプルプログラムはLOWで点灯となっている。想定されてるESP-01モジュールはハイとローが入れ替わってるらしいが、ESP32-WROVERは普通にHIGHで点灯。)


esp32-wrover mqtt blink or MQTTでLチカ