2.7 RGB LEDストリップ

このプロジェクトでは、WS2812 LEDストリップを駆動する魅力的な世界に潜り込み、生き生きとした色彩のディスプレイを実現します。ストリップ上の各LEDを個別に制御する能力により、感覚を魅了する魅力的な照明効果を創り出すことができます。

さらに、ランダムな色を導入し、流れる光の効果を実装することで、魅力的で魅惑的な視覚体験を創出するという、このプロジェクトのエキサイティングな拡張についても探求します。

必要な部品

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

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

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

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

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ジャンパーワイヤ

BUY

WS2812 RGB 8 LED ストリップ

BUY

回路図

../../_images/circuit_2.7_ws2812.png

利用可能なピン

このプロジェクトのESP32ボードに利用可能なピンのリストです。

利用可能なピン

IO13, IO12, IO14, IO27, IO26, IO25, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

注釈

IO33は、このプロジェクトでは使用できません。

WS2812 LEDストリップは、正確なパルス幅変調(PWM)信号を必要とするタイプのLEDストリップです。PWM信号は時間と電圧の両方において厳密な要件を持っています。例えば、WS2812の「0」ビットは約0.4マイクロ秒のハイレベルパルスに相当し、「1」ビットは約0.8マイクロ秒のハイレベルパルスに相当します。これは、ストリップが高周波の電圧変化を受け取る必要があることを意味します。

しかし、IO33に4.7Kのプルアップ抵抗と100nfのプルダウンコンデンサを使用すると、単純なローパスフィルタが作成されます。このタイプの回路は、コンデンサが電圧変化を受けたときに充電と放電に時間がかかるため、高周波信号を「滑らかに」します。したがって、信号があまりにも迅速に変化する(つまり、高周波である)場合、コンデンサは追いつくことができません。これにより、出力信号がぼやけてストリップに認識できなくなります。

配線図

../../_images/2.7_rgb_strip_bb.png

コード

注釈

  • esp32-starter-kit-main\micropython\codes パスにある 2.7_rgb_strip.py ファイルを開くか、コードをThonnyにコピー&ペーストしてください。次に、「現在のスクリプトを実行」をクリックするか、F5キーを押して実行します。

  • 右下のコーナーで「MicroPython (ESP32).COMxx」インタープリタを選択してください。

from machine import Pin
from neopixel import NeoPixel

pin = Pin(14, Pin.OUT)   # set a pin to output to drive NeoPixels
pixels = NeoPixel(pin, 8)   # create NeoPixel driver on pin for 8 pixels

pixels[0] = [64,154,227]    # set the pixel
pixels[1] = [128,0,128]
pixels[2] = [50,150,50]
pixels[3] = [255,30,30]
pixels[4] = [0,128,255]
pixels[5] = [99,199,0]
pixels[6] = [128,128,128]
pixels[7] = [255,100,0]

pixels.write()              # write data to all pixels

RGB LEDストリップに好きな色を選んで表示しましょう!

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

  1. neopixel モジュール内で、関連する関数を NeoPixel クラスに統合しました。

    from neopixel import NeoPixel
    
  2. neopixel モジュールの NeoPixel クラスを使用して、データピンとLEDの数を指定して pixels オブジェクトを初期化します。

    pixels = NeoPixel(pin, 8)   # create NeoPixel driver on pin for 8 pixels
    
  3. 各LEDの色を設定し、 write() メソッドを使用してデータをWS2812 LEDに送信し、表示を更新します。

    pixels[0] = [64,154,227]    # set the pixel
    pixels[1] = [128,0,128]
    pixels[2] = [50,150,50]
    pixels[3] = [255,30,30]
    pixels[4] = [0,128,255]
    pixels[5] = [99,199,0]
    pixels[6] = [128,128,128]
    pixels[7] = [255,100,0]
    
    pixels.write()              # write data to all pixels
    

もっと学ぶ

色をランダムに生成して、カラフルな流れる光を作ることができます。

注釈

  • esp32-starter-kit-main\micropython\codes パスにある 2.7_rgb_strip_random.py ファイルを開くか、コードをThonnyにコピー&ペーストしてください。次に、「現在のスクリプトを実行」をクリックするか、F5キーを押して実行します。

  • 右下のコーナーで「MicroPython (ESP32).COMxx」インタープリタを選択してください。

from machine import Pin
import neopixel
import time
import random

# Set the number of pixels for the running light
num_pixels = 8

# Set the data pin for the RGB LED strip
data_pin = Pin(14, Pin.OUT)

# Initialize the RGB LED strip object
pixels = neopixel.NeoPixel(data_pin, num_pixels)

# Continuously loop the running light
while True:
    for i in range(num_pixels):
        # Generate a random color for the current pixel
        color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

        # Turn on the current pixel with the random color
        pixels[i] = color

        # Update the RGB LED strip display
        pixels.write()

        # Turn off the current pixel
        pixels[i] = (0, 0, 0)

        # Wait for a period of time to control the speed of the running light
        time.sleep_ms(100)
  • while ループの中で、 for ループを使用してRGB LEDストリップの各ピクセルを順番に点灯させます。

  • 最初に random.randint() 関数を使用して現在のピクセルのためのランダムな色を生成します。

  • 次に、ランダムな色で現在のピクセルを点灯させ、 NeoPixel オブジェクトの write() メソッドを使用して色データをRGB LEDストリップに送信し、表示を更新します。

  • 最後に、色を (0, 0, 0) に設定して現在のピクセルを消し、走る光の速度を制御するために一定時間待機します。