CircuitPython 10行プログラミング Step2 (4) モジュール/SDメモリ
最初のCircuitPythonの連載では、下記のモジュールを取り上げました。
- 1回目 microcontroller
- 2回目 board digitalio pulseio
- 3回目 analogio
- 4回目 busio I2C
- 5回目 busio SPI
- 6回目 busio UART
CircuitPythonの対話モードでhelp('modules')を実行すると、基本のモジュールが表示されます。最初の連載ではAdafruitの用意したセンサのモジュールも利用していました。
>>> help('modules') __main__ builtins io rtc _os busio json samd _pixelbuf collections math storage _time digitalio microcontroller struct analogio displayio micropython supervisor array errno neopixel_write sys audiobusio frequencyio os terminalio audioio gamepad pulseio time bitbangio gc random usb_hid board i2cslave re usb_midi |
これらの中で、利用できそうなモジュールは次のとおりです。1回目の連載で利用したモジュールは除きます。
- rtc (RTC set_time_source)
- math (acos asin atan ceil copysign cos degrees exp fabs floor fmod frexp isfinite isinf isnan ldexp modf pow radians sin sqrt tan trunc)
- storage (VsFat erase_filesystem getmount mount remount umount)
- struct (calcsize pack pack_into unpack unpack_from)
- supervisor (Runtime)
- audiobusio / audioio (AudioOut RawSample WaveFile)
- os (chdir getcwd listdir mkdir remove rename rmdir stat statvfs sync uname urandom)
- gamepad (GamePad)
- random (choice getrandbits random randrange seed uniform)
- usb_hid (Device)
●4.0.0リリース
ベータ版から正式リリースが5月21日にアナウンスされました。
https://github.com/adafruit/circuitpython/releases
から、
adafruit-circuitpython-grandcentral_m4_express-en_US-4.0.0.uf2
をダウンロードします。ボード上のresetを2回続けてクリックします。PCのエクスプローラにGCM4BOOTドライブら出るので、その上に、上記のファイルをドロップします。コピーの最後でCIRCUITPYという名前に変わります。
https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases
から、最新の4.xのライブラリをダウンロードします。
adafruit-circuitpython-bundle-4.x-mpy-20190521.zip
をダウンロードしました。ZIPファイルをダブルクリックして、adafruit-circuitpython-bundle-4.x-mpy-20190521の中のlibフォルダを、CIRCUITPYドライブにドロップします。時間がかかります。
●SDメモリの読み書き
今利用しているGrand Central M4 Expressマイコン・ボードには、SDメモリのソケットがついています。プッシュ・アウト/プッシュ・インのタイプです。PCでfat32にフォーマットしたSDメモリを挿入しました。
このボードでは、SPIの接続は次のピン番号になります。
#50 / MISO #51 / MOSI #52 / SCK #53 / SS |
SPI接続のSDボードを外付けするなら、次のようにチップ・セレクト信号を定義します(未確認)。
SD_CS = board.D53 cs = digitalio.DigitalInOut(SD_CS) spi = busio.SPI(board.SCK, board.MOSI, board.MISO) sdcard = adafruit_sdcard.SDCard(spi, cs) vfs = storage.VfsFat(sdcard) storage.mount(vfs, "/sd") |
このボード上にあるSDソケットの信号で、チップ・セレクトSSはSDCARD_SS_PINに定義されており(説明ではそう書かれているが、実際は未定義エラーになる)、デフォルトで使われるので、SD_CSをピン番号に関連付ける必要はないようです(回路図を見ると、信号線はSD_CSという名称になっていた)。
spi = busio.SPI(board.SD_SCK, board.SD_MOSI, board.SD_MISO) cs = digitalio.DigitalInOut(board.SD_CS) sdcard = adafruit_sdcard.SDCard(spi, cs) vfs = storage.VfsFat(sdcard) storage.mount(vfs, "/sd") |
実行すると、初期化ができなかったようで、動きませんでした。
プログラムは、https://learn.adafruit.com/adafruit-grand-central?view=all GCM4_SD_Temperature_Logging_Demo.pyです。
もしこの症状がバグであって修正されたら、再度取り上げます。
(※)追記 SD_CS = board.SD_CSを追加すると、エラーは、SDがないと変わりました。