Edited at

BLE対応版MicroPython for ESP32をmacOSでビルドしてみる

More than 1 year has passed since last update.

この記事はMicroPython Advent Calendar 2017の3日目の投稿です。昨日は ken5owataさん投稿のmicropythonをはじめよう(STM32F401編)でした。

小ネタですがご容赦を。

まだ正式にはBluetoothがサポートされないESP32のMicroPythonですが、インターフェース誌2018年1月号にBLEをサポートしたMicroPythonビルドの記事が載っていました。記事サンプルからも大体の手順はわかるかと思います。インターフェース誌の記事では Ubuntu で作業していますが、ここでは私のメイン環境である macOS 上でビルドしてみます。

ESP32のボードはインターフェース誌の記事と同じESP32-DevKitCを使いました。


ツールチェーンの取得と設定

ESP32の開発環境の情報は以下にあります。

https://github.com/espressif/esp-idf

macOS用のツールチェーン導入方法は以下にあります。

https://esp-idf.readthedocs.io/en/latest/get-started/macos-setup.html

これにしたがって、macOS用のツールチェーンをダウンロードして展開します。

$ mkdir ~/esp

$ cd ~/esp
$ curl https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-75-gbaf03c2-5.2.0.tar.gz -O
$ tar zxf xtensa-esp32-elf-osx-1.22.0-75-gbaf03c2-5.2.0.tar.gz

~/.bashrc に以下を追加します。

export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin


ESP-IDFの取得と設定

ESP-IDFの導入方法は以下に説明があります。

https://esp-idf.readthedocs.io/en/latest/get-started/index.html#get-started-get-esp-idf

これにしたがって、github より ESP-IDF を clone します。

$ git clone --recursive https://github.com/espressif/esp-idf.git

~/.bashrc に以下を追加します。

export ESPIDF=~/esp/esp-idf

export IDF_PATH=~/esp/esp-idf


MicroPythonソースの取得

MicroPython 本家のソースではなく、インターフェース誌の記事の著者である西本卓也さんが公開しているものを github から clone します。これは本家 MicroPython に対して MrSurly さんがプルリクエストしていたものを取り込み、パーティション定義を変更したものとのことです。

$ git clone https://github.com/micropython/micropython-lib.git

$ git clone --recursive https://github.com/nishimotz/micropython-esp32.git


利用するESP-IDFリビジョンのチェックアウト

以下を実行して、利用するESP-IDFのリビジョンを調べます。

$ cat micropython-esp32/ports/esp32/Makefile | grep ESPIDF_SUPHASH

ESPIDF_SUPHASH := 2c95a77cf93781f296883d5dbafcdc18e4389656
ifneq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH))
$(info Supported git hash: $(ESPIDF_SUPHASH))
$(ECHO) "ESP IDF supported hash: $(ESPIDF_SUPHASH)"

ESPISF_SUPHASH の値が 2c95a77cf93781f296883d5dbafcdc18e4389656

あることがわかったので、この値でチェックアウトを行います。

$ cd esp-idf

$ git checkout 2c95a77cf93781f296883d5dbafcdc18e4389656
$ git submodule update --init --recursive
$ cd ..


MicroPython のビルド

$ cd micropython-esp32

$ make -C mpy-cross
$ cd ports/esp32
$ make


ESP32-DevKitCへの書込み

ESP32-DevKitC とMacをmicroUSBケーブルで繋ぎます。ポートは私の環境では /dev/tty.SLAB_USBtoUART になりました。このポートを指定して、以下で書込みます。

PORT=/dev/tty.SLAB_USBtoUART make erase

PORT=/dev/tty.SLAB_USBtoUART make deploy


動作確認

とりあえず、ターミナル.app を開いて screen コマンドでシリアル接続して REPL が起動するかを確認します。

$ screen /dev/tty.SLAB_USBtoUART 115200

REPLのプロンプト >> が現れ、キーボードからの入力が受け付けられればOKです。

スクリーンショット 2017-12-02 23.16.15.png

screen コマンドを抜けるには control-a k とします。


Lチカっぽいこと

ESP32-DevKitC のIO32, 33, 25 にLEDを繋いで出力を試してみました。以下をmain.pyというファイル名で作成します。

import machine as m

import time

led_r = m.Pin(32, m.Pin.OUT)
led_y = m.Pin(33, m.Pin.OUT)
led_b = m.Pin(25, m.Pin.OUT)

while True:
led_r.value(1)
time.sleep(1)
led_r.value(0)
led_y.value(1)
time.sleep(1)
led_y.value(0)
led_b.value(1)
time.sleep(1)
led_b.value(0)

MicroPython へのスクリプト転送に、私は adafruit-ampy をよく使っています。これはシリアル経由で MicroPython のファイルシステムにファイルを書き込むためのものです。Python3.xを使っている場合は以下でインストールします。

$ pip3 install adafruit-ampy

ファイル転送は以下で行います。

$ ampy -p /dev/tty.SLAB_USBtoUART put main.py

転送のあと、RESETボタンを押すとプログラムが起動して、3つのLEDが順番に点滅します。

IMG_4233.JPG


さて

BLE はどうしたんだと言われそうですが、インターフェースのもの試したもの出しても営業妨害になりそうなので、別ネタで次回に。