Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
The MagPi マガジン115号にあったLEDテープを音声認識で動作させるプロジェクトを試してみました。これは2年ほど前の88号で取り上げられたもので、115号では更に音声認識でオンオフする仕組みと、Raspberry Pi 4で紹介されています。
たまたま手持ちのLEDテープがあり、その他必要なブレッドボードやワイヤー類もありました。
ただ、音声認識が上手く行きませんでした。
仕方ないので、Pythonコードを修正して、タクトスイッチでオンオフすることにしました。ただのスイッチになってしまった。
LEDテープ以外にも細かなパーツは必要ですが、比較的に簡単な部類の電子工作です。Pythonのプログラムもそこまで難しくありませんでした。
The MagPi マガジン115号71ページに「Christmas lights」とあり、詳細はリンク先となっています。
Make your own smart Christmas tree lights — Raspberry Pi Official Magazine
必要な物
今回は紹介しているマガジン115号の通り、Raspberry Pi 4で試しました。他のモデルでも良いと思います。
サーキット(回路)を作る関係で、ブレッドボードを始め、電子工作できる部材がないと厳しいです。
特に5Vの電圧でLEDへ単独で送る外部電源が必要となっています。単三電池4本のケースにプラスマイナスのコードが出ているユニットが手元にありました。

電池ボックスの電源
Raspberry Pi のGPIO端子にある5Vを使うより安定するということだと思います。
LEDテープもws281xに対応したneopixelが必要です。手持ちに1m144個の物しかありませんでした。144では多すぎると書いてありました。
一応チラつくけど144個も点灯できましたよ。プログラム内で30個しか光らせないこともできるので、別に30個の製品ではなくても5V対応ならOKです。ただ、LEDテープの長さは1mの物が良いでしょう。5V電圧で光る物が必要です。
細かい点では、ジャンパーワイヤーが数本必要なのと、抵抗(220Ω)が1つ要ります。

ジャンパワイヤー
私は電子工作用がまとめて入っているツールから使いました。(OSOYOO Raspberry Pi 学ぶ電子工作キット)
まとめるとこうなります。
- Raspberry Pi 4B(他のモデルでも可)
- LEDテープ(NeoPixel/WS2812/SK6812 互換)1m30/60/144LED等
- ブレッドボード
- ジャンパーワイヤー(オス-メス3本、オス-オス2本)
- タクトスイッチ×1
- 220Ω抵抗×1
- 5V電源(使ったのは単三電池4本ケース)
- USBマイク(音声認識するなら)
音声認識しないなら、マイクも要りませんし、スイッチを使わないならタクトスイッチも抵抗も要りません。電気系は詳しくありませんから明確にはお伝えできませんが、ブレッドボートに外部電源を用いたので確かに安定しています。
LEDテープはWS2812、144連、5Vのラインナップは豊富に選べます。
回路図
タクトスイッチ含め、ブレッドボードへ配線した図です。

実際はこんな感じ。

