| (同じ利用者による、間の4版が非表示) | |||
| 40行目: | 40行目: | ||
<br> | <br> | ||
Arduinoを使用したMQTT通信は、適切に実装することにより、信頼性の高いIoTシステムを構築できるツールである。<br> | Arduinoを使用したMQTT通信は、適切に実装することにより、信頼性の高いIoTシステムを構築できるツールである。<br> | ||
<br> | |||
Arduino UNO R4 WiFiは、ESP32-S3モジュールを内蔵しており、、Wi-Fiネットワークに接続・操作することが可能である。<br> | |||
HTTPS、MQTT、UDPを含むプロトコルがサポートされている。<br> | |||
<br><br> | <br><br> | ||
| 50行目: | 53行目: | ||
** Arduino_ConnectionHandlerライブラリ | ** Arduino_ConnectionHandlerライブラリ | ||
** ArduinoMqttClientライブラリ | ** ArduinoMqttClientライブラリ | ||
**: ライブラリマネージャからArduinoMqttClientライブラリをインストールすること。 | |||
**: https://github.com/arduino-libraries/ArduinoMqttClient | |||
** WiFiS3ライブラリ | ** WiFiS3ライブラリ | ||
**: Arduino UNO R4 Core付属のWiFiS3ライブラリで有効化される。 | |||
**: そのため、Coreをインストールすることにより、自動的にWiFiS3ライブラリもインストールされる。 | |||
*: <br> | *: <br> | ||
* MQTTブローカー | * MQTTブローカー | ||
| 57行目: | 64行目: | ||
== MQTT通信 == | == MQTT通信 == | ||
Arduino R4 WiFiを使用して、MQTT通信でトピックの送受信を行っている。<br> | ==== 技術的な制約 ==== | ||
Arduino UNOのようなボードでは、メモリ制約により扱えるメッセージサイズに制限がある。<br> | |||
また、Wi-Fiモジュールの性能によっては、安定した通信のために適切な待機時間の設定が必要になることがある。<br> | |||
<br> | |||
==== デバッグとトラブルシューティング ==== | |||
開発時は、MQTTクライアントツール (例: MQTT Explorer) を使用することにより、通信の様子を視覚的に確認できる。<br> | |||
また、シリアルモニタを活用して、接続状態やメッセージの送受信を確認する。<br> | |||
<br> | |||
==== 使用例 ==== | |||
以下の例では、Arduino R4 WiFiを使用して、MQTT通信でトピックの送受信を行っている。<br> | |||
<br> | <br> | ||
* Wi-Fiへの接続 | * Wi-Fiへの接続 | ||
| 71行目: | 87行目: | ||
*: また、メッセージの内容をシリアルモニタに出力する。 | *: また、メッセージの内容をシリアルモニタに出力する。 | ||
<br> | <br> | ||
==== 送信 (MQTTパブリッシャー側) ==== | ===== 送信 (MQTTパブリッシャー側) ===== | ||
以下の例では、5秒ごとにカウンタの値を送信 (パブリッシュ) している。<br> | 以下の例では、5秒ごとにカウンタの値を送信 (パブリッシュ) している。<br> | ||
<br> | <br> | ||
| 85行目: | 101行目: | ||
const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>"; | const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>"; | ||
const int mqtt_port = 1883; // MQTTのポート番号 | const int mqtt_port = 1883; // MQTTのポート番号 | ||
const char mqtt_user = "<MQTTユーザ名>"; | |||
const char mqtt_password = "<MQTTユーザのパスワード>"; | |||
const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック | const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック | ||
| 109行目: | 127行目: | ||
// MQTTブローカーへの接続 | // MQTTブローカーへの接続 | ||
// クライアントIDを一意に設定 | |||
String clientId = "arduino_client_" + String(random(0xffff), HEX); | |||
mqttClient.setId(clientId.c_str()); | |||
// 認証情報の設定 | |||
mqttClient.setUsernamePassword(mqtt_user, mqtt_password); | |||
Serial.print("Connecting to MQTT broker..."); | Serial.print("Connecting to MQTT broker..."); | ||
if (!mqttClient.connect(mqtt_broker, mqtt_port)) { | if (!mqttClient.connect(mqtt_broker, mqtt_port)) { | ||
| 146行目: | 171行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== 受信 (サブスクライバ側) ==== | ===== 受信 (サブスクライバ側) ===== | ||
以下の例では、受信したトピックの購読 (サブスクライブ) している。<br> | 以下の例では、受信したトピックの購読 (サブスクライブ) している。<br> | ||
<br> | <br> | ||
| 160行目: | 185行目: | ||
const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>"; | const char mqtt_broker[] = "<MQTTブローカーのアドレス 例: test.mosquitto.org>"; | ||
const int mqtt_port = 1883; // MQTTのポート番号 | const int mqtt_port = 1883; // MQTTのポート番号 | ||
const char mqtt_user = "<MQTTユーザ名>"; | |||
const char mqtt_password = "<MQTTユーザのパスワード>"; | |||
const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック | const char mqtt_topic[] = "arduino/sensor"; // 投稿するトピック | ||
| 184行目: | 211行目: | ||
// MQTTブローカーへの接続 | // MQTTブローカーへの接続 | ||
// クライアントIDを一意に設定 | |||
String clientId = "arduino_client_" + String(random(0xffff), HEX); | |||
mqttClient.setId(clientId.c_str()); | |||
// 認証情報の設定 | |||
mqttClient.setUsernamePassword(mqtt_user, mqtt_password); | |||
Serial.print("Connecting to MQTT broker..."); | Serial.print("Connecting to MQTT broker..."); | ||
if (!mqttClient.connect(mqtt_broker, mqtt_port)) { | if (!mqttClient.connect(mqtt_broker, mqtt_port)) { | ||