[작업 로그] ESP8266에서 SD 카드를 읽어보기
wifi로 AP에 접속할 때, 코드에 접속 정보를 쓰고 싶지 않기 때문에, SD카드로부터 읽어내게 한다.
ESP8266은 3.3V이므로, SD의 DIP화 카드를 사용할 때, 레벨 변환하지 않아도 되므로, 하드에 희미한 인간에게는 매우 편리.
· 준비
1.SD 카드
우선, 읽을 수 있는 SD 카드의 root 디렉토리 바로 아래에 「HOGE.TXT」라고 하는 텍스트 파일을 만들어 적당한 문자열을 몇 행인가 기술했다.
※아마, 파일명이 길거나, 일본어가 들어가거나 하면, FAT16로 읽었을 때 보고 싶고, 뇨로가 되기 때문에 전각 문자열이 없는 짧은 이름의 대문자의 파일명으로 했다.
※파일의 내용은, 시리얼로 내기 때문에, 우선은, 전각 문자를 혼입하지 않는 것으로 했다.
※ 만약을 위해, 가지고 있는 SD 카드로 제일 용량이 적은 microSD의 4G를 사용했다.
(어쩌면 3DS에 대해 녀석...)
디렉토리.
내용.
2.Aruduino 측 소스
SD 카드 연결은 SPI를 사용하기 때문에 SPI 라이브러리를 include.
또, SD의 라이브러리가 있으므로, SD의 라이브러리도 include.
초기화 처리에서 「HOGE.txt」를 읽어 행 단위로 콘솔에 출력한다.
그 후의 메인 루프에서는, 아무것도 하지 않는다.
#include <ESP8266WiFi.h>
//#include <WiFiUDP.h>
// SPI接続でSDカードと接続
#include <SPI.h>
#include <SD.h>
// SDカードのhoge.txtを読み込む
static boolean ReadHogeOnSD() {
File hogeFile;
String line;
char c;
// ESP8266は、GPIO15
if (!SD.begin(15)) {
Serial.println("SD Card initialization failed!");
return false;
}
Serial.println("SD Card initialization successed...");
// ファイルopen
hogeFile = SD.open("/HOGE.TXT", FILE_READ);
if (hogeFile) {
// open成功
// 行文字列初期化
line = "";
while (hogeFile.available()) {
// 今時言語みたいに1行読み込みする方法がわからなかったので、
// とりあえず、昔ながらの1文字づつ読み込み。。。
c = hogeFile.read();
// 改行の場合
if (c == '\n' || c == '\r') {
// 行文字列の長さが1以上の場合
if (line.length() > 0) {
Serial.println(line);
}
// 改行文字が来たので行文字列をクリア
line = "";
} else {
// 改行文字でなければ行文字列に読み込んだ1文字を追加
line = line + String(c);
}
}
// ファイルclose
hogeFile.close();
} else {
Serial.println("error opening hoge.txt...");
return false;
}
return true;
}
void setup() {
// シリアル初期化
Serial.begin(9800);
// ファイル読み込み
ReadHogeOnSD();
}
void loop() {
// とりあえず、何もしない
delay(10000);
}
3. 배선
[1] 준비된 부품
마이크로 SD DIP화 키트
htps : // 아키즈키 덴시. 코 m/분 g/g/gK-05488/
아키즈키에서 구입.
레벨 변환은 붙어 있지 않다.
[2] 배선
이런 식으로 연결.
SD ESP8266
1 연결되지 않음
2 D8(GPIO15:HCS)
3 D7 (GPIO13 : HMOSI)
4 3.3V
5 D5(GPIO14:HSCLK)
6 GND
7 D6(GPIO12:HMISO)
8 연결되지 않음
9 연결되지 않음
10 연결되지 않음
· 실행
배선할 수 있었으므로, 빌드해 실행해 보았다.
연결되지 않는 orz
여기서 상당히 고민한다. . .
납땜하고 싶었기 때문이었다.
orz
아마추어이므로, 핀시키면 사용할 수 있는 것과. . .
납땜 문이 높다. . .
그리고 다시 납땜한 SD 슬롯을 브레드보드에 다시 꽂아 실행해 본다.
읽을 수 있었습니다.
우선, 읽을 수 있었으므로, 여기까지.
읽을 수 있기 때문에 쓸 수 있는 하즈. . .
어디까지의 용량의 SD를 읽고 쓸 수 있을지 모르지만, 일단, 4G의 SD는 읽을 수 있으므로, 로그를 흩어지거나 하는 것은 좋을지도 모른다.
또, 접속 파라미터만을 확실히 바꾸면,
후술 TODO의 SPIFFS보다 SD내에 갖게 한 쪽이 좋은 생각이 든다.
・TODO
1. Wifi로 아날로그 값 날리는 프로그램에 SD 카드로부터 파라미터(SSID, 패스워드, 접속 서버, 포트 등)를 읽어들이는 처리를, 추가한다.
2. SD 카드를 연결하지 않아도 ESP8266 자체의 Flash에 파일 시스템을 만들 수 있어 긁는 모양(코멘트로 가르쳐 주었습니다.)
-> SPIFFS를 사용해보십시오.
-> 클라이언트가 아닌 간단한 HTTP 서버를 만들어 정적 HTML을 가지고 센서 (가변 저항이지만 ...)의 값을 스마트 폰의 오히려하는 것을 만들고 싶다. . . (가능한 것인지는 아직 조사하지 않았다)
3. 어디까지의 용량의 SD 카드를 인식할 수 있는지 조사한다. 또, 1계층에 얼마나 파일을 둘 수 있을까(FAT의 한계는 제쳐두고) 시험해 본다. . .
Reference
이 문제에 관하여([작업 로그] ESP8266에서 SD 카드를 읽어보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cyclon2joker/items/1ce911558141e5c72dcf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)