Raspberry Pi 3 pigpioとasync,awaitを使ってLウェーブ

スポンサーリンク

※10/21 Lwave.pyを一部変更。Ctrl+Cで停止した時にLEDがすべて消えるように変更。

やりたいこと

今までpigpioを使ってLピカ→Lチカと試してきました。

今回はさらに上?を目指してLウェーブを実施したいと思います。

LウェーブとはLEDがウェーブをしているように光らせることです。

Lウェーブなんて言葉は電子工作界隈ではたぶんないです。私が勝手に言ってるだけですw

※投稿日現在で検索しても出て来なかったのでたぶんないと思います。

中身はasync,awaitを使用した非同期処理をしてみたいだけです。

使用部材

「Raspberry Pi 3 pigpioを使ってLチカ」と同様ですのでこちらを参照ください。

使用部材の計算について

上記と同様ですので割愛します。

構成図

こちらも上記リンクと同様です。

各場所のGPIOピンとの対応は以下のとおりです。

左上:GPIO(4ピン)

右上:GPIO(17ピン)

右下:GPIO(21ピン)

左下:GPIO(26ピン)

回路図

こちらも同様です。

pythonのプログラム

左上(4)→右上(17)→右下(21)→左下(26)の順番にCtrl+Cで停止するまで永遠に光続けます。

PWMを使用しているのでぼわ~んと光るのはPWMのLチカと同じです。

違うのは4つのLEDが同時に光を変化させているところです。

これはpython3のasync,awaitを使用しています。

参考にさせていただいたのはこちらのサイト様です。

まずpython3のバージョンを確認します。今まで「python」コマンドで実施していたのはpython2で今回はpython3.5以上を使用します。こちらのコマンドで確認できます。

$ python3 -V
Python 3.5.3

ちなみにpython -Vでpython2のバージョンも調べられます。Vは大文字です。

今までのプログラムはこちらで動かしていました。

$ python -V
Python 2.7.13

実際のpythonのプログラムがこちらです。

※今回も実行前に$ sudo pigpiodは打ちません。自動起動済みです。

※10/21 Lwave.pyを一部変更。Ctrl+Cで停止した時にLEDがすべて消えるように変更しました。

私なりにこのプログラムを必死に解説すると
async defでlightingをコルーチン(関数)として定義しています。
asyncio.ensure_futureでlightingを実行します。
lighting内にある「await asyncio.sleep(t)」でコンテキストスイッチして次のlightingのコルーチンに処理を移行しています。これを繰り返すことで各LEDが少しずつ明るさを変えていきます。

実行方法はこちらです。

$ python3 Lwave.py

実行結果

実際の光る映像がこちらです。


これまでのLEDが順番に光るのではなく1つのLEDが消える前から次のLEDが光っているのがわかります。まるでウェーブのようです。

すいません。。ウェーブに見えないですね。。

もっとLED増やして本当にウェーブみたいに見れれば良いんですけどね。
1枚のブレッドボードだとこれくらいが限界ですかね。
いつかもっとLED増やしてやってみたいです!

最後に

とりあえず今回でLEDで遊ぶのは卒業しようと思います。

他にやりたいこともあるので!

でもいつかブレッドボードではなく半田付けしてLEDもっと増やしてウェーブさせたいです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする