1. ESP8266 での MicroPython の始め方¶
MicroPython を使うと、ESP8266 ボードを最大限に活用することができます。逆も同様、ESP8266 チップは MicroPython を使用するための優れたプラットフォームです。このチュートリアルでは、MicroPython の設定、プロンプトの表示、WebREPLの使用、ネットワークへの接続、インターネットとの通信、ハードウェアペリフェラルの使用、およびいくつかの外部コンポーネントの制御について説明します。
始めましょう!
1.1. 必要なもの¶
最初に必要なのは、ESP8266 チップを搭載したボードです。MicroPython ソフトウェアは ESP8266 チップ自体をサポートしており、どのボードでも動作するはずです。ボードについて気にするとことは、どれくらいのフラッシュがあるか、GPIO ピンが外にどのように接続されているか、UART を PC で使用できるようにする内蔵 USB シリアルコンバータが含まれているかどうかです。
フラッシュサイズの最小要件は1Mバイトです。また、512KB のボード専用のビルドもありますが、通常のビルドに比べて非常に制限されています。ファイルシステムのサポートがないため、それに依存する機能は動作しません(WebREPL、upip など)。したがって、ソースからビルドし、特定のアプリケーションのパラメータを微調整するユーザーにとっては、512KB ビルドがより面白くなります。
このチュートリアルでは、チップ名(GPIO0など)を使用してピンの名前を示しています。これは、特定のボード上のどのピンに対応しているかを簡単に見つけることができます。
1.2. ボードの電源を入れる¶
ボードに USB コネクタがある場合は、PC に接続されているときに電源が供給されている可能性が非常に高いです。それ以外の場合は、直接電源を入力する必要があります。詳細については、ボードのドキュメントを参照してください。
1.3. ファームウェアの入手¶
まず、最新の MicroPython ファームウェアの .bin ファイルをダウンロードして、ESP8266 デバイスにロードします。ファームウェアは MicroPython ダウンロードページ からダウンロードできます。ここには、3つの主要な選択肢があります。
- 安定版ファームウェアが 1024kb 以上のモジュール用にビルドされています。
- 毎日ビルド版ファームウェアが 1024kb以上のモジュール用にビルドされています。
- 毎日ビルド版ファームウェアが 512kb のモジュール用にビルドされています。
MicroPython を使い始めたばかりの方には、安定版ファームウェアビルドをお勧めします。経験豊富で経験豊かな MicroPython ESP8266 ユーザーで、開発が続けられている新機能をテストしたい場合は、毎日ビルド版があります(注記: 実際に開発経験が必要です。たとえば、どのような新しい変更や機能が導入されたのか知るために git の履歴を追う準備をするなど)。
機能のお試しを目的として 512kb モジュールのサポートが提供されています。エンドユーザーにとっては、フラッシュメモリが 1024kb 以上のモジュールを使用することをお勧めします。そのため、512kb モジュールは毎日ビルド版のみが提供されています。
1.4. ファームウェアの配備¶
MicroPython ファームウェア(コンパイル済みコード)を取得したら、ESP8266 デバイスにロードする必要があります。これを行うには、主に2つのステップがあります。まず、デバイスをブートローダモードにし、次にファームウェアをコピーする必要があります。これらの手順の正確な手順は、特定のボードに大きく依存します。詳細については、そのドキュメントを参照する必要があります。
USB コネクタ、USB シリアルコンバータを備え、DTR ピンと RTS ピンが特別な方法で配線されているボードを使用している場合は、すべてのステップを自動的に行うことができるため、ファームウェアの展開は簡単です。このような機能を備えたボードには、Adafruit Feather HUZZAH と NodeMCU ボードがあります。
そのようなボードがない場合、GPIO0 をグランドに繋いだままで、リセットピンをグランドに繋いで離すことでデバイスをリセットし、プログラミングモードに入る必要があります。
最良の結果を得るために、新しい MicroPython ファームウェアをインストールする前に、まずデバイスのフラッシュ全体を消去することをお勧めします。
現在のところはファームウェアをコピーする方法として esptool.py のみをサポートしています。このツールは https://github.com/espressif/esptool/ からダウンロードするか、pip を使用してインストールしてください:
pip install esptool
1.3 で始まるバージョンは、Python 2.7 と Python 3.4 (またはそれより新しいバージョン)の両方をサポートしています。古いバージョンでも正常に動作しますが(少なくとも 1.2.1 が必要)、Python 2.7 が必要です。
これ以外のフラッシュプログラムが動作するかは、試してみるか、ボードのドキュメントを参照して推奨事項を確認してください。
esptool.py を使用すると、次のコマンドでフラッシュを消去できます:
esptool.py --port /dev/ttyUSB0 erase_flash
消去したら、次の方法で新しいファームウェアを導入します:
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20170108-v1.8.7.bin
PC により、 "port " 指定を別のものに変更する必要があります。また、フラッシュ時にエラーが発生した場合はボーレートを下げる必要があります(たとえば 115200 まで)。ファームウェアのファイル名もダウンロードしたファイルの名前に変える必要があります。
FlashROM 構成の一部のボード(NodeMCU ボードの一部など)では、利用できる SPI フラッシュモード を手動で設定する必要がある場合があります。たいていはデバイスで利用できる最速のオプションを選択するでしょうが、 -fm dout
オプション(最低速オプション)を指定すると最も確実性が上がります:
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 0 esp8266-20170108-v1.8.7.bin
上記のコマンドがエラーなしで実行されれば、MicroPython がボードにインストールされたことになります!
プログラミングモードにするために GPIO0 を手動でグランドに繋いだ場合は、今すぐそれを解除して、再度リセットピンをグランドに繋いですぐに離すことでデバイスをリセットしてください。
1.5. シリアルプロンプト¶
デバイスにファームウェアをインストールしたら、ボードに応じて UART 0 (GPIO1 = TX, GPIO3 = RX)上の REPL (Pythonプロンプト)にアクセスできます(USB シリアルコンバータに接続されている可能性があります)。ボーレートは 115200 です。チュートリアルの次の部分では、プロンプトについて詳しく説明します。
1.6. WiFi¶
新規のインストールとブートの後、デバイスは接続可能な WiFi アクセスポイント(AP)として設定されます。ESSID は、MicroPython-xxxxxx という形式です。x はデバイスのMAC アドレスの一部に置き換えられます(毎回同じで、すべての ESP8266 チップではおそらく同じです)。WiFi のパスワードは micropythoN です(大文字の N に注意してください)。一度ネットワークに接続すると、そのIPアドレスは 192.168.4.1 になります。WiFi の設定については、チュートリアルの後半で詳しく説明します。
1.7. インストールの問題のトラブルシューティング¶
フラッシュ中またはファームウェアの実行直後に問題が発生した場合は、次の推奨事項を参照してください。
ハードウェア上の問題がないかを調べ、取り除いてください。発生しやすい問題は2つあります。電源品質が悪いことと FlashROM の寿命/欠陥です。電源と言えば、素のアンペア数だけでなく、一般的に低リップルやノイズ/EMIも重要です。自家製または壁飾り式電源で問題が発生した場合は、コンピュータからの USB 電源を試してみてください。また、アースされていない電源装置は、EMI (電磁波干渉)を増やす原因となり、問題を引き起こすことが知られています。少なくとも、電気デバイスの故障を引き起こす可能性があります。したがって、ESP8266 や他のボードで作業する場合は、アースされていない電源を使わないようにしてください。FlashROM のハードウェア問題に関しては、(MicroPython には関係ない)別の報告 (報告例) があります。たとえば、一部の ESP8266 モジュールでは、FlashROM のプログラム書換えを、わずか20回行っただけでプログラミングエラーが発生しました。これは、信頼できるベンダーの ESP8266 で採用しているタイプの FlashROM が 100,000回のプログラム書換えを可能としているのに対し、 かなり 少ない回数です。このような(明らかに安い)モジュール/ボードで使われているフラッシュチップの中には欠陥品または中古を再利用したものが使われています。モジュール/ボードの購入にあたっては、ベンダー、価格、ドキュメント、保証、購入後のサポートなどをよく考慮するようにしてください。
上記のフラッシュ手順は、速度と安定性の間の良好な妥協点である 460800 ボーのフラッシュ速度を使っています。ただし、モジュール/ボード、USB-UARTコンバータ、ケーブル、ホスト OS などによっては、上記ボーレートでも速すぎてエラーにつながる可能性があります。そのような場合には、より一般的な 115200 ボーレートを試してください。
低いボーレートが役に立たなかった場合は、プログラミングアルゴリズムの異なる古いバージョンの esptool.py を試してみてください。
pip install esptool==1.0.1
このバージョンは
--flash_size=detect
オプションをサポートしていないので、フラッシュ ROM サイズを明示的に指定する必要があります(Mビット単位)。Python 2.7 も必要です。したがって、上記のコマンドではpip
の代わりにpip2
を使う必要があるかもしれません。上記のコマンドの
--flash_size
オプションは必須です。これを省略すると、ファームウェアが破損します。フラッシュの内容の不正(たとえば、チップ上の欠陥セクタなど)を検出するには、 上記のコマンドに
--verify
オプションを加えてください。さらに、MicroPython REPL プロンプトからファームウェアの整合性をチェックすることもできます(フラッシュができて、
--verify
オプションでもエラーが報告されない場合):import esp esp.check_fw()
最後の出力値が True の場合、ファームウェアはOKです。それ以外の場合は破損しているため、正しく再フラッシュする必要があります。
別の(esptool.pyではない)フラッシュアプリケーションで問題が発生した場合は、esptool.py を試してください。これは ESP8266 コミュニティで一般に認められているフラッシュアプリケーションです。
ファームウェアをフラッシュしても問題が解決しない場合、問題を報告するために esptool.py プロジェクトページ https://github.com/espressif/esptool にある情報やバグトラッカーを参照してください。
ファームウェアをフラッシュできた場合でも、
--verify
オプションまたはesp.check_fw()
が何度試してもエラーを返す場合は、上で説明したように、欠陥のある FlashROM チップである可能性があります。