smartlights.pyの変更
参考までに修正したPythonコードを晒しておきます。元々あった音声認識に関する記述を削除して、スイッチのオンオフでLEDがオンオフするように修正しただけです。
LEDカウントは60個にしてあります。144個のテープでも60個だけ光ります。
音声認識しないsmartlights.pyのコード
import time
from gpiozero import Button
import board
import neopixel
button = Button(21)
# LED strip configuration:
LED_COUNT = 60 # Number of LED pixels.
LED_PIN = board.D18 # GPIO pin
LED_BRIGHTNESS = 0.2 # LED brightness
LED_ORDER = neopixel.GRB # order of LED colours. May also be GRB, GRBW, or RGBW
# Create NeoPixel object with appropriate configuration.
strip = neopixel.NeoPixel(LED_PIN, LED_COUNT, brightness = LED_BRIGHTNESS, aut>
# Setting variables for a specific sequence
red = (255,0,0)
green = (0,255,0)
flip = 0
#flag追加
flag = 0
# Function to make an alternating series of lights
def merrychristmas():
global flip
for i in range(90):
if flip == 0:
strip[i] = red
flip = 1
else:
strip[i] = green
flip = 0
strip.show()
merrychristmas()
while True:
button.wait_for_press()
button.wait_for_release()
# ここから変更(音声認識なし)
value = flag
if value == 0:
strip.fill((0,0,0))
strip.show()
print("消しました")
flag = 1
if value == 1:
merrychristmas()
print("点けました")
flag = 0
具体的に言うと、valueに入れていたGoogle Speech Recognitionをやめて、単にFlag判定でオンオフするように変更しました。
オフならLEDを消して、flagはオンに変更するシンプルな物です。
オフにするのは元からある記述の通りで、flag判定を反対にします。(0→1) オンにするのも元の記述通り、merrychristmas()を実行した後、やはりflag判定を逆にします。
def merrychristmas()で定義されているLEDの光り方を、好みに記述を変えて楽しめます。 もしくは、同じようにdefで定義してあげて、複数の光り方を指定しても良いでしょう。
プログラム自体はキーボードの割り込み(Ctrl + C)で終了します。それまでずっとスイッチの入力を待つだけです。
本来は、スイッチを押して喋ると(「lights on」)認識してオンオフができるというものでした。どうも音声認識が機能しない。USBマイクでテストのコードではOKなんですけどね。
——もしかしてGPIOのピンを変えたらいいのか? 今回は音声認識を断念・・・。

■Pi 5は8GBモデルがオススメ
必要なソフトウェアやライブラリのインストール
音声認識は以下のライブラリやpyaudioなどを順番にインストールします。
sudo apt update
sudo pip3 install SpeechRecognition
sudo pip3 install pyaudio && sudo apt install flac
sudo apt-get install portaudio19-dev python-all-dev python3-all-dev && sudo pip3 install pyaudio
python3 -m speech_recognition
最後の箇所でUSBマイクを繋いであれば、録音のテストができます。入力の音量が30くらいか無かったので、なかなか取得されませんでした。これを80などに上げるのに、alsamixerを使うと簡単です。(コマンドでalsamixer)

その後、以下のLEDであるneopixelを制御するツールをインストールして終わりです。音声認識を使わないなら、以下だけでOKです。
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
サンプルプログラムはgitでクローンして、中にあるneopixel_rpi_simpletest.pyでLEDの点灯テストができます。
git clone https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
元になったプログラムは、MagPiマガジンにあったsmartlights.pyを使います。このファイルを修正しました。
git clone https://github.com/themagpimag/magpi-issue88
Pythonプログラムの自動実行
再起動後に、Pythonを実行させて、常に待機するよう/etc/profileに登録します。これでRaspberry Piの電源を入れるだけでボタン操作待ちとなります。(最初は点灯)
sudo nano /etc/profile
sudo python3 /home/pi/smartlights.py &&
自動実行は5種類くらい方法があります。ケースバイケースなのですが、今回は自前のプログラムである.pyを起動するだけなので、これでOKです。
音声認識の部分
プログラムコードの変更は動作確認しただけです。間違っていたらスミマセン。
どうも音声認識はマイクではなく、alsaのエラーもあって上手く出来ませんでした。マイク入力に関してはちょっと調べ方が足りないかも知れません。
MagPiマガジンと同じようにできると思います。(出来たらまた追記しておきます)
比較的に安価な部品で出来る割に、1mもあればクリスマスツリーだけでなく、アイディアによってはそれなりに映える気がします。
直接繋ぐ場合
Raspberry PiのGPIOと直接繋ぐのに分かりやすい動画がありました。
DC5Vで別電源も繋げれば長いLEDテープも制御可能です。
先ずは30個程度から試してみるのが費用も掛からず良いでしょう。
WS2812B系ならドライバも対応していてRaspberry Pi をコントローラーにできますね。お試しあれー。
今回使ったLEDテープはこちら
Pi 5で使うライブラリ
Raspberry Pi 5のSPIインターフェイスに接続したNeoPixel LEDストリップにコマンドを送信できるPythonライブラリを見つけました。
WS281x系に対応しているので、Pi 5でこれまでのライブラリが動作しない場合に試してみたいですね。
Raspberry Pi 5 の SPI インターフェースを介して NeoPixel LED ストリップを制御する Python ライブラリ Pi5Neo をリリースしました。わずか数行のコードで、レインボー サイクル、ローディング バーなどの素晴らしい照明効果を作成できます…
PyPI

Pi5Neo A NeoPixel LED control library for Raspberry Pi 5 using SPI




