Arduinoの基礎 - MQTT
ナビゲーションに移動
検索に移動
概要
必要な構成
- ハードウェア
- Arduino UNO R4 WiFi
- ソフトウェア
- Arduino IDE 2.0以降
- Arduino_ConnectionHandlerライブラリ
- ArduinoMqttClientライブラリ
- WiFiS3ライブラリ
MQTT通信
Arduino R4 WiFiを使用して、MQTT通信でトピックの送受信を行っている。
- Wi-Fiへの接続
- SSIDとパスワードを使用して、Wi-Fiネットワークに接続する。
- 接続状態をシリアルモニタに表示する。
- MQTTブローカーへの接続
- 指定されたMQTTブローカーとポートに接続する。
- トピックの送信
- 5秒ごとにカウンター値をMQTTトピックに送信する。
- 送信内容はシリアルモニタにも表示する。
- トピックの受信
- 購読しているトピックからメッセージを受信した場合に表示する。
- また、メッセージの内容をシリアルモニタに出力する。
送信 (MQTTパブリッシャー側)
以下の例では、5秒ごとにカウンタの値を送信 (パブリッシュ) している。
#include <WiFiS3.h>
#include <ArduinoMqttClient.h>
// Wi-Fi設定
const char ssid[] = "<Wi-FiのSSID>"
const char pass[] = "<WiFiのパスワード>"
// MQTTブローカーの設定
const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>";
const int mqtt_port = 1883; // MQTTのポート番号
const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
void setup()
{
Serial.begin(9600);
while (!Serial); // シリアルポートの準備待ち
// Wi-Fi接続
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to WiFi");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// MQTTブローカーへの接続
Serial.print("Connecting to MQTT broker...");
if (!mqttClient.connect(mqtt_broker, mqtt_port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1);
}
Serial.println("Connected to MQTT broker!");
}
void loop()
{
// MQTT接続の維持
mqttClient.poll();
// 5秒ごとにメッセージを送信
static unsigned long previousMillis = 0;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 5000) {
previousMillis = currentMillis;
// サンプルデータの作成(ここでは単純なカウンター)
static int counter = 0;
String message = "Count: " + String(counter++);
// メッセージの送信
Serial.print("Sending message: ");
Serial.println(message);
mqttClient.beginMessage(mqtt_topic);
mqttClient.print(message);
mqttClient.endMessage();
}
}
受信 (サブスクライバ側)
以下の例では、受信したトピックの購読 (サブスクライブ) している。
#include <WiFiS3.h>
#include <ArduinoMqttClient.h>
// Wi-Fi設定
const char ssid[] = "<Wi-FiのSSID>"
const char pass[] = "<WiFiのパスワード>"
// MQTTブローカーの設定
const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>";
const int mqtt_port = 1883; // MQTTのポート番号
const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
void setup()
{
Serial.begin(9600);
while (!Serial); // シリアルポートの準備待ち
// Wi-Fi接続
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to WiFi");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// MQTTブローカーへの接続
Serial.print("Connecting to MQTT broker...");
if (!mqttClient.connect(mqtt_broker, mqtt_port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1);
}
Serial.println("Connected to MQTT broker!");
// トピックの購読 (サブスクライブ)
Serial.print("Subscribing to topic: ");
Serial.println(mqtt_topic);
mqttClient.subscribe(mqtt_topic);
}
void loop()
{
// MQTT接続の維持
mqttClient.poll();
// 受信したメッセージの処理
int messageSize = mqttClient.parseMessage();
if (messageSize) {
Serial.print("Received a message with topic '");
Serial.print(mqttClient.messageTopic());
Serial.print("', length ");
Serial.print(messageSize);
Serial.println(" bytes:");
// メッセージの内容を読み取って表示
while (mqttClient.available()) {
Serial.print((char)mqttClient.read());
}
Serial.println();
}
}