You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ja/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md

13 KiB

インターネット経由でナイトライトを制御する - Wio Terminal

IoTデバイスは、MQTTを使用してtest.mosquitto.orgと通信するようにコード化する必要があります。これにより、光センサーの読み取り値を含むテレメトリーデータを送信し、LEDを制御するコマンドを受信します。

このレッスンのこの部分では、Wio TerminalをMQTTブローカーに接続します。

WiFiおよびMQTT Arduinoライブラリのインストール

MQTTブローカーと通信するには、Wio TerminalのWiFiチップを使用するためのArduinoライブラリをインストールし、MQTTと通信できるようにする必要があります。Arduinoデバイスの開発では、オープンソースコードを含む多くのライブラリを利用でき、さまざまな機能を実装できます。Seeedは、Wio TerminalがWiFiを介して通信できるようにするライブラリを公開しています。他の開発者は、MQTTブローカーと通信するためのライブラリを公開しており、これらをデバイスで使用します。

これらのライブラリはソースコードとして提供され、PlatformIOに自動的にインポートしてデバイス用にコンパイルできます。この方法により、Arduinoフレームワークをサポートするデバイスであれば、特定のハードウェアが必要な場合を除き、どのデバイスでもArduinoライブラリを使用できます。たとえば、Seeed WiFiライブラリのように、特定のハードウェアに特化したライブラリもあります。

ライブラリはグローバルにインストールして必要に応じてコンパイルすることも、特定のプロジェクトにインストールすることもできます。この課題では、ライブラリをプロジェクトにインストールします。

ライブラリ管理やライブラリの検索・インストール方法については、PlatformIOライブラリドキュメントで詳しく学べます。

タスク - WiFiおよびMQTT Arduinoライブラリのインストール

Arduinoライブラリをインストールします。

  1. VS Codeでナイトライトプロジェクトを開きます。

  2. platformio.iniファイルの末尾に以下を追加します:

    lib_deps =
        seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5
        seeed-studio/Seeed Arduino FS @ 2.1.1
        seeed-studio/Seeed Arduino SFUD @ 2.0.2
        seeed-studio/Seeed Arduino rpcUnified @ 2.1.3
        seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1
    

    これにより、Seeed WiFiライブラリがインポートされます。@ <number>の構文は、ライブラリの特定のバージョン番号を指します。

    💁 @ <number>を削除すると、常に最新バージョンのライブラリを使用するようになりますが、後述のコードが後のバージョンで動作する保証はありません。ここでのコードは、このバージョンのライブラリでテストされています。

    これでライブラリを追加する準備は完了です。次回PlatformIOがプロジェクトをビルドする際に、これらのライブラリのソースコードをダウンロードし、プロジェクトにコンパイルします。

  3. lib_depsに以下を追加します:

    knolleary/PubSubClient @ 2.8
    

    これは、PubSubClientというArduino MQTTクライアントをインポートします。

WiFiに接続する

これでWio TerminalをWiFiに接続できるようになりました。

タスク - WiFiに接続する

Wio TerminalをWiFiに接続します。

  1. srcフォルダにconfig.hという新しいファイルを作成します。これは、srcフォルダまたはその中のmain.cppファイルを選択し、エクスプローラーの新しいファイルボタンをクリックすることで行えます。このボタンは、カーソルがエクスプローラー上にあるときにのみ表示されます。

    新しいファイルボタン

  2. このファイルに以下のコードを追加し、WiFiの認証情報を定義します

    #pragma once
    
    #include <string>
    
    using namespace std;
    
    // WiFi credentials
    const char *SSID = "<SSID>";
    const char *PASSWORD = "<PASSWORD>";
    

    <SSID>をWiFiのSSIDに置き換えます。<PASSWORD>をWiFiのパスワードに置き換えます。

  3. main.cppファイルを開きます。

  4. ファイルの先頭に以下の#includeディレクティブを追加します:

    #include <PubSubClient.h>
    #include <rpcWiFi.h>
    #include <SPI.h>
    
    #include "config.h"
    

    これは、先ほど追加したライブラリやconfigヘッダーファイルのヘッダーファイルを含めます。これらのヘッダーファイルを明示的に含めないと、一部のコードがコンパイルされず、コンパイラエラーが発生します。

  5. setup関数の上に以下のコードを追加します:

    void connectWiFi()
    {
        while (WiFi.status() != WL_CONNECTED)
        {
            Serial.println("Connecting to WiFi..");
            WiFi.begin(SSID, PASSWORD);
            delay(500);
        }
    
        Serial.println("Connected!");
    }
    

    このコードは、デバイスがWiFiに接続されていない間ループし、configヘッダーファイルから取得したSSIDとパスワードを使用して接続を試みます。

  6. この関数をsetup関数のピン設定後に呼び出します。

    connectWiFi();
    
  7. このコードをデバイスにアップロードして、WiFi接続が機能しているか確認します。シリアルモニターに以下が表示されるはずです。

    > Executing task: platformio device monitor <
    
    --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
    --- More details at http://bit.ly/pio-monitor-filters
    --- Miniterm on /dev/cu.usbmodem1101  9600,8,N,1 ---
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    Connecting to WiFi..
    Connected!
    

