2025年2月9日日曜日

circuitpythonでストレージ非表示、データ永続化、


boot.pyをこんな感じにすると、GPIO6につけたスイッチを押してUSB接続すると、switch.valueがFalseとなり通常のドライブが見れる状況。
スイッチを押さずに起動すると、PCにpicoのドライブが表示されない。


import os
import storage
import board
import digitalio

switch = digitalio.DigitalInOut(board.GP6)

switch.direction = digitalio.Direction.INPUT
switch.pull = digitalio.Pull.UP

if switch.value:
  #NormalMode
  storage.disable_usb_drive()
else :
  #Maintance
    pass


ドライブが表示されないなどPCからPICOのストレージに書き込みができない場合には、circuitpythonからストレージに書き込み可能となる。
これを使って状態の永続化をする。

pythonはjson形式文字列をそのまま辞書として保持できるみたいなので、こんな感じで辞書変数のdataをdata.jsonのファイルで出力して、



import json

# 永続化したいデータ
data = {
    "name": "Taro",
    "age": 30,
    "city": "Tokyo"
}

# JSONファイルにデータを書き込む
with open('data.json', 'w', encoding='utf-8') as file:
    json.dump(data, file)



data.jsonからデータを読み取り、更新してファイルに出力するのはこんな感じ。


import json

# JSONファイルからデータを読み込む
with open('data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)

print(data)
data['age']+=1
# JSONファイルにデータを書き込む
with open('data.json', 'w', encoding='utf-8') as file:
    json.dump(data, file)



boot.pyからcode.pyの情報連携のやり方がわからず、PCから書き込み可能モードだとboot.pyからもファイル出力ができなさそう。
なので、data書き込みをしてみて、エラーになったらメンテナンスモードと判断しようかな。

2025/3/2 追記:JSONのやり取りはすごく遅いので、普通のファイル入出力の方がよさそう。

0 件のコメント: