Работа с памятью (microSD)
Цель — записать строку на microSD-карту и прочитать её обратно. Если этот тест прошёл, значит SPI-шина и SD-модуль исправны и можно переходить к более сложным сценариям (логирование GPS, телеметрия).
Распиновка — см. Подготовка среды разработки. Ключевое:
CSSD-карты:D4;общая SPI-шина:
MOSI=D11,MISO=D12,SCK=D13;CSNnRF24L01+ (D10) сидит на той же SPI-шине, но в этом тесте мы его не трогаем — модуль остаётся в idle и линию не держит.
Тестовый скетч
#include <SPI.h>
#include <SD.h>
const uint8_t SD_CS = 4; // CS SD карты в main_full
const char* LOG_FILE = "TEST.CSV";
void printFile(const char* path) {
File f = SD.open(path, FILE_READ);
if (!f) {
Serial.println("Read fail: cannot open file");
return;
}
Serial.println("--- File content start ---");
while (f.available()) {
Serial.write(f.read());
}
Serial.println();
Serial.println("--- File content end ---");
f.close();
}
void setup() {
Serial.begin(115200);
delay(300);
Serial.println("microSD test start");
Serial.println("SPI: D11(MOSI), D12(MISO), D13(SCK), CS=D4");
if (!SD.begin(SD_CS)) {
Serial.println("SD init failed");
Serial.println("Check power, GND, CS=D4, and SPI wires");
while (true) delay(1000);
}
Serial.println("SD init OK");
File f = SD.open(LOG_FILE, FILE_WRITE);
if (!f) {
Serial.println("Create/write failed");
while (true) delay(1000);
}
// Простая строка телеметрии (пример)
f.println("ms,temp_c,hum_%,co2_ppm");
f.println("12345,24.7,38.5,420");
f.close();
Serial.println("Write OK");
printFile(LOG_FILE);
Serial.println("microSD test done");
}
void loop() {
// Ничего не делаем, тест выполнен в setup()
}
Скетч инициализирует карту, создаёт файл TEST.CSV, пишет в него
заголовок и одну строку, потом читает файл обратно и печатает в Serial.
Весь тест выполняется один раз в setup(), loop() пуст.
Подготовка карты
Карта должна быть отформатирована в FAT32 (не exFAT, не NTFS).
Размер до 32 ГБ работает гарантированно. 64+ ГБ карты могут не опознаться библиотекой
SD— встроенная Arduino-библиотека старая.На карте не должно быть файла
TEST.CSVот предыдущих тестов — иначе скетч просто допишет ещё одну строку (это тоже нормально).
Как запустить
Вставьте карту в модуль.
Залейте скетч.
Откройте Serial Monitor на скорости 115200.
Что должно быть видно
microSD test start
SPI: D11(MOSI), D12(MISO), D13(SCK), CS=D4
SD init OK
Write OK
--- File content start ---
ms,temp_c,hum_%,co2_ppm
12345,24.7,38.5,420
--- File content end ---
microSD test done
После этого можно:
Извлечь карту, вставить в ноутбук —
TEST.CSVдолжен открыться в любом редакторе или Excel.Залить полную миссию (
main_full) — она будет писать свой логTBOY.CSVрядом сTEST.CSV.
Если SD init failed
Карта вставлена не до щелчка.
Карта не FAT32 — переформатируйте через штатные средства ОС или
SD Memory Card Formatterот sdcard.org.Карта > 32 ГБ — попробуйте меньшую.
Контакт SPI: пошевелите провода
D11/D12/D13, особенно у разъёма Nano.Карта живая, но не отвечает — попробуйте другую карту (механически изношенные SD это частая причина).