2021年4月11日日曜日

MicroPython ESP32 Memo 〜Build MicroPython〜

 ■概要

MicroPythonのbinaryファイルダウンロードしてを書き込んだら動いた!
ので、今度はMicroPythonをビルドしたい!

ので、MicroPythonをgitから持ってきて、ビルドして、binaryファイル作って、ボードで動かすまで。

■環境

  • PC : Mac OS Catalina
  • Board : ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32

■手順

基本的に、MicroPythonの公式の通り。

まず、Gitからソースコードを取得する。
Git Hubのアカウントを持ってなかったら、作成しておく必要あり。
PCにgitをインストールしておく必要あり。
  1. 公式のmicropythonリポジトリをforkする。
    1. Git Hubにログイン(ブラウザから)
    2. ログインしたら、Search or Jump to... で「micropython/micropython」を検索して、公式のMicroPythonリポジトリにアクセス。
    3. 「fork」ボタンを押して、自分のリポジトリに公式のMicroPythonリポジトリをforkする。
    4. 自分のアカウントにmicropythonリポジトリができていることを確認する。
      自分のmicropythonリポジトリURL :
      https://github.com/<your-user-name>/micropython」
  2.  ローカルにプロジェクト(ソースコード etc.)をcloneする。
    1. terminalでmicropythonのソースコードを保存するところに移動する。
      「cd project」(projectフォルダに入れる場合)
    2. 自分のmicropythonリポジトリからプロジェクトをcloneする。
      「git clone https://github.com/<your-user-name>/micropython」
  3. 公式のmicropythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
    (公式のMicroPythonリポジトリで更新された内容を、自分のmicropythonリポジトリが追従できるようにする設定)
    (※ 上流ブランチと追跡ブランチの説明
    1. terminalで、cloneしたmicropythonフォルダに移動
      「cd micropython」
    2. 公式のMicroPythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
      「git remote add upstream https://github.com/micropython/micropython」
      (※ 多分、upstream xxxx で、xxxxが上流ブランチであることを教えてる?)
      (※ この設定で、「git pull」により公式のMicroPythonリポジトリの変更を反映できるようになる?気がする。ちなみに、pullは、fetchしてmergeするのと同じことらしい(fetchとpullの違い)。)
    3. 上流ブランチを設定できたか確認。
      「git remote -v」
      以下のような表示が出るはず。
      「origin       https://github.com/<your-user-name>/micropython (fetch)
      origin       https://github.com/<your-user-name>/micropython (push)
      upstream     https://github.com/micropython/micropython (fetch)
      upstream     https://github.com/micropython/micropython (push)」
  4. 作業用branchを作成する。
    1. terminalで、cloneしたmicropythonフォルダに移動
    2. 作業用branchを作成して、作業用branchに切り替える。
      (develop-branch というbranchを作成して、master→develop-branch に切り替え)
      「git checkout -b develop-branch」
次に、クロスコンパイルに必要なソフトウェアパッケージをインストールする。
公式のMicro Python on MacOSを参考にした。
  1. Xcodeが入ってなければ入れる。(clang コンパイラを入れるため)
  2. 必要なソフトウェアパッケージをインストール。
    「brew install libffi」
    「brew install pkgconfig」
    Pythonをインストールしてなければ、Python3.3以上をインストール。
    Gitもインストールしてなければインストール。
次に、クロスコンパイラをビルドする。
  1. terminalで、cloneしたmicropythonフォルダに移動。
    (すでにいる気がするなぁ)
    「cd micropython」
  2. クロスコンパイラをビルドする。
    「export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.2.1/lib/pkgconfig/」
    「make -C mpy-cross」
    (※ home brewでlibffiを入れたので、export PKG_CONFIG・・・が必要。)
  3. クロスコンパイラのビルドが成功したら、
    micropython/mpy-crossフォルダの中に、
    mpy-cross.map, build, mpy-cross ができてる。
そしてついに、micropythonをビルドする!
が、まずは手始めに、unix用をビルドする。
Mac上で動かすことが可能なmicropythonが出来上がるはず。
  1. 「cd micropython/ports/unix」
  2. 「make axtls」
    (※ axtlsは、少量のメモリフットプリントの高度な設定インターフェイスで組み込みデバイス向けに設計されたTLSv1 SSLライブラリ。)
    結構時間かかる。
  3. micropython (unix用)をビルドする
    「make」
    結構時間かかる。
  4. ビルドが完了すると、micropython/ports/unix 以下に、build-standard, micropython フォルダなどが追加されている。
  5. micropython (unix用)を動かす。
    「./micropython」
    実行すると、以下のように、>>> が表示されて、おなじみのpythonっぽい表示が!

    「unix % ./micropython 

     MicroPython v1.14-152-g6f06dcaee on 2021-04-12; darwin version

     Use Ctrl-D to exit, Ctrl-E for paste mode

     >>>        」


ほんとについに!micropython ESP32用をビルドする。
が、今までのはunix用の環境設定+ビルド方法だったみたい。
ESP32用をビルドするためには、ESP32に合わせた環境設定からはじめないといけない。
公式のmicropython ESP32のREADMEにしたがって進める。

というわけで、micropython ESP32用の環境設定を行う。
まずは、esp32の開発環境のEspressif IDF version 4 をインストールする。
Espressif IDFを略して ESP-IDF と言ってるっぽい?
ESP-IDF のプログラミングガイドに、MacOSの場合のインストールの方法が書いてあったので、これ参考にする。micropython ESP32のREADMEよりも詳しく書かれてるし。
(pip, python, homebrew はインストールずみとする。)
  1. 事前準備として必要なパッケージをインストール
    「brew install cmake ninja dfu-util」
    「brew install ccache」
  2. ESP-IDFをclone
    (※ micropythonをcloneしたディレクトリと同じ階層にclone)
    (※ 2021/04/14現在、安定版の最新がv4.2)
    「git clone -b v4.2 --recursive htps://github.com/espressif/esp-idf.git」
  3. ESP-IDFをインストール
    「cd esp-idf」
    「./install.sh」
    → エラーが出た。。。Python2.7がカレントバージョンになってるのがダメらしい。
     Python3をカレントバージョンにして実行するとよい。(参考 : macOS Catalina zsh環境でpyenvを使ってPython 3.9.0をインストール)
    「source export.sh」
    (※ idf.py が使えるようになったよ!と表示されるが、よくわからん)
  4. micropythonをビルド
    1. cloneしたmicropythonフォルダに移動
      「cd ../micropython」
    2. クロスコンパイラをビルド
      「make -C mpy-cross」
    3. ESP32のソースコードが置いてあるところに移動
      「cd ports/esp32」
    4. サブモジュールをビルド
      (サブモジュールをアップデートしているだけ?)
      「make submodules」
    5. ESP32 micropythonをビルド
      「make」
    6. ESP32 micropythonがビルドてきたかどうかを確認する
      「ls」で、「build-GENERIC」フォルダができていることを確認。
      「ls build-GENERIC」で、firmware.bin ができていることを確認。
      できてればOK !!!
バイナリファイル ができたので、動作確認をする。
MicroPython ESP32 Memo 〜FW書き込み〜 に書いた方法で、作成したfirmware.bin を書き込むことができる。
MicroPythonの公式(MicroPython Internals Getting Started)には、idf.pyを使った書き込み方法が書かれているので、こちらの方法を試してみる。
(ただ、idf.pyは、中でesptool.pyを使って書き込んでいるだけなので、やっていることは同じはず?)
  1. cloneしたmicropythonフォルダのports/esp32に移動
    (上から続けてれば何も操作はいらないはず?)
  2. ESP32ボードをUSBでPCと繋ぎ、接続されたポートを調べる。
    「ls -l /dev/tty.usb*」
    (/dev/tty.usbserial-xxxx につながっていたと仮定する)
  3. ESP32ボードのflashをクリアする。
    「make erase PORT=/dev/tty.usbserial-xxxx」
    (※ 引数にPORT=xxxxをつけることで、ターゲットのポートを設定できる。
       デフォルトは/dev/ttyUSB0 となっているため、ちゃんとポート指定しないとエラーになる。)
  4. EPS32ボードにファームウェアを書き込む
    「make deploy PORT=/dev/tty.usbserial-xxxx」
    (※ make と実行すると、idf.pyが実行されるようになっている。
       idf.pyを直接使い方法もMicroPythonの公式HPに書かれている)
(※ [補足]
idf.pyで書き込む時、書き込まれるバイナリファイルは、build-GENERICフォルダ内の、partition_table/partition-table.bin(WriteAddress:0x8000〜)、bootloader/bootloader.bin(WriteAddress:0x1000〜)、micropython.bin(WriteAddress:0x10000〜)の3つ。
firmware.binはこの3つを合わせたバイナリファイルとなっている。 )

書き込んだら、「screen <USBport> 115200」で接続し、Pythonおなじみの
>>> 
が表示されることを確認した。

やった!できたよ!

0 件のコメント:

コメントを投稿