MQTTに接続する

Wio TerminalがWiFiに接続されたら、MQTTブローカーに接続できます。

タスク - MQTTに接続する

MQTTブローカーに接続します。

  1. config.hファイルの末尾に以下のコードを追加し、MQTTブローカーの接続情報を定義します

    // MQTT settings
    const string ID = "<ID>";
    
    const string BROKER = "test.mosquitto.org";
    const string CLIENT_NAME = ID + "nightlight_client";
    

    <ID>を、このデバイスクライアントの名前として使用する一意のIDに置き換えます。このIDは、後でこのデバイスが発行および購読するトピックにも使用されます。test.mosquitto.orgブローカーは公開されており、多くの人が使用しています。この課題に取り組む他の学生も含まれます。一意のMQTTクライアント名とトピック名を持つことで、コードが他の人のコードと競合しないようにします。このIDは、後でサーバーコードを作成する際にも必要です。

    💁 GUIDGenのようなウェブサイトを使用して、一意のIDを生成できます。

    BROKERはMQTTブローカーのURLです。

    CLIENT_NAMEは、このブローカー上でのMQTTクライアントの一意の名前です。

  2. main.cppファイルを開き、connectWiFi関数の下、setup関数の上に以下のコードを追加します:

    WiFiClient wioClient;
    PubSubClient client(wioClient);
    

    このコードは、Wio Terminal WiFiライブラリを使用してWiFiクライアントを作成し、それを使用してMQTTクライアントを作成します。

  3. このコードの下に以下を追加します:

    void reconnectMQTTClient()
    {
        while (!client.connected())
        {
            Serial.print("Attempting MQTT connection...");
    
            if (client.connect(CLIENT_NAME.c_str()))
            {
                Serial.println("connected");
            }
            else
            {
                Serial.print("Retying in 5 seconds - failed, rc=");
                Serial.println(client.state());
    
                delay(5000);
            }
        }
    }
    

    この関数は、MQTTブローカーへの接続をテストし、接続されていない場合は再接続します。接続されていない間はループし、configヘッダーファイルで定義された一意のクライアント名を使用して接続を試みます。

    接続に失敗した場合、5秒後に再試行します。

  4. reconnectMQTTClient関数の下に以下のコードを追加します:

    void createMQTTClient()
    {
        client.setServer(BROKER.c_str(), 1883);
        reconnectMQTTClient();
    }
    

    このコードは、クライアントのMQTTブローカーを設定し、メッセージを受信したときのコールバックを設定します。その後、ブローカーへの接続を試みます。

  5. WiFi接続後にsetup関数内でcreateMQTTClient関数を呼び出します。

  6. loop関数全体を以下のコードに置き換えます:

    void loop()
    {
        reconnectMQTTClient();
        client.loop();
    
        delay(2000);
    }
    

    このコードは、まずMQTTブローカーへの再接続を行います。これらの接続は簡単に切断される可能性があるため、定期的に確認し、必要に応じて再接続する価値があります。その後、MQTTクライアントのloopメソッドを呼び出して、購読しているトピックで受信しているメッセージを処理します。このアプリはシングルスレッドで動作するため、バックグラウンドスレッドでメッセージを受信することはできません。そのため、ネットワーク接続で待機しているメッセージを処理するためにメインスレッドの時間を割り当てる必要があります。

    最後に、2秒の遅延を設けることで、光レベルが頻繁に送信されるのを防ぎ、デバイスの消費電力を削減します。

  7. このコードをWio Terminalにアップロードし、シリアルモニターを使用してデバイスがWiFiおよびMQTTに接続されているのを確認します。

    > Executing task: platformio device monitor <
    
    source /Users/jimbennett/GitHub/IoT-For-Beginners/1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal/nightlight/.venv/bin/activate
    --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
    --- More details at http://bit.ly/pio-monitor-filters
    --- Miniterm on /dev/cu.usbmodem1201  9600,8,N,1 ---
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    Connecting to WiFi..
    Connected!
    Attempting MQTT connection...connected
    

💁 このコードはcode-mqtt/wio-terminalフォルダにあります。

😀 デバイスをMQTTブローカーに正常に接続しました。

免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。