MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Arduinoの基礎 - MQTTのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Arduinoの基礎 - MQTT
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == MQTTは軽量なメッセージング・プロトコルで、IoTデバイスの通信に最適である。<br> Arduinoのような限られたリソースを持つマイコンでも、効率的に通信できるよう設計されている。<br> <br> パブリッシャー (発行者) と サブスクライバ (購読者)、それらの仲介役となるBroker (ブローカー) という構成で動作する。<br> <br> MQTT通信では、トピックという概念がある。<br> 例えば、温度センサの値を送信する場合、"home/livingroom/temperature"というトピックを設定する。<br> パプリッシャーは、このトピックにデータを送信して、サブスクライバは興味のあるトピックを購読する。<br> <br> これにより、以下に示すような通信が可能になる。<br> * 1対多の通信 *: 1つのパプリッシャーから複数のサブスクライバにデータを配信する。 * 多対1の通信 *: 複数のセンサからのデータを1つのモニタリングシステムで受信する。 * 多対多の通信 *: 複数のデバイス間でデータを共有する。 <br> また、MQTTには3段階のQoS (Quality of Service) がある。<br> * 0 *: 最大1回配信 *: 信頼性は低いが最も軽量 * 1 *: 最低1回配信 *: メッセージの到達を確認 * 正確に1回配信 *: 最も信頼性が高いが、オーバーヘッドも大きい。 <br> ArduinoでMQTT通信を実装する場合、ArduinoMqttClientライブラリやPubSubClientライブラリ等のライブラリを使用する。<br. * ArduinoMqttClientライブラリ *: 公式ライブラリであり、ビギナーにも簡単に使用できる。 * PubSubClientライブラリ *: 機能が豊富で広く使用されている。 <br> 例えば、家庭内のIoTシステムの場合、Arduinoは以下に示すような役割を果たすことができる。<br> 温度センサの値を定期的に送信するパプリッシャー、LED照明を制御するサブスクライバ、あるいはその両方の機能を持つデバイスとして動作させることができる。<br> <br> セキュリティ面においては、パブリックなMQTTブローカーを使用する場合は、センシティブな情報を送信しないように注意する。<br> もし、重要なデータを扱う場合、暗号化通信 (SSL/TLS証明書) の使用やユーザ認証の設定を行うべきである。<br> <br> Arduinoを使用したMQTT通信は、適切に実装することにより、信頼性の高いIoTシステムを構築できるツールである。<br> <br><br> == 必要な構成 == * ハードウェア ** Arduino UNO R4 WiFi *: <br> * ソフトウェア ** Arduino IDE 2.0以降 ** Arduino_ConnectionHandlerライブラリ ** ArduinoMqttClientライブラリ ** WiFiS3ライブラリ *: <br> * MQTTブローカー *: MQTTブローカーを構築する場合、あるいは、MQTTブローカーサービスを契約する場合は、[[Web - MQTTブローカー]]のページを参照すること。 <br><br> == MQTT通信 == Arduino R4 WiFiを使用して、MQTT通信でトピックの送受信を行っている。<br> <br> * Wi-Fiへの接続 *: SSIDとパスワードを使用して、Wi-Fiネットワークに接続する。 *: 接続状態をシリアルモニタに表示する。 * MQTTブローカーへの接続 *: 指定されたMQTTブローカーとポートに接続する。 * トピックの送信 *: 5秒ごとにカウンター値をMQTTトピックに送信する。 *: 送信内容はシリアルモニタにも表示する。 * トピックの受信 *: 購読しているトピックからメッセージを受信した場合に表示する。 *: また、メッセージの内容をシリアルモニタに出力する。 <br> ==== 送信 (MQTTパブリッシャー側) ==== 以下の例では、5秒ごとにカウンタの値を送信 (パブリッシュ) している。<br> <br> <syntaxhighlight lang="c++"> #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(); } } </syntaxhighlight> <br> ==== 受信 (サブスクライバ側) ==== 以下の例では、受信したトピックの購読 (サブスクライブ) している。<br> <br> <syntaxhighlight lang="c++"> #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(); } } </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Arduino]]
Arduinoの基礎 - MQTT
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse