2. MicroPython REPL プロンプトの始め方

REPL は Read Evaluate Print Loop の略で、ESP8266 でアクセスできる対話的な MicroPython プロンプトに与えられた名前です。REPL を使うことは、コードをテストしてコマンドを実行する最も簡単な方法です。

REPL にアクセスするには、UART シリアルポート経由の有線接続を使う方法と、WiFi を使う方法があります。

2.1. シリアルポート経由の REPL

REPL は、UART 0 シリアルペリフェラルで常に使えます。これは、TX 用の GPIO1 ピンと RX 用の GPIO3 ピンに接続されています。REPL のボーレートは 115200 です。ボード上に USB シリアルコンバータが搭載されている場合は、PC から REPL に直接アクセスできます。それ以外の場合は、UART と通信する方法が必要です。

USB シリアル経由のプロンプトにアクセスするには、ターミナルエミュレータプログラムを使用する必要があります。Windows では TeraTerm を使うのがよいでしょう。Mac ではOSに組み込まれている screen プログラムが使えます。Linux には picocomminicom があります。もちろん、他にも多くの端末プログラムがありますので、好きなものを選んでください!

たとえば、Linux では次のコマンドを実行できます。

picocom /dev/ttyUSB0 -b115200

シリアルポート経由で接続を確立したら、enter キーを数回押して動作しているかどうかをテストできます。Python REPL プロンプト >>> が表示されます。

2.2. WebREPL - WiFi 経由のプロンプト

WebREPLを使うと、Web ブラウザから WiFi 経由で Python プロンプトを使えます。Firefox と Chrome の最新バージョンがサポートされています。

便宜上、WebREPL クライアントは http://micropython.org/webrepl でホストされてい ます。また、GitHubリポジトリ https://github.com/micropython/webrepl からローカルにインストールすることもできます。

WebREPL に接続する前に、パスワードを設定し、通常のシリアル接続で有効にする必要があります。ESP8266 用 MicropPython の初期バージョンでは、起動時に自動的に WebREPL が有効になり、最初の接続で WiFi 経由でパスワードを設定できるようになりましたが、WebREPL が広く普及したため、セキュリティ向上の観点から、初期設定は有線接続で次を実行するよう変更になりました:

import webrepl_setup

画面上の指示とプロンプトにしたがってください。設定の変更を有効にするには、デバイスを再起動する必要があります。

WebREPL を使用するには、コンピュータを ESP8266 のアクセスポイント(MicroPython-xxxxxx、前のセクションを参照)に接続します。すでにルータに接続するように ESP8266 を再設定している場合は、この部分をスキップできます。

ESP8266 と同じネットワーク上にある場合は、"Connect" ボタンをクリックします(ルータ経由で接続する場合は IP アドレスを変更する必要があります)。デフォルトでは ESP8266 のアクセスポイントに接続したIPアドレスとなります)。接続が成功すると、パスワードプロンプトが表示されます。

上記の設定ステップで設定したパスワードを入力したら、もう一度 Enter キーを押すと、プロンプト >>> が表示されます。これで、Python コマンドの入力を開始できます!

2.3. REPL の使い方

プロンプトが出たら、実験を始めることができます! プロンプトで入力したものは、Enter キーを押した後に実行されます。MicroPython は入力したコードを実行し、結果があればそれを印刷します。入力したテキストにエラーがある場合は、エラーメッセージが表示されます。

プロンプトで次のように入力してください。

>>> print('hello esp8266!')
hello esp8266!

>>> 矢印を入力してはならないことに注意してください。これはプロンプトであり、この後ろにテキストを入力する必要があることを示しています。そして次の行は、デバイスが応答してきたものです。つまりは、テキスト print("hello esp8266!") を入力して Enter キーを押すと、画面上の出力が上のようになるということです。

すでにいくらかでも python を知っているなら、ここでいくつかの基本的なコマンドを試すことができます。たとえば:

>>> 1 + 2
3
>>> 1 / 2
0.5
>>> 12**34
4922235242952026704037113243122008064

ボードの GPIO2 にLEDが接続されている場合(ESP-12 モジュールの場合)、次のコードを使用して点灯/消灯を切り替えることができます。

>>> import machine
>>> pin = machine.Pin(2, machine.Pin.OUT)
>>> pin.on()
>>> pin.off()

Pin の on メソッドが LED を消灯し、 off メソッドが LED を点灯する可能性があります(またはその逆の可能性もあります)。これは、ボード上の LED が配線されている方法に依存します。これを解決するために、machine.Signal クラスが用意されています。

2.3.1. ライン 編集

左矢印キーと右矢印キーを使用してカーソルを移動し、delete キーと backspace キーを使って入力している現在の行を編集できます。また、Home または Ctrl-A を押すと、カーソルが行の先頭に移動し、End または Ctrl-E を押すと行末に移動します。

2.3.2. 履歴からの入力

REPL は入力したテキストを最新から一定行数だけ記憶します(ESP8266では最大8行まで)。前の行を呼び出すには、上下の矢印キーを使います。

2.3.3. タブ補完

Tab キーを押すと、入力中の現在の単語の自動補完が行われます。これは、モジュールやオブジェクトが持つ関数やメソッドを見つけるのに非常に便利です。"ma" と入力して Tab キーを押して試してください。上記の例で machine を import していれば、"machine" と補完されます。その後、"." とタイプして Tab キーをもう一度押すと、machine モジュールが持つすべての関数のリストが表示されます。

2.3.4. 行の継続と自動インデント

入力する内容によっては「継続」が必要な場合があります。つまり、適切な Python ステートメントを作成するために、より多くの行のテキストが必要になる場合があるということです。この場合、プロンプトは ... に変わり、カーソルが自動的に正しい量だけインデントされ、次の行をすぐに入力し始めることができます。次の関数を定義してこれを試してください:

>>> def toggle(p):
...    p.value(not p.value())
...
...
...
>>>

上の例では、複合文を完成させるために Enter キーを3回続けて押す必要がありました(ドットだけの3行がそれです)。複合文を完成させる別の方法は、バックスペースを押して行の先頭に移動し、Enter キーを押すことです。(間違えてしまい、継続モードから抜けたい場合は、Ctrl-Cを押してください。すべての行が無視されます。)

今定義した関数を使うと、Pin のオン/オフを切り替えることができます。前に作成したPin オブジェクトはまだ存在するはずです(そうでない場合は再作成してください)。次のようにすると LED を点灯/消灯を切り替えられます。

>>> toggle(pin)

ループで LED の点灯/消灯を切り替えましょう。(LEDがない場合は、toggle を呼び出す代わりに何かテキストを表示させるようにして効果を確認してください):

>>> import time
>>> while True:
...     toggle(pin)
...     time.sleep_ms(500)
...
...
...
>>>

これは 1Hz で LED の点灯/消灯を切り替えます(0.5秒点灯、0.5秒消灯)。切り替えを止めるには、ctrl-C を押します。これは KeyboardInterrupt 例外を発生させ、ループから抜け出します。

time モジュールは、遅延やタイミングをとるための便利な機能を提供します。Tab キーによる補完機能を使って、何があるのかを調べて、使って遊んでみてください!

2.3.5. 貼付けモード

ctrl-E を押すと、特別な貼付けモードになります。これにより、テキストの塊をコピーしてREPLに貼り付けることができます。ctrl-E を押すと、貼付けモードのプロンプトが表示されます:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
===

この状態でテキストを貼り付ける(または入力する)ことができます。特別なキーやコマンド(Tab や backspace など)は、貼付けモードでは機能せず、そのまま受け入れられます。ctrl-D を押すと、テキストの入力が完了し、入力したテキストを実行します。

2.3.6. その他の制御コマンド

その他にも4つの制御コマンドがあります:

  • 空白行で Ctrl-A を押すと、raw REPL モードになります。これは、文字がエコーバックされないという点を除いて、永続的な貼付けモードのようなものです。
  • 空白行で Ctrl-B を押すと、通常のREPLモードになります。
  • Ctrl-C は入力をキャンセルしたり、現在実行中のコードを中断したりします。
  • 空白行で Ctrl-D を押すと、ソフトリセットを行います。

ctrl-A と ctrl-D は WebREPL では機能しません。