以前の記事「【 第8回 】LEDの輝度をフェードアウトさせて、”Lチカ蛍”を本物の蛍に!」ではScratch 1.4を使って”Lチカ蛍”を実行しましたが、制御ライブラリGpiozeroの関数PWMLEDを使えばもっと簡単に”Lチカ蛍”が実現できそうなので試してみました。
今回使った部品
- Raspberry Pi 3 Model B × 1
- 40Pinフラットリボンケーブル
- 40Pin T型GPIO拡張ボード
- ブレットボード × 1
- LED × 1
- 抵抗 220Ω × 1
- ジャンプワイヤー(オス/オス) × 2
実体配線図
Lチカ蛍のプログラム作成
タスクバー左端のメニューアイコンから「プログラミング」→「Code – OSS」をクリックしてVisual Studio Codeを起動します。
サイドバーのフォルダ”PYTHON”の右にあるアイコン「新しいファイル」をクリックします。
サイドバーに入力欄が現れるので、プログラム名を入力します。
エディター画面で”f”を入力ると、”f”で始まる入力候補の一覧が現れるので”from”を選択します。
半角スペースを空けて”g”を入力ると、”g”で始まる入力候補の一覧が現れるので”gpiozero”を選択します。
半角スペースを空けて”i”を入力ると、”i”で始まる入力候補の一覧が現れるので”import”を選択します。
半角スペースを空けて”pw”を入力ると、”p”と”w”を含む入力候補の一覧が現れるので”PWMLED”を選択します。これで制御ライブラリGpiozeroの関数”PWMLED”をインポートします。
「Enter」キーで改行して”f”を入力ると、”f”で始まる入力候補の一覧が現れるので”from”を選択します。
半角スペースを空けて”si”を入力ると、”s”と”i”を含む入力候補の一覧が現れるので”signal”を選択します。
半角スペースを空けて”i”を入力ると、”i”で始まる入力候補の一覧が現れるので”import”を選択します。
半角スペースを空けて”p”を入力ると、”p”で始まる入力候補の一覧が現れるので”pause”を選択します。これで制御ライブラリsignalの関数”pause”をインポートします。
VSCodeが気を利かせて”pause”の後に”()”まで入力してくれますが、ここでは不要なので削除しておきます。
2回改行して”led = p”と入力すると、”p”で始まる入力候補の一覧が現れるので”PWMLED”を選択します。
VSCodeが気を利かせて”PWMLED”の後に”()”とその使い方についての情報も表示されます。
ここでは、”()”内にLEDを制御するGPIOピンの番号”17″を入力します。この行は、変数”led”をRaspberry PiのGPIO17ピンから出力する値(電圧)に当て嵌めることを記述しています。
2回改行して”led.”と入力すると、この後に続く入力候補の一覧が現れるので”pulse”を選択します。
”pulse”の後に”()”も入力されるので、ここではこのまま残しますが、今回は”()”内には何も入力しません。何も入力しない場合は、2秒間のフェードイン/フェードアウトを連続して繰り返します。
2回改行して”p”と入力すると、この後に続く入力候補の一覧が現れるので”pause”を選択します。
”pause”の後に”()”も入力されるので、ここではこのまま残しますが、”()”内には何も入力しません。この行では、「何か新しいsignalを受けるまではこのままの状態を保つ」ことを記述しています。
行末にスペースを入れずに改行しておきます。
Lチカ蛍のプログラムの実行
エディター画面の何もないところで右クリックして出てくるメニューから「ターミナルで Python ファイルを実行」を選択します。
画面右下にターミナル画面が開き、プログラムが実行されます。LEDは1秒掛けてフェードインし、又1秒掛けてフェードアウトの繰り返しで明滅しました。
「Ctrl」と「C」キーを同時に押すと、ターミナル画面でプロンプトが返り、LEDが消灯します。
メニューバーから「ファイル」→「保存」をクリックして保存します。
念の為、このコマンドでGPIOの設定状況を確認します。
プログラム実行中にキーボードで強制終了したのですが、GPIO17の設定は既定の”IN”に戻っていました。終了処理が不要なのはライブラリGpiozeroのメリットのひとつです。
gpio readall
Lチカ蛍のプログラム
以前の記事で実行したScratch 1.4のプロジェクトと比べて遥かにシンプルなプログラムでLチカ蛍が実現できました。
from gpiozero import PWMLED from signal import pause led = PWMLED(17) led.pulse() pause()