VNC環境とRaspberry Piで簡単電子工作(2)
はじめに
前回は、Raspberry Piを使ってプログラミングを行うための準備と、簡単なプログラムによる動作テストを実施しました。今回からは、実際に電子工作を行いながらプログラミングを学んでいきます。
今回のシリーズでは、オブジェクト指向のプログラミング言語「Python」でGPIO Zeroのライブラリを使用します。より直観的にプログラムを捉えていくことで、より身近に、より楽しくプログラミングをしていくことを目指します。
今回(第2回)から第5回までの全体像は以下のようになります。
今回は、回路を1つ(回路1)作成し、主にLEDをデジタルで制御するデジタル入出力をテーマに解説します。
コンピューターはデジタル信号での制御を得意としています。今回は、デジタル信号(0と1)でLEDを制御して、単純なON/OFFから点滅、さらにはスイッチによるON/OFFを行ってみます。用意するもの
回路1を作るために、下記のパーツを準備します。
- Raspberry Pi 3B
- microSDカード(OSインストール済みのもの。第1回を参照)
- PC
- LED
- 押しスイッチ
- ブレッドボード
- ジャンパーワイヤ オス-メス
- 抵抗抵抗(330Ω×2:LED側/10kΩ:スイッチ側)
LEDのデジタル制御
VNC環境を立ち上げる
まず、第1回で構築したVNC環境を、以下の手順で立ち上げましょう。
- Raspberry PiにmicroSDカードを挿入し、LANをつないで電源を入れる
- PC上でTera Termを起動させ、ホスト名にIPアドレスを入力する
- 認証画面が表示されたらユーザー名:Pi、パスワード:raspberryを入力する
- ターミナルが表示されたら、以下のコマンドでVNCサーバを立ち上げる
$ tightvncserver
- UltraVNC Viewerを起動し、IPアドレスとポート番号を入力する。「connect」ボタンを押して第1回で設定した8文字以下のパスワードを入力する
シミュレーションをしてみよう
VNC環境が準備できたら、はじめにシミュレーションをしてみましょう。第1回でインストールした「fritzing」を起動して、以下のような配線図を作成します(fritzingのダウンロードとインストール、使い方については第1回を参照)。
電子工作をしてみよう
配線図が完成したら、いよいよ実際に電子工作をしていきます。配線図や下記の全体図を参考にやってみてください。なお、ここでの作業は第1回の内容と近いので、やりやすいと思います。
プログラミングをしてみよう①~LEDのON/OFF~
まず、nanoエディタを立ち上げます。
$ nano led1.py
nanoエディタ上で以下のプログラムを入力し、[Ctrl]+[X]で保存します。
from gpiozero import LED
led = LED(17)
while True:
led.on()
ターミナル画面に戻った後、以下のコマンドを入力するとLEDが光ります。
$ sudo python led1.py
プログラムを終了するときは、[Ctrl]+[C]を入力してください。この入力で、LEDが消えます。
Pythonには多くのライブラリが入っており、これらのライブラリを使うことで、よりシンプルにプログラムを書くことができます。
ライブラリを使用するには「from A import B」という形でプログラムを書きます。Aでライブラリを指定し、Bで取り込みたいモジュールやパッケージ、クラスを指定します。ここでは、GPIO ZeroのLEDというクラスを取り込んでいます。
そして、その下のプログラムでは、GPIO17をledというオブジェクトで扱うことを定義しています。
最後の行ではwhileというループ関数を使ってTrueである限り繰り返されるように定め、さらにonというメソッドでledのオブジェクトを制御しています。
プログラミングしてみよう②~LEDの点滅~
次に、LEDを点滅させてみましょう。これは第1回で動作テストとして実施したLチカと同じです。nanoエディタで「led2.py」というファイルを作成し、以下のプログラムを入力します。
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
このプログラムでは、LEDを点滅させるためにtimeというモジュールを取り込んでいます。sleepというメソッドで直前のプログラムの動作時間を定めています。
また、このプログラムは、以下のプログラムでも動作します。
from gpiozero import LED
from signal import pause
led = LED(17)
led.blink()
pause()
このプログラムでは、LEDのON/OFFのプログラムをblinkというメソッドで置き換えています。そのメソッドに、動作を保持するpauseのメソッドを組み合わせています。
プログラミングしてみよう③~スイッチによるLEDのON/OFF
次に、ボタンを押した時にLEDが光るようにプログラミングしてみます。nanoエディタで「led3.py」というファイルを作成し、以下のプログラムを入力しましょう。
from gpiozero import LED, Button
from signal import pause
led = LED(17)
button = Button(2)
button.when_pressed = led.on
button.when_released = led.off
pause()
このプログラムでは、LEDと同時にButtonというクラスを取り込んでいます。そして、Buttonの状態変化でLEDのON/OFFを制御するプログラムを実行し続けています。Buttonが押されている時はwhen_pressedメソッド、離した時はwhen_releasedメソッドになります。
実機をお持ちでない方のために、実際の動作を確認できる動画を用意しました。ぜひこちらを参考にイメージしていただければと思います。
おわりに
いかがでしたか? 電子工作を通じて、オブジェクト指向の特徴を感じていただけたのではないでしょうか。今回は、デジタル入出力ということで、LEDとスイッチを使って入出力を制御してみました。
次回は、PWM出力をテーマに、ブザーやモーター等をアナログで制御してみたいと思います。お楽しみに!
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- VNC環境とRaspberry Piで簡単電子工作(3)
- VNC環境とRaspberry Piで簡単電子工作(4)
- VNC環境とRaspberry Piで簡単電子工作(1)
- VNC環境とRaspberry Piで簡単電子工作(7)
- 123d CircuitsとArduino実機で電子工作(4)
- Arduinoを用意して簡単なプログラミングをはじめよう
- 電子工作シミュレータ「123d circuits」を使ってみよう!
- CNDT 2022、Raspberry PIを使ったマイクロクラスターにKubernetesを入れ可視化した実験を解説
- 電子工作はじめの一歩~テスター超入門(1)
- 玄人志向、Raspberry Pi 2を採用したIoT体験キット「「KURO-IOTEXP/KIT」を発売開始