The MagPi マガジン115号にあったLEDテープを音声認識で動作させるプロジェクトを試してみました。これは2年ほど前の88号で取り上げられたもので、115号では更に音声認識でオンオフする仕組みと、Raspberry Pi 4で紹介されています。
たまたま手持ちのLEDテープがあり、その他必要なブレッドボードやワイヤー類もありました。
ただ、音声認識が上手く行きませんでした。
仕方ないので、Pythonコードを修正して、タクトスイッチでオンオフすることにしました。ただのスイッチになってしまった。
LEDテープ以外にも細かなパーツは必要ですが、比較的に簡単な部類の電子工作です。Pythonのプログラムもそこまで難しくありませんでした。
The MagPi マガジン115号71ページに「Christmas lights」とあり、詳細はリンク先となっています。
必要な物
今回は紹介しているマガジン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個だけ光ります。
具体的に言うと、valueに入れていたGoogle Speech Recognitionをやめて、単にFlag判定でオンオフするように変更しました。
オフならLEDを消して、flagはオンに変更するシンプルな物です。
オフにするのは元からある記述の通りで、flag判定を反対にします。(0→1)
オンにするのも元の記述通り、merrychristmas()を実行した後、やはりflag判定を逆にします。
def merrychristmas()で定義されているLEDの光り方を、好みに記述を変えて楽しめます。
もしくは、同じようにdefで定義してあげて、複数の光り方を指定しても良いでしょう。
プログラム自体はキーボードの割り込み(Ctrl + C)で終了します。それまでずっとスイッチの入力を待つだけです。
本来は、スイッチを押して喋ると(「lights on」)認識してオンオフができるというものでした。どうも音声認識が機能しない。USBマイクでテストのコードではOKなんですけどね。
——もしかしてGPIOのピンを変えたらいいのか??

必要なソフトウェアやライブラリのインストール
音声認識は以下のライブラリや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もあればクリスマスツリーだけでなく、アイディアによってはそれなりに映えるかと思います。