注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
1.9 NeoPixel LEDストリップ
はじめに
このプロジェクトでは、Raspberry Pi の SPI 通信を使用して、アドレサブル RGB LED ストリップ(NeoPixel)を制御する方法を学びます。NeoPixel は各 LED にドライバを内蔵した高機能な RGB LED で、チェーン接続された各 LED を個別に制御できます。このプロジェクトでは、基本的な色制御と、LED ストリップ全体をさまざまな色で点灯させる方法を紹介します。
必要なもの
このプロジェクトを完了するには、以下のコンポーネントが必要です。
COMPONENT |
PURCHASE LINK |
|---|---|
- |
|
- |
|
Raspberry Pi |
- |
配線図
セットアップ手順
コードを実行する前に、必要なライブラリをインストールする必要があります。
このライブラリは、SPI 通信を使用して NeoPixel LED を制御するために必要な機能を提供します。
sudo pip3 install adafruit-circuitpython-neopixel-spi --break
このチュートリアルで使用するすべてのサンプルコードは、
ai-lab-kitディレクトリに含まれています。以下の手順に従ってサンプルを実行してください。cd ~/ai-lab-kit/python/ sudo python3 1.9_NeoPixel.py
このスクリプトを実行すると、WS2812 LED モジュールは 3 色の単色表示を順番に繰り返します。
すべての LED が 赤 で 1 秒間点灯します
すべての LED が 緑 で 1 秒間点灯します
すべての LED が 青 で 1 秒間点灯します
各色を表示した後、LED は短時間 消灯 してから、再び同じサイクルを繰り返します。 動作中は、現在の色名がターミナルに表示されます。
コード
以下の Python コードは、NeoPixel LED ストリップを制御し、さまざまな色を順番に表示します。
import time # Used for delays
import board # Provides board-specific pin definitions
import neopixel_spi as neopixel # NeoPixel SPI driver
# Create an SPI object using the default SPI bus of the board
spi = board.SPI()
LED_COUNT = 12 # Number of LED pixels in the strip
PIXEL_ORDER = neopixel.GRB # Color order used by the LEDs (Green, Red, Blue)
# Create a NeoPixel strip object over SPI
# auto_write=False means we must call strip.show() to update the LEDs
strip = neopixel.NeoPixel_SPI(spi, LED_COUNT, pixel_order=PIXEL_ORDER, auto_write=False)
time.sleep(0.01) # Short delay to ensure the strip is ready
strip.fill(0) # Turn all pixels off (color value 0 = off)
strip.show() # Send the data to the LED strip
try:
while True:
print("RGB test")
# Display red on all LEDs
print("Red")
strip.fill((255, 0, 0)) # Full red, no green, no blue
strip.show()
time.sleep(1)
# Display green on all LEDs
print("Green")
strip.fill((0, 255, 0)) # Full green
strip.show()
time.sleep(1)
# Display blue on all LEDs
print("Blue")
strip.fill((0, 0, 255)) # Full blue
strip.show()
time.sleep(1)
# Turn all LEDs off
# print("Off for 10 seconds")
strip.fill((0, 0, 0)) # All channels 0 = off
strip.show()
time.sleep(1)
# Gracefully handle script termination (e.g., via KeyboardInterrupt)
except KeyboardInterrupt:
pass
この Python スクリプトは、NeoPixel SPI ドライバを使用して、12 個の LED を備えた WS2812 リングの基本制御を行う例です。実行すると、次のように動作します。
スクリプトは SPI インターフェースを初期化し、WS2812 LED リングを使用できる状態にします。
すべての LED は、1 秒間隔で赤、緑、青の順に点灯します。
色が切り替わるたびに、その色名がデバッグ用としてコンソールに表示されます。
各サイクルの間に、LED は短時間消灯します。
プログラムは
Ctrl+Cで中断されるまで継続して実行されます。
コードの解説
ライブラリのインポート
このスクリプトでは、
neopixel_spiライブラリを使用して、Raspberry Pi の SPI インターフェース経由で WS2812 LED を制御します。import time import board import neopixel_spi as neopixel
SPI と NeoPixel の設定
SPI バスを初期化し、12 個の LED と必要な色順序(GRB)で NeoPixel リングを設定します。
spi = board.SPI() LED_COUNT = 12 PIXEL_ORDER = neopixel.GRB strip = neopixel.NeoPixel_SPI( spi, LED_COUNT, pixel_order=PIXEL_ORDER, auto_write=False )
LED の初期化
短い待機時間を入れて LED の準備が整ったことを確認したあと、すべてのピクセルを消灯します。
time.sleep(0.01) strip.fill(0) strip.show()
メインの色切り替えループ
無限ループの中で、LED リング全体を赤、緑、青の単色で順番に点灯させます。各色は 1 秒間表示されます。
while True: strip.fill((255, 0, 0)) # Red strip.show() time.sleep(1) # Similar code for green and blue...
5. 色の形式
色は
(red, green, blue)の RGB タプルで定義し、各値は 0〜255 の範囲で指定します。strip.fill((0, 255, 0)) # Example: green
トラブルシューティング
LED リングが正しく点灯しない
原因: 配線ミス、または電源不足
解決方法: VCC が 5V であること、GND が共通であること、そしてデータ線が DIN(場合によっては RGB と表記)に接続されていることを確認してください。
色が正しく表示されない
原因: LED の色順序が一致していない
解決方法:
neopixel.RGBやneopixel.GRBWなど、別の pixel order を試してください。
SPI が動作しない
原因: SPI が無効になっている、またはハードウェア競合が発生している
解決方法:
sudo raspi-configを使用して SPI を有効にしてください。
ライブラリのインポートに失敗する
原因: 依存ライブラリが不足している
解決方法:
sudo pip3 install adafruit-circuitpython-neopixel-spi --break
発展アイデア
特定の LED を異なる色で点灯させることで、簡単なパターンを作成したり、リング上の特定の位置を強調したりできます。
strip[0] = (255, 0, 0) strip.show()
計算された RGB 値を順番に変化させることで、すべての LED に滑らかなレインボー遷移を作り出せます。
strip.fill(wheel(50)) strip.show()
1 つずつ LED を点灯させ、ほかを消灯したままにすることで、追いかけるようなアニメーション効果を作ることができます。
strip[i] = (0, 255, 0) strip.show()
brightness属性を調整することで、LED リング全体の明るさを下げたり上げたりできます。strip.brightness = 0.3
まとめ
このサンプルでは、Raspberry Pi の SPI を使用して WS2812 の 12-LED リングを制御する方法を紹介しました。わずかなコードで色の切り替え、アニメーションの作成、各 LED の個別制御を実現できます。そのため、WS2812 リングはインジケーターライト、ロボティクス、装飾演出、インタラクティブなビジュアルプロジェクトに最適です。