■概要
MicroPythonのbinaryファイルダウンロードしてを書き込んだら動いた!
ので、今度はMicroPythonをビルドしたい!
ので、MicroPythonをgitから持ってきて、ビルドして、binaryファイル作って、ボードで動かすまで。
■環境
- PC : Mac OS Catalina
- Board : ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32
■手順
基本的に、MicroPythonの公式の通り。
まず、Gitからソースコードを取得する。
Git Hubのアカウントを持ってなかったら、作成しておく必要あり。
PCにgitをインストールしておく必要あり。
- 公式のmicropythonリポジトリをforkする。
- Git Hubにログイン(ブラウザから)
- ログインしたら、Search or Jump to... で「micropython/micropython」を検索して、公式のMicroPythonリポジトリにアクセス。
- 「fork」ボタンを押して、自分のリポジトリに公式のMicroPythonリポジトリをforkする。
- 自分のアカウントにmicropythonリポジトリができていることを確認する。
自分のmicropythonリポジトリURL :
「https://github.com/<your-user-name>/micropython」 - ローカルにプロジェクト(ソースコード etc.)をcloneする。
- terminalでmicropythonのソースコードを保存するところに移動する。
「cd project」(projectフォルダに入れる場合) - 自分のmicropythonリポジトリからプロジェクトをcloneする。
「git clone https://github.com/<your-user-name>/micropython」 - 公式のmicropythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
(公式のMicroPythonリポジトリで更新された内容を、自分のmicropythonリポジトリが追従できるようにする設定)
(※ 上流ブランチと追跡ブランチの説明) - terminalで、cloneしたmicropythonフォルダに移動
「cd micropython」 - 公式のMicroPythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
「git remote add upstream https://github.com/micropython/micropython」
(※ 多分、upstream xxxx で、xxxxが上流ブランチであることを教えてる?)
(※ この設定で、「git pull」により公式のMicroPythonリポジトリの変更を反映できるようになる?気がする。ちなみに、pullは、fetchしてmergeするのと同じことらしい(fetchとpullの違い)。) - 上流ブランチを設定できたか確認。
「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)」 - 作業用branchを作成する。
- terminalで、cloneしたmicropythonフォルダに移動
- 作業用branchを作成して、作業用branchに切り替える。
(develop-branch というbranchを作成して、master→develop-branch に切り替え)
「git checkout -b develop-branch」
次に、クロスコンパイルに必要なソフトウェアパッケージをインストールする。
公式のMicro Python on MacOSを参考にした。
- Xcodeが入ってなければ入れる。(clang コンパイラを入れるため)
- 必要なソフトウェアパッケージをインストール。
「brew install libffi」
「brew install pkgconfig」
Pythonをインストールしてなければ、Python3.3以上をインストール。
Gitもインストールしてなければインストール。
次に、クロスコンパイラをビルドする。
- terminalで、cloneしたmicropythonフォルダに移動。
(すでにいる気がするなぁ)
「cd micropython」 - クロスコンパイラをビルドする。
「export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.2.1/lib/pkgconfig/」
「make -C mpy-cross」
(※ home brewでlibffiを入れたので、export PKG_CONFIG・・・が必要。) - クロスコンパイラのビルドが成功したら、
micropython/mpy-crossフォルダの中に、
mpy-cross.map, build, mpy-cross ができてる。
そしてついに、micropythonをビルドする!
が、まずは手始めに、unix用をビルドする。
Mac上で動かすことが可能なmicropythonが出来上がるはず。
Mac上で動かすことが可能なmicropythonが出来上がるはず。
- 「cd micropython/ports/unix」
- 「make axtls」
(※ axtlsは、少量のメモリフットプリントの高度な設定インターフェイスで組み込みデバイス向けに設計されたTLSv1 SSLライブラリ。)
結構時間かかる。 - micropython (unix用)をビルドする
「make」
結構時間かかる。 - ビルドが完了すると、micropython/ports/unix 以下に、build-standard, micropython フォルダなどが追加されている。
- 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 はインストールずみとする。)
- 事前準備として必要なパッケージをインストール
「brew install cmake ninja dfu-util」
「brew install ccache」 - ESP-IDFをclone
(※ micropythonをcloneしたディレクトリと同じ階層にclone)
(※ 2021/04/14現在、安定版の最新がv4.2)
「git clone -b v4.2 --recursive htps://github.com/espressif/esp-idf.git」 - ESP-IDFをインストール
「cd esp-idf」
「./install.sh」
→ エラーが出た。。。Python2.7がカレントバージョンになってるのがダメらしい。
Python3をカレントバージョンにして実行するとよい。(参考 : macOS Catalina zsh環境でpyenvを使ってPython 3.9.0をインストール)
「source export.sh」
(※ idf.py が使えるようになったよ!と表示されるが、よくわからん) - micropythonをビルド
- cloneしたmicropythonフォルダに移動
「cd ../micropython」 - クロスコンパイラをビルド
「make -C mpy-cross」 - ESP32のソースコードが置いてあるところに移動
「cd ports/esp32」 - サブモジュールをビルド
(サブモジュールをアップデートしているだけ?)
「make submodules」 - ESP32 micropythonをビルド
「make」 - 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を使って書き込んでいるだけなので、やっていることは同じはず?)
- cloneしたmicropythonフォルダのports/esp32に移動
(上から続けてれば何も操作はいらないはず?) - ESP32ボードをUSBでPCと繋ぎ、接続されたポートを調べる。
「ls -l /dev/tty.usb*」
(/dev/tty.usbserial-xxxx につながっていたと仮定する) - ESP32ボードのflashをクリアする。
「make erase PORT=/dev/tty.usbserial-xxxx」
(※ 引数にPORT=xxxxをつけることで、ターゲットのポートを設定できる。
デフォルトは/dev/ttyUSB0 となっているため、ちゃんとポート指定しないとエラーになる。) - 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 件のコメント:
コメントを投稿