はじめに

前回は、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出力をテーマに、ブザーやモーター等をアナログで制御してみたいと思います。お楽しみに!

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30