やりたいこと
手元のESP32-DevKitC-32Dの情報を手っ取り早くAWS IoTに繋ぎたいと考えて、以下で作ったRaspberry PiのSORACOMルーター通してBeamで送ってみることにしました。
構成
構成は以下となります。
ルーター側にSORACOM SIM設定することで、ESP32側はSORACOM SIMを認識せずともSORACOMサービスを利用した通信できます。
コード
以下がWiFiへの接続設定部分です。上記の記事のサンプル通りRaspberry PiとAnsibleでルーターを作った場合は以下になりますが、適宜変更して利用します。
// WiFi接続設定 const char *ssid = "raspberrypi"; const char *password = "abcdefgh";
Beamを通したMQTTアクセス設定をします。今回はトピック名に esp32/beamdemo
を設定しています。
// 動作設定値 const char *mqtt_server = "beam.soracom.io"; // MQTTサーバにSORACOM Beamを指定 const char *topic = "esp32/beamdemo"; // MQTT Topic名 const char *payload = "message from esp32"; // MQTTで送信するメッセージ
ということでコード全体は以下のようになりました。
#include <Arduino.h> #include <WiFi.h> #include <PubSubClient.h> // WiFi接続設定 const char *ssid = "raspberrypi"; const char *password = "abcdefgh"; // 動作設定値 const char *mqtt_server = "beam.soracom.io"; // MQTTサーバにSORACOM Beamを指定 const char *topic = "esp32/beamdemo"; // MQTT Topic名 const char *payload = "message from esp32"; // MQTTで送信するメッセージ const uint32_t loop_inteval_msec = 4000; WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("ESP8266Client")) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); } void loop() { if (!client.connected()) { reconnect(); } Serial.print("publish message topic:"); Serial.print(topic); Serial.print(" payload:"); Serial.println(payload); // MQTT送信 client.publish(topic, payload); delay(loop_inteval_msec); }
AWS IoT側確認
上記のコードをESP32-DevKitC-32Dに書き込んでシリアルで接続して見てみると、以下のように表示されます。
Connecting to raspberrypi . WiFi connected IP address: 192.168.10.6 Attempting MQTT connection...connected publish message topic:esp32/beamdemo payload:message from esp32 publish message topic:esp32/beamdemo payload:message from esp32 publish message topic:esp32/beamdemo payload:message from esp32 #--- 省略
AWS IoT Coreで esp32/beamdemo
のメッセージのサブスクライブできることが確認できました。
参考
PlatformIOで開発しているので、こちらの動画が参考になりました。
コードはこちらの記事を参考にさせていただいています。