IoTで使うPython入門Step0-(2) 動くコード

 開発ツールのMuを使います。Muは、Visual Studioで短いプログラムを開発するために、最低限これだけの機能があれば十分だねというPython用のエディタがメインのツールです。
 エディタとターミナルがあればPythonのプログラムは作れます。最初のころは、記述ルール、予約語、文法などわからないことが多いので、サポートしてくれる開発ツールを利用するほうがよいと考えました。

Muのインストールはたったの2ステップ

 メイン・メニューから、設定-Recommended Softwareを選びます。

 ProgrammingにあるMuにチェックを入れて、OKを押すと、インストールされます。

 メイン・メニューのプログラミングの中にMuが登録されているので、選ぶと立ち上がります。

メニュー左にあるモード・ボタンをクリックしてPython3を選ぶ

 プログラムを書いてみます。最初は無駄な時間を作るsleep()の利用例です。センサのデータを読み出すときにほんの少しの待ち時間を設定したり、画面の表示を1秒ごとにするとか、よく使います。

 画面真ん中のエディタ領域の第1行目の文頭で、

 importスペースtiと入れているときに、支援ツール(※)が動き、tiで始まる予約語を表示します。timeを続けて打ちます。

 改行

 文頭から whileスペースtrue:と入れます。

 改行

 そうするとカーソルは4文字目に来ます。TABではなくスペースが四つ入ります。これはインデントで、C言語などで{}でくくるのと同じ働きをします。見やすさのために使うわけではありません。
 Python3ではTABコードとスペースが混在していると怒られるのですが、MuはTABを入れると勝手にスペースに置換します。

  time.

とドットまでを入れます。ドットを入れた瞬間、支援ツールが候補を出してくれます。そのリストの中からsleepを選択します。引数の0.1秒を入れます(time.sleep(0.1))。

 次に、

 print ("ok")

 実行をクリックします。保存画面が出たら、たとえばled1とします。mu_codeフォルダの中にled1.pyで保存されます。

 画面下側に、エラーが表示されました。

 while true:
NameError: name 'true' is not defined

 「'true'は定義されていないよ!」、つまりPythonおよびこのプログラムではtrueという単語は知らないということなので、全部を大文字にしたり試したのち、tをTに変更すると通りました。
 Trueは数字の1でも同じです。下の図は、チェック・ボタンを押したときの指摘です。エラーで3行目ということはわかりましたが、こっちのほうがよりわかりやすいです。ちなみに、Highは定義されていないようです。

 while True: は、条件が「真」の間はループを回せという意味です。Trueもしくは1は真なので永久ループです。ループの内容は、インデントを付けたtime.sleep(0.1)とprint ("ok")の2行です。

 停止のボタンを押して、デバッグのボタンを押します。ステップオーバーを押していくと、1行ずつ実行していきます。
 print ("ok")の次はtime.sleep(0.1)に移動します。print文が実行されたので、画面の下にokが一つ表示されました。

 継続ボタンを押すと、停止ボタンを押すまでずっとokが表示されます。time.sleep(0.1)の引数の単位は秒です。5とかにすると、とても待たされるのでtime関数を実感できます。
 1行ずつ実行しましたが、行番号をクリックするとブレーク・ポイントの赤い丸印が付くので、任意の行にすっ飛ばすことができます。

ライブラリ

 Pythonには標準ライブラリがあります。ラズパイには、LEDやスイッチをつなぐGPIOを利用するライブラリが多く作られています。今動いているラズパイに、どういうライブラリがインストールされているかは、pip list(ターミナルで打ち込む)で知ります。
 太字は、これから利用するもので、インストール済みです。

automationhat (0.1.0)
blinker (1.3)
blinkt (0.1.2)
buttonshim (0.0.2)
Cap1xxx (0.1.3)
chardet (2.3.0)
click (6.6)
colorama (0.3.7)
cryptography (1.7.1)
drumhat (0.1.0)
enum34 (1.1.6)
envirophat (1.0.0)
ExplorerHAT (0.4.2)
Flask (0.12.1)
fourletterphat (0.1.0)
gpiozero (1.4.1)
idna (2.2)
ipaddress (1.0.17)
itsdangerous (0.24)
Jinja2 (2.8)
keyring (10.1)
keyrings.alt (1.3)
MarkupSafe (0.23)
mcpi (0.1.1)
microdotphat (0.2.1)
mote (0.0.3)
motephat (0.0.2)
numpy (1.12.1)
oauthlib (2.0.1)
pantilthat (0.0.6)
pexpect (4.2.1)
phatbeat (0.1.1)
pianohat (0.1.0)
picamera (1.13)
picraft (1.0)
piglow (1.2.4)
pigpio (1.38)
Pillow (4.0.0)
pip (9.0.1)
ptyprocess (0.5.1)
pyasn1 (0.1.9)
pycrypto (2.6.1)
pyflakes (1.3.0)
pygame (1.9.3)
pygobject (3.22.0)
pyinotify (0.9.6)
PyJWT (1.4.2)
pyOpenSSL (16.2.0)
pyserial (3.2.1)
pyxdg (0.25)
rainbowhat (0.1.0)
requests (2.12.4)
requests-oauthlib (0.7.0)
RPi.GPIO (0.6.3)
RTIMULib (7.2.1)
scrollphat (0.0.7)
scrollphathd (1.2.1)
SecretStorage (2.3.1)
sense-emu (1.1)
sense-hat (2.2.0)
setuptools (33.1.1)
simplejson (3.10.0)
six (1.10.0)
skywriter (0.0.7)
sn3218 (1.2.7)
spidev (3.3)
touchphat (0.0.1)
twython (3.4.0)
unicornhathd (0.0.4)
urllib3 (1.19.1)
Werkzeug (0.11.15)
wheel (0.29.0)

import

 timeは上記のリストに出てこないので、最初から組み込まれた標準ライブラリの一部だとわかります。「時刻データへのアクセスと変換」の説明によると、sleep以外にも利用できる関数がたくさんあります。こちらの解説がわかりやすいです。

 timeをモジュールと呼びます。
 sleepはtimeモジュールの中で定義されている関数で、関数や定数、クラスはオブジェクトと呼びます。
 ライブラリは、プログラムの最初で次のように記述して利用します。

import <モジュール>

(※)2018/11/4 import <オブジェクト>としていたところを<モジュール>に修正しました。ここまででは出てきませんが、<モジュール>は<パッケージ>でもOKです。

【例】import time
 もっとも一般的な書き方です。使うときは、モジュール名と関数名をドットでつなぎます。

 使いたい関数だけという書き方もできます。使うときは、モジュール名を入れないで記述できます。
【例】from time import sleep

【例】import time as T
      たとえば、Tという別名で使います。多くは、モジュール名が長いときなどに使われるようです。

 オブジェクトに別名を付けられるので、from time import sleep as delayとすればArduinoのような記述が使えます。asはわかりやすくするために使われるようなので、これでは混乱しそうなのでこの例は×ですネ。

(※)マイクロソフトではインテリセンス(IntelliSense)、エディタによってはオムニ補完と呼ばれているようです。

(※2)チェック・ボタンを押すと、文法以外にPython3の記述ルールをチェックしてくれます。カンマのあとにスペースを空けるとか、:の前にスペースは不要とかの指摘もされます。

(※3)REPLボタンは、プロンプト>>>の出る対話型モードです。