VNC環境とRaspberry Piで簡単電子工作(2)

2017年5月24日(水)
青柳 良介福田 紘也

はじめに

前回は、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環境を、以下の手順で立ち上げましょう。

  1. Raspberry PiにmicroSDカードを挿入し、LANをつないで電源を入れる
  2. PC上でTera Termを起動させ、ホスト名にIPアドレスを入力する
  3. 認証画面が表示されたらユーザー名:Pi、パスワード:raspberryを入力する
  4. ターミナルが表示されたら、以下のコマンドでVNCサーバを立ち上げる
    $ tightvncserver
  5. 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出力をテーマに、ブザーやモーター等をアナログで制御してみたいと思います。お楽しみに!

Blooomin代表。半導体ベンチャーや米系通信機器メーカーを経て、組み込みシステムのコンサルディングからフィジカル・コンピューティングのコンテンツ開発などに従事。ハードやソフトにおける設計から保守までの勘所を横断的に網羅しております。
Blooomin:https://blooomin.com
S&F PARTNERS副社長。素材メーカーを経てコンサルティング会社で事業開発に従事。その後、ベンチャーにてIoTサービスの企画・運営。現在はロボットプログラミング教室の運営やIoTサービスの企画・開発を展開。S&F PARTNERS:http://www.sf-partners.jp/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています