Help us understand the problem. What is going on with this article?

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

More than 3 years have 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 はどうしたんだと言われそうですが、インターフェースのもの試したもの出しても営業妨害になりそうなので、別ネタで次回に。

inachi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away