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

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 オンでつなぐメモ のような仕組みで、今回のトピックを購読していると、このように値が来たことが分かります。