前回、”ESP32CAM買って見ました”では、個人的には多くの作業をやったつもりでしたが、作業の殆どが、”ESP32-CAM Video Streaming and Face Recognition with Arduino IDE”内の作業。それ以外は、異常に明るいLEDと赤くて小さいLEDの2つをオンオフさせただけでした。今回は、micro_SDの読み書きをやって見ます。

先ずは回路の確認

- 左が回路図。右がmicro_SDのピンアサイン。
- micro_SDとの通信方式はSPI。
- 通常SPI通信には、クロック(SCLK)、データIN(DI)、データOUT(DO)の3本とチップセレクト(CS)が使われる。
- 1番ピン:接続無し、8番ピン:リザーブ。8番ピン(HS2_DATA1またはDAT1)は、LED_FLASHに繋がれている。1番ピン、8番ピン共に47kΩでプルアップされているところを見ると何かの信号ラインと思われるが。
- 回路図の9番ピン(SD)はメディア検知用。メディアが挿入されていると、”Low”になる。この回路ではこの信号は使われていない。
信号ラインがESP32のSPEC通りに配線されているので、下記のコードでmicro_SDに書き込む事が出来ます。
#include "FS.h"
#include <SD_MMC.h>
void setup()
{
File fo;
SD_MMC.begin();
fo = SD_MMC.open("/test.txt", FILE_WRITE);
fo.println("This is test.\nThis is test.");
fo.close();
SD_MMC.end();
}
void loop()
{
}
実行すると、This is test. This is test. と書かれた”test.txt”ファイルがmicro_SDに作られます。問題無く動くのですが、LED_Flashが何故か光ってしまいます。micro_SDにアクセスする度にLED_Flashが光っては眩しくてたまりません。8番ピンはリザーブですがプログラムの中で使っている様です。
SD(SPI)モードで試してみる
SPIモードで書込を行ってみます。簡単に言うと、SD_MMC.begin();の変わりにSD.begin();を使う事です。ESP32はデフォルトでSDモードのピンアサインは、 SCK:IO18、 MISO:IO19、 MOSI:IO23。micro_SDモードと違います。よってプログラムで各ピンを指定する必要が有ります。
調べてみると、SDモードでピンアサインはSPI関数で変更出来る事が分かりました。スケッチはこんな感じ
#include "FS.h"
#include <SD.h>
#define sd_sck 14
#define sd_mosi 15
#define sd_ss 13
#define sd_miso 2
void setup()
{
File fo;
SPI.begin(sd_sck, sd_miso, sd_mosi, sd_ss);
SD.begin(sd_ss);
fo = SD.open("/test1.txt", FILE_WRITE);
fo.println("This is test.\nThis is test.");
fo.close();
SD.end();
}
void loop()
{
}
- SPI.beginで各ピンを指定する。引数は、順にSCK、MISO、MOSI、SS(CS)
- 回路図より、SCK:14、MISO:15、MOSI:2、SS:13 となる。
- プログラムは、前回同様、This is test. を2回書いたファイル、”test1.txt”を作成する。
正常に動き、今度はLED_Flashは光りません。micro_SDへのアクセスはこちらのプログラムを使用する事にします。Flashが光らないから。
次回は、カメラとPSRAMについてです。