昨日(1/25)、以前からアナウンスされていた、MicroPython ver 1.10がリリースされました。
2018/5/11にリリースされた前バージョンの1.9.4以降に取り込まれた更新がまとまっています。
具体的には、
・Nordic nRF51/52のサポート
・ESP32版のドキュメント
・ESP32のpsRAMサポート
などです。ビルド済みバイナリも既にダウンロードページに掲載されています。
WIO NODE
この機会に、これまで動かしたことのなかったESP8266版MicroPythonを動かしてみました。
ボードはSeeedのWIO NODEです。このボードはSeeed独自のサービス向けに作られたようですが、単なるESP8266ボードとしても使えます。
1000円強で買えますので、価格的にも手頃です。(ただしUSBシリアル変換は別途必要になりますので、それを含めるならUSBシリアル変換が内蔵されているESP-32 DevKitCのほうが安くなります。)
このボードは、ピンヘッダが無い代わりに、Groveコネクタが2つ付いています。GroveコネクタはI/Oが2本とGNDとVccですので、合計4本のI/Oピンが使えます。また、RSTとGPIO0にタクトスイッチが付いています。
Groveコネクタの一方はUARTのTX/RXが使えるようになっていますので、ここからESP8266のフラッシュへ書き込みができます。
UARTの配線は以下を見ながら、変換コネクタを作りました。
MobileHackerz再起動日記: 遠隔でPCの電源を入れる、無線LAN×WoL電源ボタンをつくった
スイッチサイエンスのUSBシリアルコンバータに、1×6のピンヘッダで接続しています。
電源供給用MicroUSBも接続する必要がありますので、PC側にはUSBポートが2つ必要です。
MicroPythonの書き込み
ダウンロードページからESP8266用のバイナリをダウンロードします。今回はesp8266-20190125-v1.10.binをダウンロードしました。
WIO NODEには「Func」「RST」の2つのタクトスイッチが付いています。
「Func」を押したまま、「RST」を押して離すとフラッシュ書き込みモードになります。
書き込み手順はMicroPythonのドキュメント(英語/日本語)にあるとおり、esptool.pyを使うのが良いようです。
Windowsの場合は、NODEMCUの書き込みツールを使うこともできます。(Adafruitのページより。)
このツールはGitHubからダウンロードできます(64bit版/32bit版)。
使い方は、まずConfigタブで歯車アイコンをクリックして、ファームウェアのファイルを指定します。
次に、Advancedタブで以下の通り設定します。
最後にOperationタブでCOMポートを選択してFlashボタンをクリックします。
書き込みが終わったら、RSTボタンを押せばUARTからMicroPythonへアクセスできます。
通信速度は8bit/115200bpsです。
ただし、MicroPythonが起動する前にESP8266のファームウェアが出力するメッセージは72000bpsですので、その部分だけは文字化けします。
ちなみに、72000bpsで読み取ると以下のようなメッセージが出ていました。
load 0x40100000, len 31020, room 16 tail 12 chksum 0xd2 ho 0 tail 12 room 4 load 0x3ffe8000, len 1100, room 12 tail 0 chksum 0x9a load 0x3ffe8450, len 824, room 8 tail 0 chksum 0xbd csum 0xbd rf cal sector: 1019 freq trace enable 0 rf[112] : 00 rf[113] : 00 rf[114] : 01 SDK ver: 2.2.0-dev(9422289) compiled @ Nov 3 2017 19:40:08 phy ver: 1136_0, pp ver: 10.2 mode : softAP
WebREPLを使う
ESP8266版のMicroPythonには、WebブラウザからREPLにアクセスするWebREPLという仕組みがあります。
これを使うには、以下のような手順を踏みます。
(1)REPLから以下のコマンドでWebREPLを有効化(「E」を入力)する。(このあとパスワードの設定もあります。)
>>> import webrepl_setup WebREPL daemon auto-start status: enabled Would you like to (E)nable or (D)isable it running on boot? (Empty line to quit) >
(2)rebootするかと訊かれるので、yを入力してリブートする。(すると、MicroPythonの起動メッセージに「Started webrepl in normal mode」という表示が現れ、WiFi APが起動する。PCからはMicroPython-xxxxxxというAPがあるのが見えるはず)
(3)PCのブラウザからhttp://micropython.org/webrepl/にアクセスする(HTMLとJavaScriptを取得するため)。
(4)PCのWiFiを上記で確認したアクセスポイントMicroPython-xxxxxx(xxxxxxの部分は個体により異なる)へ接続する。WiFiのパスワードは「micropythoN」(最後のNだけ大文字)。
(5)上記(3)で開いたWebページのConnectボタンをクリックし、先ほど設定したパスワードを入力するとREPLに接続できる。
WebREPLを使ってESP8266との間でファイルのアップロード/ダウロードもできるようです。
インターネットに接続する
いつものASCII ART STAR WARSにつないでみました。
まず、WebREPLを使っているのであれば、再度
でDを入力してWebREPLを無効にしておきます。
>>> import webrepl_setup WebREPL daemon auto-start status: enabled Would you like to (E)nable or (D)isable it running on boot? (Empty line to quit) >
そして、以下のようにWiFi APへ接続する関数を定義します。(SSIDとパスワードは指定してください)
def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('YOUR-WIFI-AP-SSID', 'YOUR-PASSWORD') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig())
ペーストモード(CTRL-E)で上記を貼り付け、CTRL-Dで抜けると読み込まれます。
これで以下のようにするとSTAR WARSサイトに接続できます。
>>> do_connect() #5 ets_task(4020f4d0, 28, 3fff9e30, 10) connecting to network... network config: ('192.168.0.105', '255.255.255.0', '192.168.0.1', '192.168.0.1') >>> import socket >>> addr_info = socket.getaddrinfo("towel.blinkenlights.nl", 23) >>> addr = addr_info[0][-1] >>> s = socket.socket() >>> s.connect(addr) >>> while True: ... data = s.recv(500) ... print(str(data, 'utf8'), end='') ... ... ...
無事表示されました。速度もそこそこ高速です。
コメント