[작업 로그] 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의 한계는 제쳐두고) 시험해 본다. . .

좋은 웹페이지 즐겨찾기