Pythonという動物・・・いや言語を使って、LEDを制御する
前回は、コマンドからGPIOを制御しましたが、「一々面倒じゃん!自動でなんとかせーよ!」という事で、Python(ぱいそん)というプログラム言語を使って制御します。
Pythonって何?
Python(パイソン)とは、1991年に公開された、シンプルで読みやすい文法が特徴のオープンソースのプログラミング言語です。
初心者にとって学びやすい一方で、Google、Meta、Netflixといった世界的なテクノロジー企業でも主要な言語として採用されている非常に強力な言語です。
🚀 Pythonの主な3つの特徴
- コードがシンプル:無駄な記述が少なく、誰が書いても同じような読みやすいコードになります。
- ライブラリが豊富:便利なプログラムの部品(ライブラリ)が大量にあるため、複雑な機能も短時間で実装できます。
- 世界的な人気:世界中のプログラミング言語ランキングで常に1位を争うほどの高い需要と人気があります。 [1, 2, 3]
🛠️ Pythonで「できること」
汎用性が高く、以下のような幅広い分野で活用されています。
- AI(人工知能)・機械学習の開発:ChatGPTをはじめとするAIモデルの構築や研究で最も使われています。
- データ分析・グラフ化:大量のデータを集計し、ビジネスや科学の研究に役立てます。
- 業務の自動化・効率化:Excelへのデータ入力、Webサイトからの自動情報収集(スクレイピング)が可能です。
- Webアプリケーション開発:YouTubeやInstagramなど、私たちが日常的に使う大規模なWebサービスの裏側を支えています。
豆知識はこの位にしておいて、実作業開始
LED (+)(-)どっちでもいけど、抵抗Ω300Ω付けて。できたら、LED(+)をGPIO17に接続、LED(-)はGNDに接続。どこか解らない場合はコマンドに【pinout】と打つべし!
Pythonスクリプトを書く
(「スクリプト」とは、複雑な変換作業(コンパイル)を必要とせず、人間が書いた命令文をそのままコンピュータに読み込ませて即座に実行できる簡易的なプログラムのこと)
はい、これをどうやってコマンドから書くの?ですが。以下の通りです。
$ sudo mkdir scripts
[sudo] password for pi:
$ ls
scripts
$ cd scripts
~/scripts $
~/scripts $ sudo nano LED_ONOFF.py
上の解説をすると、
最初に「sudo mkdir scripts」scriptsっていうフォルダ作って!って指示。Windowsだと「新規作成」-「フォルダ」みたいな感じ。
続いて今のユーザーパスワード入れて!って出てくる。面倒だよね。でも打つ。打ってもなんも出てこないけど大丈夫。間違えたら、何度も「[sudo] password for pi:」って出てくるから。
続いて「ls」リスト見せての命令ls=Listだろうね。
んで「cd scripts」sxriptsに移動してって命令。
そうしたら~/scripts $ってなる。
ここのフォルダに「sudo nano LED_ONOFF.py」って書いた。
次に最初に「sudo」って入れるけど、これは、一般ユーザーが管理者(root)権限など「他のユーザーの権限」を使ってコマンドを実行するためのコマンドなんです。
続いて「nano」ってのが、なんか書く奴ですね。初めて「nano」
を使うと「[sudo] password for pi:」が出てくるかもしれない。
そして、「nano」の後に続くのが、「データの名前」です。まあ、名前は何でもいいけど最後に「.py」を付けないといけない。
要は拡張子。
これで「このファイル何なの?何で動かせるの?」って聞かれなくて済む。Windowsにもファイルに拡張子は必ず付いてます。
では、なぜ sudo を使うのか?
- 安全性の向上:常に管理者(root)権限でログインし続けていると、誤操作でシステムを破壊する危険性が高まります。普段は一般ユーザーを使い、必要な時だけ sudo を通すことでリスクを減らします。
- 履歴の記録:誰が、いつ、どのコマンドを実行したかがログに残るため、セキュリティの監査やトラブルシューティングに役立ちます。
from gpiozero import LED
from time import sleep
# GPIO17番ピンにLEDを接続した場合。違うピンだったら、そのピン番号を記載(17)→(12)とか。知らんけど
led = LED(17)
while True:
led.on() # LEDを点灯
sleep(1) # 1秒待機 これを0.5とかにしたりして変えると面白いからやってみて。
led.off() # LEDを消灯
sleep(1) # 1秒待機 これを0.1とかにしたりして変えると面白いからやってみて。
コピペでも手打ちしてもいいけど、兎に角、記載したら、ctrl+o押して保存。そしてctrl+Xで閉じるです。これで元の画面に戻る。そうしたら、下記のコマンドを打つ!べし!
~/scripts $ sudo python LED_ONOFF.py
これでLEDが点滅し始めますよね。しない場合は大体配線ミス。良く見てみてください。私もよく間違える・・・
*このスクリプト(プログラム)を止めるにはキーボードでctrl+Cです。そうしないとコマンド打てなくなる。これ面倒だよね。でも、やらないと何もできなくなる。
さて、超定番な奴。通称「Lチカ」ですわ。これを説明すると
- 光る ➔ 1秒待つ
- 消える ➔ 1秒待つ
- (最初に戻る) 光る ➔ 1秒待つ…
これを人間が止めない限り、ラズパイは健気にずーーーっとやり続けます。これが「Lチカ(LED点滅)」です!
更に猿でも解るようにする解説
(スクリプト編)
① 道具を準備するパート
from gpiozero import LED
from time import sleep
- 解説: 「今からLEDを動かす道具と、時間を止めて待つ(sleep)道具を使うから、引き出しから出しといて!」という準備の合図です。まあ、引き出しに無かったらアカンけどね。
② ピンを指定するパート
led = LED(17)
- 解説: 「17番のピンにLEDを繋いだから、これからはこのピンのことをプログラムの中で『led』って呼ぶね!」という名前付けです。
③ ずっと繰り返すパート
while True:
- 解説: 「ここから下の命令は、ラズパイの電源を切るまでずーーーっと無限に繰り返してね!」という、無限ループの始まりの合図です。
④ チカチカ点滅するパート(ここを繰り返す)
led.on() # LEDを点灯
- 解説: 「17番ピンの電気をONにして、LEDを光らせろ!」
sleep(1) # 1秒待機
- 解説: 「そのままの状態で、1秒間じっと待て!」(これで1秒間光り続けます)
led.off() # LEDを消灯
- 解説: 「17番ピンの電気をOFFにして、LEDを消せ!」
sleep(1) # 1秒待機
- 解説: 「消したままで、また1秒間じっと待て!」
Q1.Python等のスクリプトで最初に「from gpiozero import LED」、「from time import sleep」とか入れますが、これが無かったらどうなる?ない場合の対処方法は?
これらの記述がない場合、プログラムはエラーを出して動かなくなります。
これは、Pythonに「これから使う便利な道具(LEDやsleep)がどこにあるか」を伝えるための指示書だからです。
1. 無かったらどうなる?
プログラムを実行した瞬間に、以下のようなエラー(NameError)が発生して強制終了します。
NameError: name 'LED' is not defined
- 原因:Pythonが「
LEDって何?そんな道具は知らないよ」と混乱してしまうためです。
2. ない場合の対処方法(2つのパターン)
状況によって対処方法が異なります。
パターンA:コード内に記述を「書き忘れた」だけの場合
ファイルの最上部に、元のコード(インポート文)を正しく書き足してください。
from gpiozero import LED
from time import sleep
# これで下のコードが動くようになります
led = LED(17)
sleep(1)
パターンB:道具箱(ライブラリ)自体がパソコンに入っていない場合
コードを書いても ModuleNotFoundError: No module named 'gpiozero' というエラーが出る場合は、Raspberry Piなどの端末(ターミナル)で、以下のコマンドを実行してライブラリをインストールする必要があります。
bash
pip install gpiozero
(※ time はPythonに最初から入っているため、インストールは不要です)
💡 補足:別の書き方で対処する(代替案)
from ... import ... を使わずに、以下のように「モジュール名」をそのままインポートして、使うときにドット . で繋いで呼び出す方法もあります。
import gpiozero
import time
# どこから持ってきた道具かを毎回指定する書き方
led = gpiozero.LED(17)
time.sleep(1)
Q2.このgpiozeroとかTimeの事をライブラリーって呼ぶのですか?
はい、これらはすべて「ライブラリ」(または「モジュール」)と呼びます。
Pythonでは、このように「特定の機能(LEDの操作、時間の制御など)をまとめた道具箱」のことをライブラリと呼んでいます。
正確な呼び分け(仕組みの違い)
細かく分けると以下のように分類されますが、普段はすべて「ライブラリ」と呼んでしまって問題ありません。
- モジュール:
- 1つのファイル(
.py)に書かれた道具。 - 例:
timeは時間を扱う1つのモジュールです。
- 1つのファイル(
- パッケージ / ライブラリ:
- たくさんのモジュールを1つのフォルダーにまとめた、大きな道具箱。
- 例:
gpiozeroは、LEDやボタンなど、たくさんの部品用のモジュールが集まった巨大なライブラリです。
ライブラリの2つのタイプ
Pythonのライブラリは、大きく分けると次の2種類に分かれます。 [1]
| 種類 [1] | 説明 | 具体例 |
|---|---|---|
| 標準ライブラリ | Pythonをインストールした時に、最初からおまけで付いてくる道具箱。インストール不要。 | time(時間)math(数学の計算)random(おみくじ・乱数) |
| 外部ライブラリ | 世界中の開発者が作った、後から追加する道具箱。pip コマンドでダウンロードが必要。 | gpiozero(電子工作)requests(WEB通信)pandas(データ分析) |
Q3.このモジュールどうやってスクリプトに必要なものを見つけるのですか?
スクリプトに必要なモジュールを探すには、主に4つのアプローチがあります。
作りたい機能から逆算して探す方法が一般的です。
1. AIや検索エンジンで「やりたいこと」で調べる(一番早い)
「Python [やりたいこと] ライブラリ(またはモジュール)」というキーワードで調べると、定番のものがすぐに見つかります。
- 検索の例:
- 「Python 画像処理 ライブラリ」 ➔
PillowやOpenCVが見つかる - 「Python スクレイピング モジュール」 ➔
BeautifulSoupが見つかる
- 「Python 画像処理 ライブラリ」 ➔
- AIに聞く場合:
- 「PythonでExcelファイルを読み書きしたい。おすすめのモジュールとインストール方法を教えて」とそのまま質問すれば、最適なものを教えてくれます。
2. 公式の「標準ライブラリ一覧」から探す(安全・確実)
Pythonには、最初から入っている「標準ライブラリ」が豊富にあります。まずはここから探すのが基本です。
- 探し方:
- 「Python 標準ライブラリ一覧」でWeb検索します。
- 公式ドキュメントには「テキスト処理」「数学」「ファイル操作」などのカテゴリ別にモジュールがまとめられています。
- 例:ファイルのコピペがしたいなら
shutil、日付を扱いたいならdatetimeが見つかります。
3. 外部ライブラリの専門サイト「PyPI」で探す
世界中の開発者が作った外部ライブラリは、すべて PyPI(パイピーアイ) という公式サイトに登録されています。
- 探し方:
- PyPIの検索窓に「QR code」や「Face recognition(顔認識)」などのキーワードを英語で入力します。
- 検索結果に出てくる「星の数(GitHubのStars)」や「最終更新日」を見て、多くの人に使われていて、最近もアップデートされているものを選ぶのがコツです。
4. 他の人のコード(サンプル)を真似する
Qiita、Zenn、個人ブログ、GitHubなどで、自分が作りたいものと似たプログラムを公開している人を探します。
- 探し方:
- そのコードの最初の数行(
importやfrom ... importがある場所)を見ます。 - そこに書かれているモジュール名こそが、その機能を実現するために必要な道具です。
- そのコードの最初の数行(