Raspberry Pi – LED点滅

概要

SunFounderのDa Vinciキットを買ったので、まずLED点滅から勉強。実行の主要部分を強調するため一部簡略化した。流れは以下の通り。

  • LEDと保護抵抗を直列に繋ぎ、アノード側を電源ライン、カソード側をGPIO17に接続
    • GPIO17がHIGH (3.3V)のときは電源電圧とバランスしてLEDが消灯
    • GPIO17がLOW (0V)の時は電流が流れてLEDが点灯
  • MicoroPythonで、GPIO17のHIGH/LOWをタイマーでウェイトさせながら切替え

要点

  • GPIOを制御するライブラリーRPi.GPIOGPIOの名前でインポート
  • GPIO.setmode(GPIO.BCM)でBCMナンバリングモードに設定
  • GPIO.setup(ピン番号, GPIO.OUT, initial=GPIO.HIGH)でGPIO17を出力に設定し、初期レベルをHIGH (LED消灯)に設定
  • GPIO.output(ピン番号, GPIO.HIGH/LOW)で電圧レベルを切替え
  • キーボード割込みにtry~except KeyboardInterrupt~を利用
  • 終了時にGPIO.cleanup()でリソースを解放

回路図

LEDのアノード側に220Ωの抵抗を介して3V3 (3.3V)へ、カソード側はGPIO17に繋ぐ。DavinciのLEDの定格電流は不明だが20mAとすると、この回路の場合はi = 3.3/220で15mAで定格内に納まっている。

回路組み立て

ブレッドボードにGPIO拡張ボードを挿し、Raspiと接続。

テスト

コマンドライン

RaspiのThonnyを立ち上げ、コマンドラインで以下を実行していく。

まずライブラリーのインポート。

エラーが出ず無事にインポートされたので、次はGPIOのモードをBCMにセット。

LEDのピン番号をBCMの17にセット。

GPIO17を出力用にし、初期値をHIGH (3.3V)にセット。

GPIO17の電圧レベルをLOW (0V)にセットし、LEDの点灯を確認。

GPIO17の電圧レベルをHIGHにセットし、LEDの消灯を確認。

スクリプト

とりあえず以下のスクリプトでLEDの点滅を確認。

CTRL-Cでキーボード割込みがあったときに安全に終了するための処理を導入。

SunFounderサイトではsetup()以下をif __name__ == '__main__':ブロックの中に入れているが、これはこのファイルが直接実行されたことを確認するためのもの

接続を反対にする

左記の回路ではLEDのアノード側に3.3Vを供給し、カソードを接続したGPIO17でHIGHの時にLED消灯、LOWの時にLED点灯とした。

一方、以下のようにアノード側の抵抗をGPIO17に接続し、カソードをGNDに接続しても動作させることができる。この場合、GPIO17がHIGHでLED点灯、LOWでLED消灯となる。

コードは以下の通り。GPIO.setup()ではinitialのデフォルトがGPIO.LOWとして明示的に指定していない。

 

Raspberry Pi Pico~導入

概要

Raspberry Pi Picoを導入した記録。導入済みのRaspberry Pi 4Bに接続して、RaspbianのThonnyで動作確認。

購入したもの

Rasberry Pi Pico本体と接続用のUSBケーブル。

本体はプラスチック製のパッケージに入っていて、この上から透明フィルムでカバーされていた。フィルムがケースに貼り付けられているのが両側の耳の部分だけで間はペラペラと隙間が空いていたが、これくらいでも大丈夫なくらい頑丈ということか。

Picoの本体。右側がMicoroBのUSBソケットで、その左側に白いBOOTSELスイッチとLEDがある。

Thonnyの接続テスト

ファームウェアの準備

以下の手順でThonnyの接続環境を整えた。

  1. Raspberry Pi親機を起動しておく
  2. PicoのBOOTSELスイッチを押しながら、PicoとPi親機をUSBで接続
  3. Picoがリムーバブルディスクとして認識されるのでファイルマネージャーで開く
  4. /media/pi/RPI-RP2ディレクトリーが開き、INDEX.HTMとINDO_UF2.TXTの2つのファイルが入っている
  5. INDEX.HTMをダブルクリックしてRaspberry Pi Documentationのページを表示し、MicroPythonのファームウェアをダウンロード
  6. ダウンロードされた拡張子uf2のファイルをINDEX.HTMLと同じディレクトリーにコピー

