Raspberry PiでPythonプログラミング入門

Python(パイソン)とは世界的に人気のあるプログラミング言語の一つです。Pythonを使えばほぼどんなプログラムも実現できると言っても過言ではなく、GPIOピンを使って、センサーや拡張基板と通信することもできます。本記事では、プログラミング初心者の方向けに、Pythonのコードの記述と実行方法、文法の基礎を解説しています。

更新日 : 2024年3月5日

Pythonとは

Python(パイソン)とは世界的に人気のあるプログラミング言語の一つです。PythonはWindows、Mac、Linuxなど様々なOSに対応しており、Raspberry Pi(ラズパイ)でも標準でインストールされています。人気がある言語なので、情報が多く、これからRaspberry Pi(ラズパイ)でプログラミングを勉強するのであれば、Pythonは最適な選択肢と言えます。

Embed from Getty Images

また、「パッケージ」と呼ばれる仕組みを使うと、機能を拡張することができるので、少ないコードで様々なプログラムを作成することができます。

Pythonでできること

以下はPythonで実現できるプログラムの例です。これはほんの一部で、Pythonを使えばほぼどんなプログラムも実現できると言っても過言ではありません。Raspberry Piの特徴であるGPIOピンを使って、センサーや拡張基板と通信することもできます。

  • 定期バックアップなどの作業の自動化
  • マウス、キーボードをプログラムからコントロール
  • センサーから測定値を読み出してファイルに保存
  • 拡張基板の制御
  • カメラで写真を撮影して加工
  • Webからデータを自動収集して分析
  • Webサービスの作成
  • AIを使った画像分類や、オリジナルAIの作成
Pythonで拡張基板のセンサーから温度や明るさを取得することも可能です
Pythonで拡張基板のセンサーから温度や明るさを取得することも可能です

開発ソフトThonny Python IDEの起動

プログラムを学習するには実際に動かしてみるのが近道です。まずは、Raspberry Piにデフォルトでインストールされている開発ソフト「Thonny Python IDE」を使ってPythonプログラムを実行してみましょう。

左上メニューの「プログラミング -> Thonny Python IDE」をクリックして起動します。(OSバージョンによっては単に「Thonny」と表記されています)

メニューからThonny Python IDEの起動

起動すると、以下のような画面になります。中央がプログラムコードを記述する部分です。下が実行結果を表示する部分です。

Thonny Python IDEの画面構成



プログラムコードを入力

画面に「Enjoy Raspberry Pi!」と表示するだけの非常にシンプルなプログラムを作成、実行してみます。プログラムコード部分に以下のコードを記述して下さい。

print('Enjoy')
print('Raspberry Pi!')

printは後に続く()の中身を画面に表示する命令です。()の中は文字列であることを明示するため、シングルクォーテーション「’」かダブルクォーテーション「”」で囲んでいます。

作成したプログラムを保存

実行する前に、作成したプログラムをファイルに保存します。上部の「Save」ボタンをクリックします。

Thonny Python IDEでプログラムを保存

保存する場所を指定するダイアログが表示されるので、ファイル名を入力して「OK」をクリックします。Pythonプログラムは末尾の拡張子を「.py」にするのが一般的です。今回はpiユーザーのホームディレクトリに「test.py」という名前で保存しました。

Thonny Python IDEでプログラム名をつける

なお、「Load」ボタンから過去に保存したプログラムを開くことができます。

プログラムを実行する

ではいよいよ作成したプログラムを実行します。上部の「Run」ボタンをクリックします。下部に「Enjoy Raspberry Pi!」と表示されれば成功です!

print命令はデフォルトで最後に改行されるので、1行目のprintで「Enjoy」が表示された後改行され、次に2行目のprintで「Raspberry Pi!」と表示されました。

ここから分かるように、記述した命令が上から順に1行ずつ実行されていきます。

Thonny Python IDEでプログラムを実行

ターミナルから実行する

Thonny Python IDEは学習に便利ですが、実際はターミナルからプログラムを実行したほうが便利な場面もあります。そこで、今度はターミナルから先ほど作成したプログラムを実行してみます。

