2. @CheerLightsに参加する

これはロマンチックなプロジェクトで、 @CheerLights - Twitter LEDのカラーチェンジングコミュニティに参加するものです。このコミュニティでは、世界中のLEDが同時に色を変えることができます。

オフィスの隅に置いて、「自分は一人ではない」と感じるためのリマインダーとしても使用できます。

@cheerlightsにツイートを送り、そのツイート内に色の名前を含めると、世界中のLEDが指定した色に変わります。

必要な部品

このプロジェクトで必要な部品は以下の通りです。

一式をまとめて購入するのが便利ですが、その場合のリンクはこちらです。

名前

このキットの内容

リンク

ケプラーキット

450以上

Kepler Kit

下記のリンクから個々に購入することも可能です。

SN

部品

数量

リンク

1

Raspberry Pi Pico W

1

BUY

2

マイクロUSBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

WS2812 RGB 8 LEDストリップ

1

BUY

6

Li-po充電モジュール

1

7

18650バッテリー

1

8

バッテリーホルダー

1

手順

  1. 回路を組み立てます。

    ここで使用するLi-po Charger Module(リチウムポリマー充電モジュール)は、USBケーブルを切断して、プロジェクトを他の場所で遊ぶために回路に電力を供給します。

    警告

    Li-po Charger Moduleが図に示されているように接続されていることを確認してください。それ以外の場合、ショートする可能性があり、バッテリーと回路が損傷する可能性があります。

    ../_images/2.cheerlights_bb.png
  2. 以前に コードパッケージ をダウンロードしたフォルダにパスを切り替え、「kepler-kit-main/iot」のパスの下で 2_cheer_light.py ファイルを開きます。

  3. スクリプトを実行するには、 Run current script(現在のスクリプトを実行) ボタンをクリックするか、F5キーを押します。その後、Shellに接続プロンプト、IP、色(0xff0000は赤)が表示されます。

    注釈

    コードを実行する前に、Pico Wに do_connect.pysecrets.py のスクリプトがあることを確認してください。もし無ければ、 1. ネットワークへのアクセス を参照してそれらを作成してください。

    ../_images/2_cheerlight1.png
  4. スクリプトが実行された後、WS2812 RGBストリップは色を表示しますが、時抗その色は変わります。

  5. 起動時にこのスクリプトを実行する場合、以下の手順に従ってRaspberry Pi Pico Wに main.py として保存する必要があります。

    • スクリプトの実行を停止し、 File(ファイル) -> Save as(名前を付けて保存) をクリックします。

      ../_images/2_cheerlight2.png
    • ポップアップウィンドウで Raspberry Pi Pico を選択します。

      ../_images/2_cheerlight3.png
    • ファイル名を main.py に設定します。同じファイルがすでにPico Wに存在する場合は、プロンプトが表示されます。

      ../_images/2_cheerlight4.png
    • USBケーブルを抜いて、Li-po Charger ModuleでRaspberry Pi Pico Wに電力を供給することができます。角に置いておけば、自動的に動作します。

仕組み

Raspberry Pi Pico Wは、 1. ネットワークへのアクセス で説明されているように、インターネットに接続する必要があります。このプロジェクトでは、そのまま使用します。

from do_connect import *
do_connect()

WS2812 RGBストリップの設定については、 3.3 RGB LED ストリップ を参照してください。

import machine
from ws2812 import WS2812
ws = WS2812(machine.Pin(18), 8)

次に、@CheerLightsの色を取得する方法が必要です。Twitterから色の変更を受け取るバックエンドシステムがあり、その情報をJSON形式で URL http://api.thingspeak.com/channels/1417/field/2/last.json に投稿します。

このURLをブラウザで直接開くと、以下のようなものが表示されます。必要なのは field2 データで、16進数でエンコードされた色情報です。

{"created_at":"2022-08-16T06:12:44Z","entry_id":870488,"field2":"#ff00ff"}

このデータを取得するために urequests モジュールを使用し、 json モジュールを使用してこの文字をPythonの辞書に変換します。 次のコードは、URLから最新の@CheerLightsの色を取得し、WS2812で使用できる色値を返します。

def get_colour():
    url = "http://api.thingspeak.com/channels/1417/field/2/last.json"
    try:
        r = urequests.get(url)
        if r.status_code > 199 and r.status_code < 300:
            cheerlights = json.loads(r.content.decode('utf-8'))
            print(cheerlights['field2'])
            colour = int('0x'+cheerlights['field2'][1:7])#Convert from String to Integer
            r.close()
            return colour
        else:
            return None
    except Exception as e:
        print(e)
        return None

最後に、1分ごとにws2812が動作するようにループを使用します。

while True:
    colour = get_colour()
    if colour is not None:
        ws.write_all(colour)
    time.sleep(60)