質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2731閲覧

Win10環境下、ESP32に導入したmicroPythonでampyが使えなくなりました。

BuhKeil

総合スコア34

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/08/14 01:30

編集2020/08/14 02:23

課題

ESP32にmicroPythonを組み込み後、ampyでファイル一覧を取得(lsコマンド)したり、アップロード(putコマンド)したりできなくなりました。(ESP32には何も結線していません)
ファイルを転送できるようにしたいです。

環境

[Software]
・Windows10 Pro (version=1909)
・microPython firmware (http://micropython.org/download/esp32/esp32-idf3-20191220-v1.12.bin)
・WinPython(64bit版)(pythonのバージョンは3.8.3)
(https://sourceforge.net/projects/winpython/files/WinPython_3.8/3.8.3.0/Winpython64-3.8.3.0.exe)
--> python -m pip install --upgrade pipで最新版に(version 20.2.2)
--> python -m pip install esptool (version 2.8)
--> python -m pip install adafruit-ampy (version 1.0.7)

[Hardawre]
・USBケーブル
・ESPr Developer 32 (https://www.switch-science.com/catalog/3210/)

[参考にした書籍]
IoT開発スタートブック(ESP32でクラウドにつなげる電子工作を始めよう)の第5章
ISBN:9784297107369

やったこと

  1. ESP32のメモリをフラッシュ

python -m esptool --port COM8 erase_flash

esptool.py v2.8
Serial prot COM8
Connecting...
Detecting chip type ...esp32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 3c:71:bf:79:ed:cc
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 8.8s
Hard resetting via RTS pin...

2.Firmwareの書き込み

python -m esptool --port COM8 --chip esp32 write_flash -z 0x0000 esp32-idf3-20191220-v1.12.bin

esptool.py v2.8
Serial port COM8
Connecting ...
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 3c:71:bf:79:ed:cc
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1247280 bytes to 787794...
Wrote 1247280 bytes (787794 compressed) at 0x00000000 in 70.0 seconds(effective 142.5kbit/s) ...
Hash of data verified
Leaving...
Hard resetting via RTS pin...

3.デバイスマネージャで、接続したESP32のCOMポート番号を確認
デバイスマネージャには直ぐにESP32のCOMポートが現れます。

4.ESP32内メモリのファイルリストを取得しようとした

ampy --port COM8 ls

ここで応答がなくなる。ケーブルを引き抜くと以下のメッセージが出る。

Traceback (most recent call last):

File "c:\wpy64-3830\python-3.8.3.amd64\lib\runpy", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,

File "c:\wpy64-3830\python-3.8.3.amd64\lib\runpy", line 87, in run_code
exec(code, run_globals)

File "c:\wpy64-3830\python-3.8.3.amd64\scripts\ampy.exe_main
.py", line 7, in <module>

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\click\core.py", line 829m in call
return self.main(*args, **kwargs)

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\click\core.py", line 782, in main
rv = self.invoke(ctx)

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\click\core.py", line1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\click\core.py", line 1066, in invoke
return ctx.invoke(self.callback, ※※ctx.params)

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\click\core.py", line 610, in invoke
return callback(*args, **kwargs)

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\ampy\cli.py", line 194 in ls
for f in board_files.ls(directory, long_format=log_format, recursive=recursive):

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\ampy\files.py", line 162, in ls
self._pyboard.enter_raw_repl()

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\ampy\pyboard.py", line 189, in enter_raw_repl
data = self.read_until(1, b'raw REPL; CTRL-B to exit\r\n')

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\ampy\pyboard.py", line 162, in read_until
elif self.serial.inWaiting() > 0:

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\serial\serialutil.py", line 590, in inWaiting
return self.in_waiting

File "c:\wpy64-3830\python-3.8.3.amd64\lib\site-packages\serial\serialwin32.py", line 257, in in_waiting

raise SerialException("ClearCommError failed (PermissionError(13, 'アクセスが拒否されました', None 5))

USBのポートを変えたり、使うUSBケーブルを変えたりもしましたが、結果は同じでした。
違うESP32ボードでも試みましたが、結果は同じでした。

どうすればこの課題を解決できるでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2020/08/14 02:18

記号等を含んで変形されたくない部分を含むような情報は、半端に置き換えるよりは ```Text ~```で囲ってみて下さい。('''ではないので注意) ```Text 諸々 **変形されたくない部分** 諸々 ``` ってな感じで
BuhKeil

2020/08/14 02:23

ご指摘ありがとうございます。 今しがた修正しました。
thkana

2020/08/14 02:34

わかりにくかったですかね。 [改行] ```Text[改行] 諸々 **変形されたくない部分** 諸々[改行] ```[改行] です。特定の情報中のその行だけを囲むのではなく、ログならそのログ全体を囲むように使うのが普通です。
thkana

2020/08/14 02:50

もう一つ、「使えなくなりました」という日本語は、「かつては使えた」ということを意味していますが、その理解でよろしいでしょうか。
BuhKeil

2020/08/14 03:42

はい。そのとおりです。
thkana

2020/08/14 09:28

「変化」の情報は重要です。 「使える」からなにかをしたら「使えなくなった」、そこで何をしたのかがわかっているならそれは明示して下さい。それが原因ですから。 もちろん、意図せず変えてしまって何が変わったかわからない、ということはありますが(というか、質問する場合はなにがトリガかわからないことが多いでしょう)、それならそれで「やったこと全て」が変化の候補になります。不明の現象の原因の究明/対策のためにはできるだけの情報が必要になります。
guest

回答2

0

私も使っていましたがampyは無応答にしょっちゅうなる感じなので(原因は知りません)、代わりにuPyCraftを使いましょう!
・フラッシュ
・ファームウェア書き込み
・ファイル一覧取得
・ファイル書き込み
・ターミナル
等必要な機能が実装されてます。
Windows側で作成した(書いた)pythonのスクリプト(boot.pyとか)もエクスプローラでuPyCraftのファイル一覧表示のところにドラッグアンドドロップすれば速攻ファイル書き込みできますよ!

投稿2021/05/14 08:05

PowerWave

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BuhKeil

2021/05/16 03:49

コメントありがとうございます。 そのような編集ソフトがあるのですね。
PowerWave

2021/05/16 13:56

超便利ですよ!ampyをなんとかしようと時間をかけるよりも、こっちでどんどん先に進めたほうがいいですよ。 検索するとuPyCraftの使い方を解説しているサイトもたくさん出てきますし。
guest

0

ボードはESP32 devkit-cです。

質問にあるままに
python -m esptool --port COM8 erase_flash
python -m esptool --port COM8 --chip esp32 write_flash -z 0x0000 esp32-idf3-20191220-v1.12.bin
を実行(ウチはcom11でしたが)しました。
書き込んだら、ampyの前にナマのシリアルを覗いてみるのが定石ではないでしょうか。ということで見てみると、

Text

1rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 2flash read err, 1000 3ets_main.c 371 4ets Jun 8 2016 00:22:57

が延々と出力されています。flash read errだとか。なにかの手順が間違っているとか抜けているとかのようです。

参照先のサイトのコマンド例を見ると、
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20190125-v1.10.bin
となっていますね。よく見比べて下さい。

投稿2020/08/14 02:31

編集2020/08/14 02:36
thkana

総合スコア7629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BuhKeil

2020/08/14 03:40

コメントありがとうございます。 参照先のコマンドの通りに打ちました(Windows10なので --port COM8と書いています)。 よく見ると、アドレスが違っていたようでした。 0x0000を0x1000に変え、下記のように入力してfirmwareを無事に組み込めました。 > esptool.py --chip esp32 --port COM8 --baud 460800 write_flash -z 0x1000 フルパスでbinファイルの名前 そして、コマンドラインから、 > ampy --port COM8 ls > ampy --port COM8 put main.py > ampy --port COM8 rm main.py を実行すると、できる時とできない時とがあります。できない時には、エラーの末尾に、"Could not enter raw repl"とあります。 どうすれば解決できるでしょうか。
thkana

2020/08/14 09:47

> 参照先のコマンドの通りに打ちました(Windows10なので --port COM8と書いています)。 > よく見ると、アドレスが違っていたようでした。 それを、「参照先の通りではなかった」とか「間違っていた」といいます。別に責めるわけでなく、動かなかった原因は間違えていたから、という事実は素直に認識して下さい。なぜなら、神でも機械でもない人間であれば、これからもなにかの拍子に間違いを犯す可能性があるからです。動かない以上どこか間違っているはず、と思って間違いを探さないと、見つかるものも見つかりません。 > できる時とできない時とがあります 出来るときと出来ないとき、なにか違いがありますか? その3つのコマンドラインのどれかひとつが「できない」のですか? 全てですか? あるいは、どれか一つがダメなときは全てダメだとか、数分間をあけるとできるとか。なにか特徴を探して下さい。(あるいは、完全にランダム/特徴がない、というのも一つの特徴です) それが原因/対策へのヒントになります。「できない」で思考停止しないで、起こっている"事実"を観察して下さい。「できない」という事象が起こるのではなく、あなたの期待しないなにかが起こることを「できない」と呼んでいるはずです。実際に起こった事象「期待しないなにか」が解決への重要なヒントとなるのが普通です。
BuhKeil

2020/08/14 10:34

コメントありがとうございます。 詳しい観察ありがとうございます。思い当たることがあります。 私はコマンドライン(cmd.exe)から、ampyを使って、ESP32が接続されているシリアルポートを通してpythonファイルの操作をしています。そして、転送を終えてターミナルソフト(PuTTY version0.74 64bit版)でpythonコードの実行状況(自分で設定した値が出ているかとか、など)を確認しています。エラーが出たらコードを修正してまたコマンドラインから修正したpythonファイルを更新する、の繰り返しです。 最初は気づかなかったのですが、PuTTYが起動したまま、コマンドラインからファイル操作をしようとするとエラーとなって操作できませんでした。そこで、コマンドラインから操作をする時には必ずPuTTYを閉じるようにしました。しかし、PuTTYを閉じたにも関わらずコマンドラインから操作ができずエラーになります。ここで一回では諦めず何回も同じコマンドを打ち続けていくと、あるところで(1-2分くらい?)操作できるようになります。この時、どのようなエラーが出ていたのかまでは記憶していません。 まだ他にもあったかもしれないので、振り返ってみます。
BuhKeil

2020/08/23 07:01

原因の一つはesptoolを使ってmicro pythonのファームウェアをインストールする際、書き込み開始アドレスを0x0000から、書籍等にあるように0x1000に変えました。しかし、結果は変わらず、同じエラー(4項目目のエラー表示) ・ClearCommError failed (permissionError(13, アクセスが拒否されました, None, 5) が表示されます。記憶をたどってどんなことをしたのかはこれ以上わかりません。
thkana

2020/08/23 09:51

質問では、 > ampyでファイル一覧を取得(lsコマンド)したり、アップロード(putコマンド)したりできなくなりました。 08/14 12:40 では、 > 下記のように入力してfirmwareを無事に組み込めました。 <略> > できる時とできない時とがあります。できない時には、エラーの末尾に、"Could not enter raw repl"とあります。 08/23 16:01 > 書籍等にあるように0x1000に変えました。しかし、結果は変わらず、同じエラー あなたのこれまでの操作、それによって起こった変化、状況を一度まとめてみませんか? 「同じ」とか「変わらない」とかいう言葉は使わず、「症状1:xx」とか名前を付けて全ての項目が確かにわかるようにしてみるとよいと思います。
BuhKeil

2020/08/24 11:21

コメントありがとうございます。質問した時までは、ファームウェアの書き込み開始アドレスを0x000で作業していて、書籍や頂いたコメントを見返して0x1000に変更してファームウェアの書き込みをしたところが変更点です。 それ以外の操作は同じです。
thkana

2020/08/24 11:45

> 「同じ」とか「変わらない」とかいう言葉は使わず > それ以外の操作は同じです。 う~ん。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問