Intern

M5Stackの中の加速度センサーの情報をMqttでNode-REDに送ってみよう

はじめに

今回は前回セットアップしたM5Stackの中にある加速度センサの情報をMQTTでNode-RED(Windows)にデータを送っていきます

セットアップ編

M5StackをArduino IDEで動かす 目次 ・はじめに ・使用デバイス ・Arduino IDEのインストール ・BOARDS MANAGERの設定 ...

準備

・Arduino

ライブラリマネージャーで「PubSubClient」を検索&ダウンロード

・Node-RED

  • Mqtt INノード
  • デバックノード

トピックは/m5stack/dataにします

今回はlocal環境で受けるのでサーバはlocalhost

MQTT(windows側)
管理者権限でCMDを立ち上げてmoquittoを立ち上げます

・立ち上げコマンド

net start mosquitto

・1883portが開いているかを確認するコマンド
 これで1883がLISTENされているかを確認

netstat -an | find "1883"

M5Stackに書き込んでいく

・書き込むコード
(一秒に一回データを送る)

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

// WiFi設定
const char* ssid = "**********";  // WiFiのSSID
const char* password = "********";  // WiFiのパスワード

// MQTTブローカーの設定
const char* mqtt_server = "***********";  // ホストマシンのIPアドレス
const char* mqtt_topic = "/m5stack/data";  // MQTTトピック

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.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  // 再接続ループ
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // 接続を試みる
    if (client.connect("M5StackClient")) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // 再試行まで5秒待機
      delay(5000);
    }
  }
}
void setup() {
  M5.begin();
  Serial.begin(9600);
  setup_wifi();
  client.setServer(mqtt_server, 1883);

  // MPU6886の初期化
  if (M5.IMU.Init() != 0) {
    Serial.println("MPU6886 initialization failed!");
    while (1) {
      delay(10);
    }
  }

  Serial.println("MPU6886 initialized successfully!");
}


void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  float accX, accY, accZ;

  // 加速度データを取得
  M5.IMU.getAccelData(&accX, &accY, &accZ);

  // JSONペイロードの生成
  String jsonPayload = "{\"accX\": " + String(accX) + ", \"accY\": " + String(accY) + ", \"accZ\": " + String(accZ) + "}";
  char payload[100];
  jsonPayload.toCharArray(payload, 100);

  // MQTTメッセージの送信
  client.publish(mqtt_topic, payload);

  delay(1000);  // 1秒待機
}

・SSIDを確認する時はネットワーク・インターネットで接続しているネットワークのSSIDを見る事が出来ます

MQTTでしっかりと送れました