Thonny接続テスト

  1. Thonny右下のPython表示をクリックしてMycroPython (Raspberry Pi Pico)に変更
  2. 以下のコードを書いてローカルに保存、実行
  3. 点灯を確認(左下の緑色LEDが点灯している)
  4. led.value(0)に変更して実行してLEDを消灯
  5. 以下のコードでLEDのON/OFF点滅を確認

Picoの自動実行

自動実行方法

Picoにmain.pyファイルが保存されていると、電源接続後にその内容を実行する。

Thonnyを使っている場合、親機で実行確認後に同じ内容のファイルをmain.pyとしてPicoに保存する。

自動実行内容の編集・削除

main.pyを持つPicoからこのファイルを削除したり、別の内容に書き換えたい場合には、ThonnyのメニューからRunStop/Restart backendを指定。

停止後にmain.pyを削除したり書き換えた後、再度Stop/Restart backendで動作を開始させる。

注意点

BOOTSELは初期化

  • BOOTSELを押しながらPicoを接続するとPicoの内容が初期化される
  • 初期化後に環境を構築すると、以後はBOOTSELを押さずに接続してその環境で実行できる
  • 逆に言えば、BOOTSELで接続すると前の環境は消えてしまう

ファームウェアを入れるとRPI-RP2は見えなくなる

  • BOOTSEL直後はPicoがリムーバブルディスクとして/media/pi/RPI-RP2で確認できる
  • ここでたとえばMicroPythonのファームウェアを入れると/media/piの中が空になり、RPI-RP2は見えなくなる

ThonnyでPico側のファイルを確認できる

  • ただしローカルで作成したPythonコードはPicoと接続しているThonnyによってPicoに転送されている
  • これを確認するには、ThonnyをReguler modeで起動し、表示(View)でファイル(Files)をチェックする

 

Raspberry Pi~導入

概要

Raspberry Piを導入した記録。

KSYショップでRaspberry Pi 4のスターターキットを購入。OSはSDHCカードにインストール済みだったので、接続するだけで起動。OS書き込みからでもよかったが、品薄が続く中で本体購入可能なこのキットを選択。

ついでにKVMスイッチを介して、WindowsマシンとRaspberry Piを切り替えられるようにした。

購入したキット

KSYのPi4 B 4GB スターター キット 6点セット V4で、以下の内容。

  • KSY Raspberry Pi 4 Model B 4GB
  • Piケース OKdo 3ピース for 4B 透明
  • USB電源アダプター 5V 3A Type C 1.5m
  • OS書込済み Apacer microSDHC 32GB CL10 UHS-I
  • HDMIケーブル HDMI(A)-micro(D)
  • ヒートシンク 40x30x6 熱伝テープ付 for Pi

開封後のパーツ。ケースにOKdoのロゴ。

包装から出したパーツ。本体には技適マークもプリントされている。説明書は通常の注意書きレベル。

組み立て

ヒートシンク

ヒートシンクの熱伝導シートを始めにCPUに貼り付けたが、この後両面テープのヒートシンク側をはがすのに苦労した。

ケース

OKdo製のこのケースは3つに分かれている。

まず下側のケースに、コネクター位置を合わせながら本体を取り付ける。

起動

ひとまずメインマシンのモニター、マウス、キーボードを外してRaspiに接続。ACアダプターを接続して暫くすると起動。

起動後のwelcomeダイアログ。この後、locale選択や画面余白の調整などの設定へ進む。

更新にはちょっと時間がかかり、以下のようなエラーが出たがそのまま進む。更新のバージョンがstableからoldstableに変更されたということらしい。

この後KVMスイッチに繋ぎ変えて、無事にメインマシンとの切替えに成功。

コンソールからlsb_releas -aコマンドで確認したところ、OSはRaspbian GNU/Linux (buster)となっていた。