Edited at

M5Stack と PubSubClient で SORACOM Beam 越しに MQTT で Amazon MQ と Pub/Sub する

Qiita 内の Amazon MQ エントリー数 No.1 (5/25時点) の松下です。

ワイもく! Vol.8 の中の 「第5回 M5Stack もくもく会」に参加、M5Stack と PubSubClient で SORACOM Beam 越しに MQTT で Amazon MQ と Pub/Sub を試してみました。


構成

残念なことに 通信部分はモバイルルーターを使ってます (^^;;;

全体構成図


実装

以下、実装です。


コード(スケッチ)

#include <WiFi.h>

#include <WiFiClient.h>
#include <PubSubClient.h>
#include <M5Stack.h>

char *ssid = "SSID";
char *password = "Pass";

#define __VERSION__ "1.0.0"
#define LOOP_INTERVAL (6000)

char *THING_NAME = "M5Stack";

////////////////////////////////////////////////////////////////////////////////

WiFiClient netClient;
PubSubClient MqttClient;

void callback(char* topic, byte* payload, unsigned int length) {
String buf_t = String(topic);
Serial.print("Incoming: "); Serial.println(buf_t);
payload[length] = '\0';
String buf_s = String((char*) payload);
M5.Lcd.clear();
M5.Lcd.setCursor(10, 10);
if (length == 1) {
int n = buf_s.toInt();
M5.Lcd.setTextSize(1);
M5.Lcd.printf("setTextSize = %d\n", n);
M5.Lcd.setTextSize(n);
} else {
M5.Lcd.clear();
int src_len = buf_s.length() + 1;
char s[src_len];
buf_s.toCharArray(s, src_len);
M5.Lcd.printf(s);
}
}

void setup_network() {
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.");
}

void connect() {
setup_network();
Serial.print("ThingName(mqtt_id): "); Serial.println(THING_NAME);
MqttClient.setServer("beam.soracom.io", 1883);
MqttClient.setCallback(callback);
MqttClient.setClient(netClient);
if (!MqttClient.connect(THING_NAME)) {
Serial.println(MqttClient.state());
}
MqttClient.subscribe("m5stack/sub/#");
}

void setup() {
Serial.begin(115200);
M5.begin();
connect();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(1);
M5.Lcd.printf("Ready");
}

void loop() {
unsigned long next = millis();
while (millis() < next + LOOP_INTERVAL) {
MqttClient.loop();
}
Serial.println("loop");
MqttClient.publish("m5stack/ping", "(^^)");
}


Amazon MQ と SORACOM Beam

詳しくはこちらで。


おわりに

うーん、M5Stack にセルラー通信が入ってくれると嬉しい。ケースには入ってるし、モニターもついてるし、電池も入ってるし!!

ワイもく!さんは「コラボ推奨」とのことで、みんなでワイワイやれたのは楽しかったです!

EoT