MicroPython + Jupyter 環境のセットアップ

はじめに

本ドキュメントは, すでに ESP-IDF 環境がインストールされており, esptool.py などのコマンドが使える状態にあることを前提としている.

ESP-IDF 環境のセットアップについては, ESP-IDF と mrubyc 環境のセットアップを参照されたい.

Jupyter notebook のインストール

MicroPython の開発環境として Jupyter をインストールする.

  • 必要なパッケージと jupyter をインストールする.

    $ sudo pip3 install numpy scipy matplotlib Pillow ipython
    $ sudo pip3 install jupyter
  • 確認. ブラウザで Jupyter notebook が開けるか確認する.

    $ jupyter notebook

Jupyter の micropython 対応

Jupyter Documentation にアクセスし, このページ内にある「Kernels」の箱の中の「Community maintained kernels」リンクを辿る. そうすると, 一覧表に MicroPython のカーネルが存在することが確認できる. リンクをたぐると, インストール方法の詳細が表示される. 以下はその抜粋である.

  • GitHub より必要なリポジトリを取得

    $ git clone https://github.com/goatchurchprime/jupyter_micropython_kernel.git
  • インストール

    $ pip3 install -e jupyter_micropython_kernel
  • Jupyter をアップグレード.

    $ pip3 install --upgrade jupyter
  • Jupyter カーネルをインストール

    $ python -m jupyter_micropython_kernel.install
  • Jupytrer の起動

    $ jupyter notebook
  • New のところに,「MicroPython - USB」が新たに表示されていることを確認する.

動作確認

ESP32 マイコンの教育ボードを PC に接続する. デバイス名は /dev/ttyUSB0 とする.

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

<URL:https://micropython.org> の「Download」より, MicroPython のファームウェアをダウンロードし, それを ESP32 内蔵のフラッシュメモリに書き込む. 書き込む前に内蔵のフラッシュメモリをクリアする必要がある.

  • ダウンロードする.

  • ファイルを ~/micropython ディレクトリ以下に置いておく.

    $ cd ~/micropython
    
    $ cp ~/ダウンロード/esp32-idf3-20191220-v1.12.bin ./
  • 内蔵のフラッシュメモリのクリア

    $ esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
  • 内蔵のフラッシュメモリへのファームウェアの書き込み

    $ esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

Jupyter での L チカ

  • jupyter notebook を起動し, New で「MicroPython - USB」を選択する.

    $ jupyter notebook

  • 最初のセルで以下を入力. 上段の Run ボタンを押すか, シフトキーとエンターを一緒に押すと, 入力した内容が実行される.戻り値が表示されるので, エラーが発生していないことを確認すること.

    %serialconnect to --port=/dev/ttyUSB0 --baud=115200

  • L チカをする. LED の 1 番目は GPIO 13 なので, それを 5 回点灯させる.

    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)