左上メニューから「アクセサリ -> LX Terminal」をクリックしてターミナルを開きます。

先ほどの例ではホームディレクトリに「test.py」という名前でプログラムを保存していました。他のディレクトリに保存した場合は、cdコマンドでプログラムのあるディレクトリに移動しておきます。

プログラムを実行するには以下のように、「python3 test.py」コマンドを実行します。「Enjoy Raspberry Pi!」が表示されれば成功です!

ターミナルからPythonプログラムを実行



ファイルを直接実行する

もう一つの実行方法として、ファイルを直接実行する方法を説明します。コード内に実行環境を記述しておくことで、毎回python3などと指定する必要が無くなります。ファイルを配布する場合も便利です。

コードの先頭に以下のように1行を追加して下さい。これはPython3で実行することをコード上で指定しています。

#!/usr/bin/env python3
print('Enjoy')
print('Raspberry Pi!')

次にファイルに実行属性を付けます。ターミナルから以下の$に続くコマンドを実行します。

$ chmod 755 test.py

最後にファイルを直接実行します。現在のディレクトリ内であっても「./」を先頭に点ける必要がある点に注意して下さい。

$ ./test.py

以上でPythonプログラムの作成と実行方法が分かったと思います。これ以降はコードと実行結果のみを掲載します。

変数

次に変数について説明します。変数とは何かの値やデータを入れておく入れ物のようなものです。変数は好きな名前をつけて自由に作成することができます。(Pythonの文法上特殊な意味をもつ単語は使用できないケースがあります) 変数に入れたデータは、そのプログラムを実行している間は保持されますが、プログラム終了後は破棄されます。

変数を作成する目的は主に以下の2つです。

  • 後で使いたいデータを一時的に保存しておく
  • 何らかの命令で取得した結果を変数で受け取る

以下はシンプルな整数型の変数を使う例です。「変数名 = 式」のように記述すると、右辺の式の値が左辺の変数に入ります。a、b、cという変数の名前は自由に変えて構いません。2文字以上でも構いません。なお、「#」から行末まではコメントとなり、プログラムからは無視されます。備考などを書いておくと良いでしょう。

# 整数の変数の使用例
a = 2                # aという変数を作成し、2を代入(=に続く値を入れる)
b = 3                # bという変数を作成し、3を代入
c = a*2 + b          # cという変数に a x 2 + bの値を代入
print('cの値は', c)

実行結果は以下の通りです。2 x 2 + 3 = 7なので期待した値になっています。

cの値は 7

変数には数値だけでなく文字列も入れることができます。lenは()内の文字列の文字数を求める命令です。

# 文字列の変数の使用例
a = 'Raspberry Pi'       # aという変数に文字列を代入
b = len(a)               # bという変数にaの文字数を代入
print('aの文字数は', b)

実行結果は以下の通りです。スペースも含めて12文字なので期待通りですね。aの文字列を変更してどうなるかもぜひ試してみて下さい。

aの文字数は 12

ここでは整数と文字列を例にしましたが、実際にはこれ以外にも様々なデータ等を変数として扱うことができます。

ifで条件分岐

プログラムは上から順に実行されると解説しました。しかし、それだけだと単純な作業しかできません。if文を使うことで特定の条件を満たした(もしくは満たさなかった)場合のみ実行される処理を記述することができます。これにより、複雑な処理をさせることができます。

以下がコード例です。5~10行目でif文が使われています。b==0はbが0と一致したらという条件です。行の最後に「:」を付ける決まりになっています。6行目は5行目の条件を満たした場合に実行される命令です。ifの対象になる部分は先頭にスペースを入れる(インデントする)必要があります。一般的には4文字か2文字のスペースでインデントします。

elifとelseはifの条件を満たさなかった場合の処理ですが、書かなくても構いません。

# ifの使用例
a = 'Raspberry Pi'       # aという変数に文字列を代入
b = len(a)               # bという変数にaの文字数を代入

if b==0: # bが0と一致したら以下を実行
    print('aの文字数は0です')
elif b <10: # bが0と一致せず、10より小さかったら以下を実行
    print('aの文字数は1以上10未満です')
