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) |
●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ボタンは、プロンプト>>>の出る対話型モードです。