寝台急行はまなす

札幌駅 22:00発 増結12両編成 青森行き

micropythonをはじめよう(ESP32編)

ESP32が国内発売されるようになり半年以上が立ちにわかにmicropythonが取り上げられるようになってきました。

以下の記事や今月号のトラ技でも記事が書かれています。 

 

makezine.jp

 

ESP32のファームウェアは夏ごろから公式サイトで公開され自分でビルドする必要もなくなり、今では書き込みツールでファームウェアを書くだけで手軽にmicropythonをスタートできるようになりました。

改めてファームウェアの書き込みと公式ドキュメントのチュートリアルをちょこっとやってみたいと思います。

 

※micropythonのファームウェアをESP32に書き込むことで技適の認証に抵触する可能性があります。あくまで自己責任でお願い致します。

 

ファームウェアの書き込み

何はともあれファームウェアを公式から落とします。

MicroPython - Python for microcontrollers

 

f:id:ken5owata:20171018230635p:plain

 

次に書き込みツールをインストールします。

GitHub - espressif/esptool: ESP8266 and ESP32 serial bootloader utility

# pip install esptool

 

Windowsの人はメーカのGUIツールでも構いません。

Tools | Espressif Systems

 

ツールを適時インストールしたら、ファームウェアを書き込みます。

esptoolの場合はこんな感じです。

# esptool.py --port COM4 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 esp32-20171006-v1.9.2-276-ga9517c04.bin

 

f:id:ken5owata:20171018231914p:plain 

 

CLIGUIも0x1000にファームウェアを書き込みます。

ファームウェアに書き込みが正常に終了したら、teratermやscreenコマンドでシリアルポートにアクセスします。

micropythonのREPLが開きコードを入力→実行ができます。

 

f:id:ken5owata:20171018232720p:plain

 

チュートリアル

micropythonには公式ドキュメントがあります。

ESP32のドキュメントはないのですがほぼ同じのESP8266のものに沿ってチュートリアルを進めていきます。

 

MicroPython tutorial for ESP8266 — MicroPython 1.9.2 documentation

 

・Lチカ

>>> from machine import Pin
>>> p = Pin(4, Pin.OUT)

>>> p.value(1)
>>> p.value(0)

 

・ADC

>>> pin32 = Pin(32, Pin.IN)
>>> adc = machine.ADC(pin32)
>>> adc.read()

 

・ファイル操作

>>> f = open('data.txt', 'w')
>>> f.write('micropython')
11
>>> f.close()
>>>
>>> import os
>>> os.listdir()
['boot.py', 'data.txt']
>>>

>>> f = open('data.txt', 'r')
>>> f.read()
'micropython'
>>> f.close()
>>>

>>> os.remove('data.txt')
>>> os.listdir()
['boot.py']
>>>

 

・neopixel

>>> import machine
>>> import neopixel

>>> pin = machine.Pin(4, machine.Pin.OUT)
>>> np = neopixel.NeoPixel(pin, 20)
>>> np[0] = (255, 0, 0)
>>> np[1] = (0, 128, 0)
>>> np[2] = (0, 0, 64)
>>> np.write()

 

 

wifi接続

>>> import network
>>> sta_if = network.WLAN(network.STA_IF)

>>> sta_if.active(True)

>>> sta_if.scan()

>>> sta_if.connect('ssid', 'password')

>>> sta_if.ifconfig()

 

・ソケット

>>> 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='')

 

f:id:ken5owata:20171021000904p:plain

 

スターウォーズのAAが流れ続けるのでCtl+Cで止めましょう。

 

さてここまではREPLでコードを実行してきました。

自作したプログラム(pyファイル)を実行する場合はツールでファイルを転送します。

以下のコマンドでツールを入れます。

# pip install adafruit-ampy

 

adafruitが出しているこのampyツールにはget、ls、put、rmなどのコマンドがありポートを指定してファイルを転送したり削除したりします。 

ダウンロードしたファームウェアはboot.pyファイルしかない状態です。

boot.pyファイルは起動時に1回のみ実行されるファイルです。

 

>>> import os
>>> os.listdir()
['boot.py']
>>>

 

永続的にプログラムを実行させる場合はmain.pyを作成してampyツールで送り込みます。

boot.pyとmain.pyはArduinoでいうところのsetupとloop関数というわけですね。

 

# ampy -p COM4 ls

# ampy -p COM4 put main.py

 

以上、簡単な紹介でした。

ぜひ皆さんもmicropythonで遊んでみましょう!