else: # いずれの条件にも当てはまらなかったら以下を実行
    print('aの文字数は10以上です')

print('aの文字数は', b)

実行結果は以下の通りです。文字数が12文字なので、if, elif以下の行は実行されず、else以下の行が実行されています。aの文字列を変更してどうなるかもぜひ試してみて下さい。

aの文字数は10以上です
aの文字数は 12

forでループ

for文は同じような処理を何回も実行したい場合に利用します。以下がコード例です。range(5)命令は0, 1, 2, 3, 4という数値の組を生成します。for文により、iという名前の変数が0~4まで変化しながらprint命令が実行されます。

# forの使用例
for i in range(5):  # iに0から4まで値を代入しながら、以下を5回実行する
    print(i+1, '回目')

実行結果は以下の通りです。print文が5回実行されているのが分かると思います。

1 回目
2 回目
3 回目
4 回目
5 回目



importで機能を拡張する

import命令を使うことで、Pythonに用意されている便利な機能を使えるようになります。今回は、globとtimeというモジュールをimportすることで、ファイルとディレクトリの一覧を取得し、1秒おきに表示するプログラムを作成します。

以下がコード例です。2、3行目でimportすることで、それ以降globとtimeの機能が使えるようになります。filesにはファイルとディレクトリの一覧が文字列で代入されます。このように複数の値をまとめて保持するものをリストと呼びます。

5行目でリストの要素を1つずつfに代入しながら6、7行目を実行しています。

# importで機能を拡張する例
import glob   # globモジュールの機能を使う
import time   # timeモジュールの機能を使う

files = glob.glob('*')   # 現在のディレクトリのファイルとディレクトリをすべて取得
for f in files:
    print(f)
    time.sleep(1)     # 1秒待機

以下のようにファイルとディレクトリ一覧が1秒に1つずつ表示されれば成功です。

Bookshelf
Downloads
Desktop
Music
Templates
Public
Pictures
prg
test.py
Videos
Documents

まとめ

Pythonのコードの記述と実行方法、文法の基礎の解説は以上です。本記事で触れたのはPythonのほんの一部に過ぎません。しかし、基礎の文法とコードを実行する方法がわかれば、解説記事の情報を試しながらプログラミングが上達する第一歩になります。

Pythonは拡張性が高く、習得することで様々なアプリケーションが作成可能です。作業の自動化、カメラで撮影&画像解析、Webサービス、AIなどが一例です。本格的に学びたい方は書籍を活用してみても良いと思います。

次のステップとして、PythonでGPIO、LED、スイッチを制御する方法を解説しているので、ぜひ参考にして下さい。

PythonでRaspberry PiのGPIO、LED、スイッチ制御

Raspberry Pi(ラズパイ)では、GPIOを通じて電気信号を送受信することで、様々なデバイスを制御することができます。本記事では、基本的なLEDとスイッチについて、Pythonプログラムで制御する方法を解説します。LEDにステータスを表示させたり、スイッチが押されたら何らかの動作をさせるなど、自分が好きなように動作をプログラミングすることが可能になります。

定期撮影ラズパイカメラをモバイルバッテリーで長期運用 (RPZ-PowerMGR)

Raspberry Pi(ラズパイ)と純正カメラを使用して、定期的に撮影するタイムラプス機能を実装する方法を解説します。RPZ-PowerMGR拡張基板を使うことで、指定時刻に起動し、撮影後は自動的にシャットダウン&電源OFFします。待機時の消費電力をカットすることで、モバイルバッテリーで長期運用が可能になります。

RPZ-PowerMGR (Raspberry Pi/Jetson Nano用 電源管理/制御/RTC拡張基板)

スイッチで電源ON/OFF、指定時刻に電源ON/OFF、シャットダウン後自動電源OFFを可能にする拡張基板です。Raspberry Pi(ラズパイ)やJetson Nanoの電源の課題を解決し、省電力運用を可能にします。RTCで電源OFF時も時刻を保持します。USB Type-C端子を搭載し、モバイルバッテリーでも利用できます。