CircuitPython 10行プログラミング Step2 (4) モジュール/SDメモリ

 最初のCircuitPythonの連載では、下記のモジュールを取り上げました。

 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がないと変わりました。