Magicode logo
Magicode
4 min read

esp32でmicropythonを動かしてみた

https://cdn.apollon.ai/media/notebox/e80fcde4-c91d-406d-aa5b-a4a11ff831dc.jpeg

はじめに

以前、esp32の開発環境をplatformioに移行したばっかりだが、micropythonも動かしてみたかったので、試してみた。

環境

手順

こちらを参考にした。
Pymakrの使い方が変わっていたので注意
  1. esp32にmicropython用のファームウェアを書き込む
  2. NodeJSのインストール
  3. Pymakrのインストール
  4. サンプル実行

1. esp32にmicropython用のファームウェアを書き込む

ファームウェアのダウンロード

micropythonのダウンロードページから自身のesp32環境に合わせてファームウェアをダウンロードする。
私は、esp32-20220618-v1.19.1.binをダウンロードした。

python環境整備

何かしらpython環境を用意する。自分は仮想環境作ったりするのめんどくさかったので、システムにインストールしていたpython 3.10.7でやってしまった。

書き込み用モジュールのインストール

esptoolというモジュールを利用する。pipもしくはcondaでインストールができる。
> pip install esptool
or
> conda install -c conda-forge esptool

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

まず、esp32とPCをUSBケーブルで接続する。
ケーブルを接続した状態で、デバイスマネージャー※を開いて接続しているポートを調べる。下図ではCOM8
※ 左下のスタートボタン(windowsアイコン)を右クリック > デバイスマネージャー
esp32のROMを削除する。
> esptool --port COM8 erase_flash
削除出来たらファームウェアを書き込む。
> esptool --chip esp32 --port COM8 write_flash -z 0x1000 esp32-20220618-v1.19.1.bin

2. NodeJSのインストール

VSCodeで開発を行う場合、Pymakrという拡張機能を使う。PymakrではNodeJSが必要になるのでNodeJSをインストールする。
NodeJSのページからインストーラーをダウンロードし、インストールするだけ。

3. Pymakrのインストール

VSCodeのExtensionの検索窓でpymakrを検索し、インストールする。

4. サンプル実行

pymakrの使い方は、参考のリンクとは変わっていたので、本家のGET_STARTEDを見ると良い。
VSCode左端のアクティビティバーにあるpymakrのアイコンを押し、表示されるCreate projectを押すとエクスプローラーが起動するので、好きな場所を選び Use this folder を押す。
project nameを入れてエンターを押す。
今回はとりえあずemptyを選択する。
esp32とつないでいるポートを選択する。
アクティビティバーにあるエクスプローラーを押し、main.pyを開く。
参考リンクにあるサンプルコードをコピペする。
import time
from machine import Pin

led = Pin(27, Pin.OUT)        

def run():
    for i in range(10):
        led.value(1)
        time.sleep(1)
        led.value(0)
        time.sleep(1)
アクティビティバーにあるpymakrのアイコンを押し、esp32と接続しているポートの名前のところにあるconnect device(雷みたいなアイコン)を押して、esp32と接続する。
接続している状態で、upload(雲に↑)を押すと、pythonファイルがアップロードされる。
ここで、参考リンクで用いているサンプルコードは、run()メソッドを定義し、その内部で処理をしている。そのため、アップロードするだけでは実行されない。(逆を言うと、グローバルにコードを書いていれば、アップロード時に実行される)
サンプルコードを実行するには、create terminal(□に>のアイコン)を押して、ターミナルを開き
>>> import main
>>> main.run()
とすることで実行できる。
わざわざターミナルから実行しないといけないので、基本はグローバルに書いてよいと思うが、面白かったので記載した。

Discussion

コメントにはログインが必要です。