MicroPython的午睡(130)M5Stack UIFlow2、microSDマウント

Joseph Halfmoon

前回はM5Stackの前面パネル下に3個あるボタンを押してみました。今回は側面(下側)に移ってmicroSDカードスロットにアクセスしてみたいと思います。SDカードアクセスはESP32用の標準的なMicroPythonと共通ではあるものの、M5Stackのハードウエア特有の設定をしないとなりません。

※「MicroPython的午睡」投稿順 Indexはこちら

※M5Stack Grayに書き込んだUIFlow2.0 (Alpha-27)対応のMicroPython処理系とWindowsパソコン上で動作しているThonny 4.0.1で動作確認しています。

M5Stack basicのSDカードスロットの結線

ESP32用のMicroPythonは、machineモジュールとos(uos)モジュールを使ってSDカード(TFカード)にアクセスできるようになっています。ここはUIFlow2版でも変わりないようです。経路としてはSPI利用です。

ただし、M5Stackの場合、SPIに接続するハードウエアデバイスが複数あるので注意しないとなりません。

    1. メインのFlashメモリ
    2. LCD
    3. microSDカードスロット

メインのFlashメモリはプログラムが書き込まれているものであり、UIFlow2のMicroPython自身もこの中に書き込まれています。また、MicroPythonが起動されると自動的にマウントされているストレージ、 /flash はこの上に構成されている筈。ここは高速であってほしい部分なので、独立したクアッド(4ビット幅のデータ)形式のSPIで接続してます。

一方、全面のLCDパネルおよびmicroSDカードに対しては1チャネルのSPI(普通の1ビットデータ幅)を共用しています。CSで切り替える必要があります。そこの結線については以下に回路図がありました。

Core/Basic/M5-Core-Schematic(20171206).pdf

上記をかいつまむと以下のようです。SCKとMOSIは共用、MISOはLCD側は不要で、sdcardのみ結線です。肝心のCSのアサインを確認くだされや。

SPI sdcard lcd
CS GPIO4 GPIO14
SCK GPIO18 GPIO18
MOSI GPIO23 GPIO23
MISO GPIO19

また、上記のような結線のハードウエアSPIがMicroPythonからどうみえるのかは以下に記載があります。日本語マニュアル、あざーす。

ESP32 用クイックリファレンス

ESP32用のMicroPythonは、ハードウエアSPIを4スロットサポートしているようですが、sckにGPIO18を使用するのは slot 2のみです。またスロット2のデータのビット幅は1ビットです。なお slot 2のデフォルトのCS端子はGPIO5らしいので、csピンの設定は必須であります。

なおチャネルはLCDと共用なので、周波数その他「共用部分」を変更するとLCDにも影響するので注意せんとなりません。

今回実験のスクリプト

殊更にLCDに文字を書き込んで、LCDが動くよ~んとやってみた後、microSDカードをマウントしてそこに格納されているファイルのリストを取るだけのもの。なお、M5Stackに差し込まれているmicroSDカードには何時の時代に書き込んだのか忘れた古いデータファイルがいくつか書き込まれてます。今回は、そいつらが「見えれば」めでたしです。

# helloSDcard.py

import machine
from machine import Pin
import M5
from M5 import Lcd
import os

def main():
    M5.begin()
    Lcd.clear(0)
    Lcd.setCursor(int(Lcd.width() / 2) - 60, int(Lcd.height() / 2) - 15)
    Lcd.print("M5STACK")
    sd = machine.SDCard(slot=2, width=1, miso=Pin(19), mosi=Pin(23), sck=Pin(18), cs=Pin(4))
    os.mount(sd, '/sd')
    print("SD Card mounted")
    print(os.listdir('/sd'))

if __name__ == "__main__":
    main()
実機動作の確認

Thonnyから上記のスクリプトを走らせてみたところ、ShellにSDカードに格納されているファイル名のリストが返ってきましたぞ。こんな感じ。

helloSDcard

上記でmicroSDカードのマウントが出来たので、ThonnyのMicroPython deviceウインドウにも、/sdが現れました。こんな感じ(上にある/flashというパスは内蔵flash内に構成されているデフォルトのストレージです。)

sdcardDetected

下の /sd ストレージの情報を開いてみると以下の如し。

StorageInfo

7.4GB、トータルスペースとな。額面8GBのmicroSDカードだけれども。そんなもんだな。

MicroPython的午睡(129)M5Stack UIFlow2、「Btn」を押してみる へ戻る

MicroPython的午睡(131)M5Stack UIFlow2、I2Cスキャン へ進む