AtomS3 から HiveMQ の MQTT ID/Pass+TLS(証明書なし)へのつなぎ方のメモ
AtomS3 から HiveMQ の MQTT ID/Pass+TLS(証明書なし)へのつなぎ方のメモです。
背景

Node-RED から HiveMQ MQTT ブローカーに ID/Pass + TLS オンでつなぐメモ - 1ft-seabass.jp.MEMO
こちらがうまくいったので AtomS3 でもつながるようにして IoT をやりやすくします。
今回のプログラム
シンプルに AtomS3 から HiveMQ の MQTT ID/Pass+TLS(証明書なし)へのつなげます。
WiFi ... と Wi-Fi につないで成功すると WiFi OK とともに IP アドレスを表示、その後 MQTT ... として HiveMQ へつないで成功すると MQTT OK としつつ {"message":"connected"} という値を MQTT パブリッシュします。
通常の MQTT 接続の時とほぼかわりませんが、ポイントは netClient.setInsecure(); することです。
#include "M5AtomS3.h"
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// ———— ファームウェア情報 ————
#define FW_NAME "AtomS3_HiveMQ_Simple"
#define FW_VERSION "1.0.5"
// ———— Wi-Fi 設定 ————
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// ———— MQTT ブローカー設定 ————
const char* mqttServer = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx.eu.hivemq.cloud";
const int mqttPort = 8883;
const char* mqttUser = "mqttUser";
const char* mqttPassword = "mqttPassword";
// ———— パブリッシュ先トピック ————
char pubTopic[64];
// ———— クライアント定義 ————
WiFiClientSecure netClient;
PubSubClient mqttClient(netClient);
// ———— MQTT 接続/再接続 ————
void connectMQTT() {
while (!mqttClient.connected()) {
if (mqttClient.connect("AtomS3_Client", mqttUser, mqttPassword)) {
// 接続成功 → 表示とメッセージ送信
AtomS3.Display.clear();
AtomS3.Display.setCursor(0, 0);
AtomS3.Display.println("MQTT OK");
// JSON {"message":"connected"} を送信
StaticJsonDocument<64> doc;
doc["message"] = "Connected";
char buf[64];
size_t len = serializeJson(doc, buf);
mqttClient.publish(pubTopic, buf);
delay(2000);
} else {
delay(5000);
}
}
}
void setup() {
// AtomS3 初期化
auto cfg = M5.config();
AtomS3.begin(cfg);
AtomS3.Display.setTextDatum(TL_DATUM);
AtomS3.Display.setTextSize(1);
AtomS3.Display.clear();
// Wi-Fi 接続開始表示
AtomS3.Display.println("WiFi ...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Wi-Fi 接続完了表示
AtomS3.Display.clear();
AtomS3.Display.println("WiFi OK");
AtomS3.Display.print("IP: ");
AtomS3.Display.println(WiFi.localIP().toString());
delay(2000);
// MAC アドレスベースでトピック設定(末尾を "/message" に変更)
String mac = WiFi.macAddress();
mac.replace(":", "");
sprintf(pubTopic, "atoms3/%s/message", mac.c_str());
// TLS 検証スキップ(自己署名証明書でもOK)
netClient.setInsecure();
// MQTT 初期設定
mqttClient.setServer(mqttServer, mqttPort);
// MQTT 接続開始表示
AtomS3.Display.clear();
AtomS3.Display.println("MQTT ...");
connectMQTT();
}
void loop() {
if (!mqttClient.connected()) {
connectMQTT();
}
mqttClient.loop();
}
Wi-Fi や MQTT の設定をする
// ———— Wi-Fi 設定 ————
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
つなげたい Wi-Fi の設定をします。
HiveMQ を MQTT のほうに設定するには、
// ———— MQTT ブローカー設定 ————
const char* mqttServer = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx.eu.hivemq.cloud";
const int mqttPort = 8883;
const char* mqttUser = "mqttUser";
const char* mqttPassword = "mqttPassword";
Node-RED から HiveMQ MQTT ブローカーに ID/Pass + TLS オンでつなぐメモ を参考にしつつ、

HiveMQ の Cluster の Overviewn の情報を元に
- mqttServer
- HiveMQ の Cluster の Overview にある URL
- mqttPort
- 8883

HiveMQ の Access Management のところで設定した Username と Password を使って
- mqttUser
- HiveMQ の Access Management のところで設定した Username
- mqttPassword
- HiveMQ の Access Management のところで設定した Password
を設定します。
こちらを AtomS3 に書き込みます。
動かしてみる
電源入れて動かしてみます。

WiFi ... と Wi-Fi につないで。

成功すると WiFi OK とともに IP アドレスを表示、

その後 MQTT ... として HiveMQ へつないで、

成功すると MQTT OK とします。

接続成功直後に {"message":"connected"} という値を、トピックは AtomS3 の MAC アドレスベースでトピックへ MQTT パブリッシュするので Node-RED から HiveMQ MQTT ブローカーに ID/Pass + TLS オンでつなぐメモ のような仕組みで、今回のトピックを購読していると、このように値が来たことが分かります。