CherryLight

CheerLightsは、誰でも制御できるグローバルな同期ライトのネットワークです。 @CheerLights - Twitter のLEDカラーチェンジコミュニティに参加し、世界中のLEDを同時に色を変えられるようにしましょう。オフィスの片隅にLEDを置いて、自分が一人でないことを思い出しましょう。

このケースでは、MQTTを使用しますが、自分のメッセージを公開する代わりに、「cheerlights」というトピックにサブスクライブします。これにより、他の人が「cheerlights」トピックに送信したメッセージを受信し、その情報を使用してLEDストリップの色を変更することができます。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

全体のキットを購入すると便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから別々に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ジャンパーワイヤー

BUY

WS2812 RGB 8 LEDストリップ

BUY

配線図

../_images/05_cheerlight_bb.png

回路図

../_images/05_cheerlight_schematic.png

ライブラリのインストール

ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、「ArduinoMqttClient」と「FastLED」を検索してインストールしてください。

ArduinoMqttClient.h:MQTT通信用に使用します。

FastLED.h:RGB LEDストリップのドライブに使用します。

コードの実行

注釈

  • ファイル 05_cheerlight.inoelite-explorer-kit-main\iot_project\05_cheerlight のパスから直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

注釈

コード内で、SSIDとパスワードは arduino_secrets.h に格納されています。この例をアップロードする前に、自分のWiFiの認証情報でそれらを修正する必要があります。さらに、コードを共有または保存する際には、この情報を機密に保つためのセキュリティ対策を講じてください。

グローバルな@CheerLightsデバイスを制御する

  1. Discord Server に参加し、 /CheerLights ボットを利用して色を設定します。 CheerLights Discord Server の任意のチャンネルで「/cheerlights」と入力してボットをアクティブにします。

    ../_images/05_iot_cheerlights_1.png
  2. ボットが提供する指示に従って色を設定します。これにより、グローバルにCheerLightsデバイスを制御できます。

    ../_images/05_iot_cheerlights_2.png

どのように動作するのか?

こちらはコードの主要部分とその機能の説明です:

  1. 必要なライブラリを含む:

    • WiFiS3.h:Wi-Fi接続の処理に使用します。

    • ArduinoMqttClient.h:MQTT接続の処理に使用します。

    • FastLED.h:NeoPixel LEDストリップの制御に使用します。

  2. いくつかの定数を定義する:

    • NUM_LEDS:LEDストリップ上のLEDの数。

    • DATA_PIN:LEDストリップを制御するためにArduinoに接続されているデータピン。

    • arduino_secrets.h:Wi-Fiネットワーク名とパスワードを含むヘッダーファイルで、機密情報を保護します。

    • broker:MQTTサーバーのアドレス。

    • port:MQTTサーバーのポート。

    • topic:サブスクライブするMQTTトピック。

  3. いくつかのグローバル変数を定義する:

    • CRGB leds[NUM_LEDS]:LEDの色データを格納するための配列。

    • colorName:CheerLightsプロジェクトでサポートされている色名の配列。

    • colorRGB:色名に対応するRGBカラーコードの配列。

  4. setup() 関数:

    • シリアル通信を初期化します。

    • Wi-Fiモジュールが存在するかを確認し、そのファームウェアバージョンを出力します。

    • Wi-Fiネットワークに接続を試み、失敗した場合は10秒待って再試行します。

    • 接続に成功したら、MQTTブローカー(サーバー)に接続し、指定されたトピックにサブスクライブします。

    • NeoPixel LEDストリップを初期化します。

  5. loop() 関数:

    • 定期的に mqttClient.poll() 関数を呼び出して、MQTTメッセージを受信し、MQTTのキープアライブ信号を送信します。

    • 継続的な接続を避けるために5秒の遅延を追加します。

  6. printWifiData() および printCurrentNet() 関数は、Wi-Fiネットワークおよび接続情報を出力するために使用されます。

  7. printMacAddress() 関数は、MACアドレスを16進数形式で印刷するために使用されます。

  8. onMqttMessage() 関数は、MQTTメッセージが受信されたときにトリガーされるコールバック関数です。受信したトピックとメッセージ内容を出力し、メッセージ内容を小文字に変換します。トピックが「cheerlights」の場合、 setColor() 関数を呼び出して、LEDストリップの色を設定します。

  9. setColor() 関数は、色名をパラメータとして取り、 colorName 配列で一致する色を探します。一致する色が見つかった場合、LEDストリップの色を対応するRGB値に設定し、 FastLED.show() 関数を使用してLEDストリップの色を更新します。