Micropython導入でてこずった話

## 初めに
みんなさん初めまして。
夏休みに入り暇なので、先日思っていたよりも手こずってしまったMicropyhonの導入をここに記そうと思います。こういうものを書くのは初めてなので温かい目で見ていただければ幸いです💦

## 動機
最近のマイブームはesp32なのですが、センサなどで取得した値をesp32からパソコンのpythonの方に渡せないかと模索していたところ、参考にさせてもらった記事の大方がmicropythonを使っていたのでその導入に至りました。もともとmicropythonの存在は知らなかったのですが、調べてみるとなかなかに便利そうでどうやらwebサーバの構築も簡単になるらしいのでわくわくしております。

## 必要なもの


* ターミナル 
* マイコン 
:::note info
私はwindowsのターミナル,esp32-wroom-32を使いました。途中までubuntuでやっていたのですが、導入途中のポート設定の部分で躓いてしまったため、途中でwindowsの方のターミナルに切り替えました。このことも後述しております。
:::

## Step0
Googleなどの検索エンジンで *"Micropython導入方法"* と調べると[こちら](https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html "Read the Docs")に導入手順が書いてありますので、私はそちらを参考にさせて頂きました。

## Step1
Micropythonの公式サイトから、使用するボードに適したファームウェアをパソコンにダウンロードしましょう。リンクは[こちら](https://micropython.org/download/ "Micropython Downloads")です。リンクにアクセスすると、ボードの種類を選ぶ画面が出てくるので頑張って自分の使うボードを探しましょう。私の場合はESP32/WROOM (Espressif)を選びました。このアイコンをクリックし、ページをスクロールしていくと **Firmware**と書かれた見出しの下にダウンロードリンク(画像の黄色マーカ)があるのでそれをクリックしファームウェアをダウンロードしましょう。Step1はこれで完了です。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876998/8d19687e-ab8d-1905-f039-305355171fab.png"><img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876998/2cd90a92-20a6-7d43-6e51-3449a54c479b.png">

## Step2
ファームウェアをパソコンにダウンロードした後はターミナル上でコマンドを使って使用するマイコンにそのファームウェアを導入するだけなのですが、ここから先の手順で手こずってしまいました。次は[こちら](https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html "Read the Docs")にある通り、マイコンにファームウェアを導入するためのツールであるesptool.pyをインストールするために下のようなコマンドを打ちます。
```ruby:ターミナル
pip install esptool
```
::: note warn
このコマンドを実行する前にpythonがインストールされている必要があります
:::
::: note info
pythonがインストールされていれば、ubuntu/windowsどちらのターミナルでも実行できます
:::

esptool.pyをインストールした後、そのインストールを確認するためには次のようなコマンドを打ちます。
```ruby:ターミナル
esptool --version
```
::: note info
こちらも同様、ubuntu/windowsどちらのターミナルでも実行できます
:::
その後次のようなメッセージが出ていなければ、esptoolのダウンロードに成功しています。
```ruby:ターミナル
"esptool.pyは、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはパッチファイルとして認識されていません"
```
::: note alert
参考にしていた[こちら](https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html "Read the Docs")やChat GPTでは、esptoolを使うときは
```ruby:ターミナル
esptool.py --version
```
のように書きましょうと書いているのですが、何度そのコマンドを打っても自分のターミナル上では *"esptool.pyは、操作可能なプログラムとして....."* と出てきてしまい、ダウンロードはできているのにツールは使えない状態でした。esptoolやpythonのアップデートが関係しているのでしょうか?原因はともかくお使いのターミナルに合わせて *esptool* と *esptool.py* を使い分ければ良いと思います。
:::
このesptool.pyが使えない問題を解決するのに結構な時間がかかりましたがここからはトントン拍子でことが進んでいったので、気分爽快というやつです😊

## step3
esptoolのダウンロードが終わたら、お使いのパソコンとマイコンを接続しましょう。接続後、お使いのパソコンでデバイスマネジャーを起動させて接続したマイコンのポートがCOM何か調べましょう。私の場合はCOM9でした。そして、esp32にファームウェアを導入する前準備として次のコマンドでフラッシュ全体を消去します。 *COM9* の部分は自分で調べたCOMに合わせましょう。
```ruby:ターミナル
esptool --chip esp32 --port COM9 erase_flash
```
::: note info
Linux系のパソコンや仮想環境でUbuntuを使っている場合、ポートはCOMでなく/dev/ttyUSBと書かなければエラーが出てしまいます。自分は何とかCOM9に対応する/dev/ttyUSBを探そうとしましたが無理だったのであきらめてwindowsターミナルでCOMと書きました。
:::
--chipの後に続く *"esp32"* という部分はお使いのボードに合わせ、変更してください。例えば、esp32s3など。ボードの種類が違った場合は、あなたのボード多分これじゃない?みたいなメッセージが出てくると思います。
フラッシュを消去した後、最後の手順として次のコマンドの青色の部分を書き換えて実行すればesp32にファームウェアを導入することが出来ます。
```ruby:ターミナル
esptool --chip esp32 --port COM`ポート` write_flash -z 0 `ファイル名`
```
::: note alert
注意点
* ダウンロードしたファームウェアのファイルをターミナルのカーレントディレクトリと同じ場所に移動させましょう
* 引数-zの後の数字は、[こちら](https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html "Read the Docs")にある通りの0x1000ですると、後にthonnyなどでReplを使う場合に、エラーが発生してしまうので0にしましょう
:::

コマンドを実行した後、
```ruby:ターミナル
`esptool write_flash:error:argument......`
```
ではなく
```ruby:ターミナル
`Leaving...
Hard resetting via RTS pin...`
```
というようなメッセージが表示されれば導入は成功です。これで晴れてMicropythonを使うことが出来きます。

## 終わりに
ここまで読んでいただきありがとうございました。自分はこの導入に丸半日近く費やしてしまいました😇
皆さんはどうだったでしょうか??もしわからないことがあればぜひ質問してくださいね。
さて無事Micropythonの導入が終わったということで、次はマイコンにpythonのファイルを書き込むために必要なThonnyの導入を解説しようと思います。