Macを使い、ESP32のMicroPythonでLチカします
Windowsでやるときも、Pythonとesp32ツールチェインがインストールされていれば同じです。
以前の記事のESP32 DevKitC互換ボードを使いました。どんなボードでもいけます。
「MacでESP32のLチカ(Arduino IDE版)」
https://qiita.com/naohiro2g/items/b8baa3f0e1a880ae9d0a
「MacでESP32のLチカ(ESP-IDF版)」
https://qiita.com/naohiro2g/items/79c99eac5254be1d051d
予告:(続いて、VS Code + Pymakrでの使い方を書きます。)
esptool.pyを準備
esptoolが必要なので、インストール、あるいはアップデートしておきます。(2020-04-12現在、v2.8)
パス、バージョンを確認
which esptool.py
esptool.py version
アップグレード
python3 -m pip install --upgrade esptool
v2.4からは自動で接続ポートを探してくれるので、一応試してみる。
esptool.py flash_id
だめなら、続きを。
接続USBポートを確認
ls /dev/tty.*
:
:
/dev/tty.SLAB_USBtoUART
:
ポートが見えなければ、ドライバーをインストール。
SiliconLab CP2102(USB-UARTブリッジ)の場合
https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
とりあえず、つないでみる
screen /dev/tty.SLAB_USBtoUART 115200
(参考)まっさらの場合、REPLではなくてSSC、Simple Serial Commandのプロンプトが表示される。
:>
コマンド例
reboot
op -Q # Query WiFi mode
op -S -o 1 # STA Station mode
op -S -o 2 # AP Access Point mode
op -S -o 3 # STA+AP
MicroPythonのファームをダウンロード
2020-04-12現在、ESP-IDF3.xベース版とESP-IDF4.xベース版があります。ただし、4.xベース版はWiFi接続できず、BLEのみなので注意。
通常版、SPIRAM対応版、TinyPICO版、それぞれの安定版と最新ビルド版があるので適宜選択。TinyPICOは残念ながら技適なし。
ファームをESPボードに焼く
Flashの消去
初めてMicroPythonのファームを焼くときは、まずFlashを消去する。
esptool.py flash_id
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash
ファームの書き込み
好きなバージョンを選んでファームを焼く。
esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 460800 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin
Macのターミナルから接続確認
screen /dev/tty.SLAB_USBtoUART 115200
エンターキーを押す。
REPLが起動。ctrl-Dでソフトリブートする
>>>
MPY: soft reboot
MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32
Type "help()" for more information.
>>>
とにかく、Lチカ!
ESP32 DevKitC互換あるいはDOIT ESP32 V1の場合は、オンボードLEDがio2に接続されているので、REPLで以下のように書けばオッケー。
import machine
led = machine.Pin(2, machine.Pin.OUT)
led.value(1)
led.value(0)
led.on()、led.off()
でも良いです。
オンボードLEDがない場合、ESP32/io15 - LEDアノード(+, 足が長い) - LEDカソード(-、足が短い) - 470オーム抵抗 - ESP32/GNDの接続をします。
GPIOは、使っちゃいけない/使わない方が良い番号がかなりあるので、とりあえず、15, 22, 23あたりを使ってください。抵抗は、470オームから10Kオームであれば、何でも良いです。
REPLを使う
REPLから抜けるとき
CTRL-A K と入力、
Really kill this window [y/n] --> yで抜けます。
ペーストモード
CTRL-E でペーストモードに入り、CTRL-Dで抜けます。一度にたくさんコードを貼り付けるときに使用します。数行なら通常モードでも良いですが、調子に乗ってどんどん貼り付けているとうまく行かないときがあります。
help()で概要を確認
Lチカどころか、WiFiアクセスポイントへの接続を試す方法まで提示されます。英語ですが。
>>> help()
Welcome to MicroPython on the ESP32!
For generic online docs please visit http://docs.micropython.org/
For access to the hardware use the 'machine' module:
import machine
pin12 = machine.Pin(12, machine.Pin.OUT)
pin12.value(1)
pin13 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
print(pin13.value())
i2c = machine.I2C(scl=machine.Pin(21), sda=machine.Pin(22))
i2c.scan()
i2c.writeto(addr, b'1234')
i2c.readfrom(addr, 4)
Basic WiFi configuration:
import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan() # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected() # Check for successful connection
Control commands:
CTRL-A -- on a blank line, enter raw REPL mode
CTRL-B -- on a blank line, enter normal REPL mode
CTRL-C -- interrupt a running program
CTRL-D -- on a blank line, do a soft reset of the board
CTRL-E -- on a blank line, enter paste mode
For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
対応モジュールの確認
すべてのモジュールリストを表示
help('modules')
networkモジュールを調べる
help('network')
import network
dir(network)
あるいは、network. まで入力して、タブキーを押す。
machineモジュール、neopixelモジュールも同様。
オンラインドキュメント
https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/quickref.html
http://docs.micropython.org/en/latest/
(蛇足)なぜ、今、ESP32か
ESP8266の成功もあってデビュー前から人気が高かったESP32が日本で手に入るようになって、3年経過。期待に応えて地道に足場を固め続け、開発ボード/開発ツールを含めてコミュニティが成熟してきました。実際に使うと色々バグにぶつかって苦労するという話もありますが、開発ボードが非常に安価なのが強い。
WiFiに加えてBluetoothもあり、Arduinoとしても使えて、独自のC++開発環境もあり、おまけにMicroPythonも動く。処理能力もそこそこ高い。注意点としては消費電力。
処理能力がESP32の約6倍のTeensy 4.0の新登場は要注目ですが、WiFi/Bluetooth無しで価格が6、7倍程度なのでセグメントが違う。https://www.pjrc.com/teensy-4-0/
ESP32は、ラズパイと合わせて、Python入門、フィジカルコンピューティング入門に最適だと思います。