MQTTとArduino Unoの使い始め方

Ari Mahpour
|  投稿日 2021/10/19 火曜日  |  更新日 2024/07/1 月曜日
MQTTの基礎

今日の世界では、接続されたデバイスが至る所に存在するようになり、「Internet of Things(IoT)」という用語は、「インターネットに接続されたウィジェット」という意味で事実上の説明となっています。この美化されたキャメルケースの略語はそれ自体が美しいものですが、「インターネットに接続されたデバイス」には、人々が認識している以上のものがあります。この記事では、IoTデバイスで使用される最も一般的なプロトコルの1つであるMQ Telemetry Transport(MQTT)プロトコルについて、もっと深く掘り下げてみたいと思います。それが何であるか、どのように機能するか、そして他の技術と比ぼして何が新しいのかを簡単に説明します。また、Arduinoデバイスを使用した包括的な例を通して説明します。

MQTTの何となぜ

典型的なクライアントサーバー設定では、プロバイダー(つまりデバイス自体)がセンサーデータをサーバーに投稿し、消費者がそのセンサーデータをサーバーから表示することを要求します。MQTTも同様です。これは、デバイス間の通信に使用される軽量プロトコルです。デバイスは通常、データをMQTT「ブローカー」(またはサーバー)に「公開」(つまり送信)します。その後、そのデータは他のデバイスやWebアプリケーションに提供されるために保持されます。別のデバイスやWebアプリケーションがそのデータセットをMQTTブローカーから「購読」(つまりデータを要求)し、その後MQTTブローカーがそのデバイスにデータを配信します。これを本当に、2つの主要な例外を持つただの高機能なWebサーバーと考えてください:

  1. データパケットは非常に軽量です(これにより、速度、効率、およびコストが向上します)
  2. MQTTはインターネットだけでなく、他の通信モード(例えば、Bluetooth)を使用することができます
Figure 1: MQTT Broker with Devices
図1: MQTTブローカーとデバイス

上記の2つの理由から、MQTTはIoTデバイスで非常に人気のあるプロトコルになりました。歴史的には、人々はこの形式のデバイス-サーバー通信を実現するためにHTTP POST/GETリクエストを使用していましたが、BluetoothやZigBeeなどの他の通信デバイスの使用を妨げていました。MQTTはその点で中立的であるため、インターネットに接続することなくメッシュベースのネットワーク内でMQTTを使用してメッセージをやり取りすることができるようになりました

MQTTの始め方

MQTTを始める方法は多くありますが、完全なエンドツーエンドのソリューションを設計することを含みます。ここでは、Adafruitが提供する無料のMQTTブローカーサービスを利用することで、開発プロセスのクライアント側にのみ焦点を当てることにします。始めるためには、以下が必要です:

  1. Arduinoデバイス(この例ではArduino Unoを使用)
  2. インターネット接続をサポートするArduinoシールド(例:Arduino Ethernetシールド)またはESP8266のようなWifiベースのArduino互換デバイス。
  3. Arduino IDEソフトウェア
  4. Adafruit IOのアカウント。

環境を設定するためにまず行うべきいくつかのことがあります。まず、ハードウェアの設定をしましょう。私はArduino UnoとArduino Ethernet Shieldを使用して、ローカルネットワークに接続します。

Easy, Powerful, Modern

The world’s most trusted PCB design system.

Figure 2: Arduino Uno and Arduino Ethernet Shield side by side
図2: Arduino UnoとArduino Ethernet Shieldを並べて

Ethernet ShieldをArduinoの上に重ねて、次のようにネットワークに接続します:

Figure 3: Arduino Uno and Arduino Ethernet Shield hooked up together and plugged in
図3: Arduino UnoとArduino Ethernet Shieldを接続して電源を入れた状態

ハードウェアの設定が完了したら、Arduino IDEを開いて必要なライブラリをインストールしましょう。Arduino IDEを開き、ツール > ライブラリの管理...に移動します。

Figure 4: Manage Libraries menu option
図4: ライブラリ管理メニューオプション

Adafruit MQTTライブラリを検索して、インストールをクリックします:

Figure 5: Library Manager
図5: ライブラリマネージャー

ライブラリの依存関係もインストールするように求められます。その場合は、「すべてインストール」をクリックしてください。

Figure 6: Library Dependencies Dialog
図6: ライブラリ依存関係ダイアログ

サポートライブラリをインストールしたら、File > Examples > Adafruit MQTT Library > mqtt_ethernetに移動して例を開くことができます。

Cloud Storage and Version Control

Store all of your libraries and design data in one secure, accessible, and version-controlled space.

Figure 7: Menu navigation for the mqtt_ethernet example
図7: mqtt_ethernet例のためのメニューナビゲーション

この時点で一時停止し、Adafruit IOアカウントから認証情報を取得する必要があります。Adafruit IOにログインし、上部の「My Key」をクリックします:

Figure 8: My Key Menu Option
図8: 私のキーメニューオプション

次に、Arduinoのmqtt_ethernetスケッチ例に戻り、Adafruit IOアカウントにある「Username」と「Active Key」フィールドをAIO_USERNAMEとAIO_KEYフィールドに入力します。デバイスが接続されていることを確認してから、Uploadをクリックします:

Figure 9: Arduino Sketch ready for the upload
図9: アップロードの準備ができたArduinoスケッチ

デバイスの状態(およびMQTTブローカーに接続されていること)を確認するには、Tools > Serial Monitorに移動します。このような出力が表示されるはずです:

Figure 10: Serial Monitor output of the Arduino mqtt_ethernet example
図10: Arduino mqtt_ethernet例のシリアルモニタ出力

この時点で、データがMQTTブローカーに正常に送信されていることが確認できました。サーバー上の実際のデータを見るために、Adafruit IOアカウントに戻り、「Feeds」をクリックしてから「photocell」をクリックしましょう。

Figure 11: Adafruit IO Feeds
図11: Adafruit IOフィード

これで、ArduinoがMQTTブローカーに送信しているデータのライブキャプチャを取得できます。また、過去のデータもダウンロードできます。

Figure 12: Live and historical data sent to the MQTT broker from the Arduino
図12: ArduinoからMQTTブローカーに送信されたライブおよび履歴データ

おめでとうございます!MQTT対応デバイスの設定が完了し、データをMQTTブローカーに公開しました。次のステップとして、独自のカスタムセンサーを構築し、そのデータをMQTTブローカーに公開してみましょう。

結論

この記事では、MQTTが何であるか、なぜ使用されるのか、そしてマイクロコントローラーに実装する方法について学びました。また、無料のMQTTブローカーサービスを利用して始める方法と、そのサーバー上でデータを表示する方法も実演しました。これで、私たちが使用した例に基づいて独自のArduinoスケッチを開始し、独自のセンサーデータをMQTTブローカーに公開し、クラウド上でそれを表示することに自信を持っていただけるはずです。

筆者について

筆者について

Ariは、設計、デバイスパッケージ、テスト、および電気、機械、およびソフトウェアシステムの統合において幅広い経験を持つエンジニアです。彼は、設計/デザイン、検証、テストのエンジニアをまとめて団結したグループとして機能させることに情熱を注いでいます。

関連リソース

ホームに戻る
Thank you, you are now subscribed to updates.
Altium Need Help?