・目的
esp8266でmicroSDを使ってみる。microSDは動作電圧が3.3V
なのでロジックレベル変換をしなくていいんで楽。
・使用したもの
esp-wroom-02(esp8266)
microSDdip化キット
http://akizukidenshi.com/catalog/g/gK-05488/
抵抗10kΩ4個
3端子レギュレータ3.3V500mA (NJU722333)
単三4本
ジャンパワイヤ
・方法
(1)回路組み立て
SPI通信でesp8266とmicroSDを接続する。
esp8266がマスターでmicroSDがスレーブだ。
microSD側のピン配置は以下の図。
microSD側で使用するピンはCD/DAT3,CMD,VDD,CLK,
VSS,DAT0。
VDDは3.3V電源にVSSはGNDに接続。
カード検出スイッチは今回使わない。
出典:http://akizukidenshi.com/download/ds/akizuki/K-5488_AE-MICRO-SD-DIP.pdf
esp8266のピンアウトを示した。
SPI通信でmicroSDとやりとりするので
紫色のピンを使う。
出典:http://eleclog.quitsq.com/2015/08/esp-wroom-02.html
esp8266とmicroSDの接続するピンを以下の表に示した。
esp8266 | microSD |
---|---|
CLK(IO14) | CLK |
MISO(IO12) | DATA0 |
MOSI(IO13) | CMD |
CS(IO15) | CD/DAT3 |
3端子レギュレータNJU72233で3.3Vを供給する。
またIO15,IO2,IO0への配線はesp8266のFlash boot moode
で起動するため。
(2)スケッチ
SPI通信を使うのでSD.hだけでなく
SPI.hもインクルードする。
CS(チップセレクト)ピンを15ピンに
設定したが、他のピンであっても大丈夫だ。
CS(Chip Select)ピンはSS(Slave select)ピンと表記される
こともある。このピンはマスタ側(esp8266)が通信相手(microSD)
を選択するときに使う。マスタ側は通信する相手のCSピンのみを
Lowにして通信を開始する。つまり通信中だけCSがLowでそれ以外は
Highになるように設定する。setup()関数の最初でcsピンをOUTPUT
でHIGHに設定しておく。
#include <SD.h>
#include <SPI.h>
File myFile;
const int cs = 15;
void setup() {
pinMode(cs,OUTPUT);
digitalWrite(cs,HIGH);
Serial.begin(9600);
while(!Serial) {
;
}
Serial.println("Initializing SD card...");
if(!SD.begin(cs)) {
Serial.println("initialization failed");
return;
}
Serial.println("initialaization done.");
if(SD.exists("example.txt"))
Serial.println("example.txt exists.");
else
Serial.println("example.txt dosen't exist.");
Serial.println("Creating example.txt");
myFile = SD.open("example.txt", FILE_WRITE);
if(myFile){
Serial.println("writing ....");
myFile.println("12345abcd");
myFile.close();
}else
Serial.println("error opening examole.txt");
myFile = SD.open("example.txt");
if(myFile){
Serial.println("example.txt :");
while(myFile.available())
Serial.write(myFile.read());
myFile.close();
}else
Serial.println("error opening example.txt");
}
void loop() {
}
・実行結果
以下の写真が実行結果
ちゃんと動いてますな