ESP32でJupyter notebookを使う。

ESP32のMicroPythonでJupyter notebookを使えるようにしてみます。macOSの環境を前提に記しますが、WindowsやLinuxでもほぼ同様の操作で設定できると思います。

Step0: 前提

  • 作業用PCにPython3がインストールされていること。

Step1: MicroPythonをESP32にインストールする。

まず作業用のディレクトリを作ります。以下の説明では/workspace/micropythonをカレントディレクトリとして説明します。

$ cd /workspace
$ mkdir micropython
$ cd /workspace/micropython

ESP32用のMicroPythonをMicroPython downloadsから入手します。2019/6/16 現在の最新版はesp32-20190616-v1.11-45-g14cf91f70.binです。

esptoolをインストールします。

$ pip install esptool

この時点でESP32をPCとUSBで接続します。ESP32ならなんでも良いですが、ここではAdafruitのHUZZAH32を使います。公式開発ボードのESP32-DevKitCだとオンボードのLEDが付いていないので説明しづらいという理由です。

Adafruit HUZZAH32

シリアルデバイスのデバイス名を確認しておきます。私のmacOSの場合は/dev/tty.SLAB_USBtoUARTでした(macOSだとたいていこれになっているはずです)。

次にESP32内蔵のフラッシュメモリのクリアして、先ほどダウンロードしたMicroPythonのファームウェアをESP32に書き込みます。書き込み時のボーレートは最大の921600としましたが、実行環境によっては減速しないと書き込みに失敗するかもしれません。

$ esptool.py --port /dev/tty.SLAB_USBtoUART erase_flash
$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART --baud 921600 write_flash -z 0x1000 esp32-20190616-v1.11-45-g14cf91f70.bin

Step2: MicroPython用のJupyterカーネルのインストール

まずJupyter Documentationにアクセスします。このページ内にある「Kernels」の箱の中の「Community maintained kernels」リンクを辿ります。

一覧表にMicroPythonがあることを確認してください。

詳細はこのリンクの先に書いてあるのですが、私の環境では途中でエラーになるで、以下では成功した処理手順を記します。
まずカレントディレクトリにMicroPython用のJupyterカーネルをクローンしたのち、git updateが可能にするためのライブラリをインストールします。

$ git clone https://github.com/goatchurchprime/jupyter_micropython_kernel.git
$ pip install -e jupyter_micropython_kernel

次にJupyterをアップグレードしておきます。これをやらないと私の環境では次の処理が失敗しました。

$ pip install --upgrade jupyter

最後にJupyterカーネルをインストールします。

$ python -m jupyter_micropython_kernel.install

これでインストールは完了です。ちゃんとインストールされているか確認してみます。micropythonが見えていますね($HOMEの部分は実際のホームディレクトリのパス名が入ります)。

$ jupyter kernelspec list
Available kernels:
  micropython    $HOME/Library/Jupyter/kernels/micropython
  python3        $HOME/.pyenv/versions/3.7.3/envs/jupyter/share/jupyter/kernels/python3

Step3: Jupyter notobookの実行

コマンドラインで以下を実行します。正常にインストールされていれば、ブラウザが起動するはずです。ここで新しいノートブックを作ってみます。右上にある「New」のボタンを押して、「Micropython-USB」選んでください。

$ jupyter notebook

最初のセルに「%serialconnect to --port=/dev/tty.SLAB_USBtoUART --baud=115200」と入力し、メニューの「Run」ボタンを押すか、セル内でShift+Returnを押します。するとESP32のシリアルへの接続が行われ、「Ready」と表示されます。

 

以下、InのセルにMicroPythonのプログラムを書き込んで実行すると、実行結果がすぐに表示できます。また書き込み済みのセルの内容を書き換えても、再度実行すれば最新の実行結果で書き換わります。 試しにprint(‘Hello, ESP32’)と打ってみましょう。

次にLチカしてみます。以下のプログラムをセルに貼り付けます。HUZZAH32の場合、LEDがGPIO13に繋がっているので、Pin(13, Pin.OUT)とします。他のGPIOポートの場合は適宜番号を変えてください。

from machine import Pin
from time import sleep
led = Pin(13, Pin.OUT)
for i in range(5):
    led.on()
    sleep(0.5)
    led.off()
    sleep(0.5)

プログラムが正しければ、ボード上のLEDが5回点滅したと思います。あとは適当にsleep(0.5)の数字を変えてみて、点滅間隔を変えてみてください。

実行元がESP32上のMicroPythonであること以外はJupyter notebookの機能が使えます。例えば先ほど貼り付けたLチカプログラムの上にセルを追加して、マークダウン形式でプログラムの説明を追加してみます。

このように、ブラウザのページ内で文章とプログラムと実行結果(しかもすぐに更新可能)をまとめておくことができるのが特徴です。自身の研究を整理するのに便利です。また他人に説明する場合もパラメータを少しずつ変えながらその場で結果を提示できたりするので、インタラクティブな議論も可能です。活用しない手はないですね。

投稿者: けむしろう

プログラミング、サーバ構築、電子工作、旅行が好きです。

コメントを残す

メールアドレスが公開されることはありません。