ynomura
@ynomura (Yukinori Nomura)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Raspberry Pi Pico の main.py を実行していると Thonny が認識できない問題

解決したいこと

Raspberry Pi Pico を MicroPython で使用していて、main.py で自動実行させていると、後日プログラムに手を入れようとして PC(MacBook Pro) にUSB接続すると、main.py が動いて、while True: のループのためか、Thonny が Pico に接続できない問題があります。
解決方法を教えていただければ助かります。

発生している問題・エラー

 main.py が設定されている Pico を接続し、Thonny を起動すると、下には次のエラーが表示され、停止ボタンも機能しません。

Device is busy or does not respond. Your options:

  - wait until it completes current work;
  - use Ctrl+C to interrupt current work;
  - use Stop/Restart to interrupt more and enter REPL.

該当するソースコード

 一応、time.sleep() を入れていますが、システムの割り込み(?)ができないのでしょうか?

import machine
import ssd1306
import time
import sys
from bme280 import BME280

sda = machine.Pin(0)
scl = machine.Pin(1)
i2c = machine.I2C(0,sda=sda, scl=scl, freq=400000)

bme = BME280(i2c = i2c)

oled = ssd1306.SSD1306_I2C(128, 64, i2c)

def sensor_read():
    oled.init_display()
    t, p, h = bme.read_compensated_data()
    p = p // 256
    pi = p // 100
    pd = p - pi * 100
    hi = h // 1024
    hd = h * 100 // 1024 - hi * 100

    oled.text("Temp: ", 0, 5)
    oled.text(str(t)+"C", 40, 5)
    oled.text("Pres: ", 0, 25)
    oled.text(str(pi)+"."+str(pd)+"hPa", 40, 25)
    oled.text("Hum: ", 0, 45)
    oled.text(str(hi)+"."+str(hd)+"%", 40, 45)
    oled.show()

if __name__ == '__main__':
    while True:
        try:
            sensor_read()
        except KeyboardInterrupt:
            sys.exit()
        time.sleep(5)

自分で試したこと

 ネットで検索して rshell を試してみたのですが、同様に main.py が動作していると接続待ちとなりました。
 また、新たに UF2 ファイルをインストールしてみたのですが、Pico には(見えないけど) main.py が残っていて解決しませんでした。

 しょうがないので、センサーを外してプログラムがエラー停止することで凌いでいます。
何か、他に方法はないのでしょうか?

2

1Answer

試行錯誤の末、停止させる方法を見つけました。(自己解決しました)
画像の赤枠1のエラーが出て使えない状態で、CTRL-D をタイプ(CTRL-C ではダメでした)
次に Pico が繋がっている USB ケーブルを一旦抜いて、再度接続する
そうすると画像の赤枠2が表示される。
そこで、停止ボタンを押すか、CTRL-C でプロンプトが表示され Thonny が使用できるようになりました。
とりあえず、これで解決しましたが、もっと良い方法をご存知の方のコメントをお待ちします。
スクリーンショット 2021-10-12 13.41.23.png

5Like

Your answer might help someone💌