SD-карта и файловая система
Логирование, чтение файлов, CSV
Записываем данные датчиков на SD-карту: инициализация, файлы, CSV-логи, конфиги и типовые проблемы питания.
Прогресс раздела0/62 · 0%
- Модуль SD-карты: что внутри и как подключитьКонтроллер, стабилизатор AMS1117 и резисторные делители: разбираем устройство типового SD-модуля за сотню рублей и чем он отличается от голой карты.15 мин
- Подключение SD по SPI: CS, MOSI, MISO, SCKРаспиновка SD-модуля на Uno и Nano: CS на D10, MOSI D11, MISO D12, SCK D13 — и как делить шину SPI с дисплеем или RFID-модулем без конфликтов.14 мин
- SD.begin: инициализация и типовые ошибкиSD.begin вернул false: проверяем питание 5 В, провод CS и формат карты FAT16/FAT32 — диагностика отказа инициализации по возвращаемому значению.16 мин
- Картинка BMP на дисплей: данные с картыКак прочитать BMP с SD-карты: смещение пикселей, ширина и высота в заголовке, 24 бита в RGB565 для TFT, bottom-up строки и паддинг, конвертация заранее.16 мин
- Диагностика SD: коды ошибок и шаги проверкиМетодика диагностики SD: скетч CardInfo, тип карты и FAT-объём, код отказа инициализации, чек-лист из шести шагов в таблице и разбор мусора в данных.15 мин
- Итоговый проект: автономный даталоггер с RTCФинальный прибор раздела: DHT и LDR, метки времени от DS3231, CSV с ротацией по размеру, кнопка старт-стоп сессии, светодиод записи и чек-лист запуска.17 мин
- Маркеры событий: кнопка ставит отметку в логКнопка-маркер на D3 пишет строку MARK,name=N с меткой секунд в тот же CSV, где идёт поток DHT: фронт с антидребезгом, LED-подтверждение, границы миллис-метки.16 мин
- Буферная запись: пишем пакетами, не теряем при записиRAM-буфер на восемь строк и пакетная запись File.print в цикле: одна пауза вместо восьми, окно потерь при сбое в таблице и flush кнопкой перед выключением.16 мин
- Выгрузка лога: файл с карты на компьютер через SerialВыгружаем log.csv с карты на компьютер через Serial: команда dump, сырой CSV с решёткой для служебных строк, LED-прогресс и приёмник на pyserial.17 мин
- Модуль SD на общей шине: CS по умолчанию и WiFi-шилдSD.begin() без аргумента берёт пин 10: на Ethernet-шилде карта сидит на 4, а сетевой чип на 10.15 мин
- Цикл сессии файла: open, write, close и сверка чтениемСессия файла как контракт: FILE_WRITE создаёт и дописывает, FILE_READ требует готового файла, write несёт байты, а сверка чтением ловит недописанный сектор.16 мин
- Логгер света: интервал на millis и извлечение картыФоторезистор на A1, строка раз в 5-60 секунд: интервал на millis без дрейфа, pot крутит частоту, LED — окно записи, кнопка закрывает файл перед извлечением.16 мин
- Читаем файл построчно: две техники и CSV-значенияПострочное чтение файла с SD: посимвольный цикл против readStringUntil, буфер фиксированной длины и парсер конфига, где значение — список чисел через запятую.16 мин
- Директории на SD: путь, имена 8.3 и лимит корняПапки на SD: путь со слешем в SD.open, mkdir по одному уровню, короткие имена 8.3 против длинных и лимит записей корня FAT16 — около 512 на файл.16 мин
- Дозапись и ротация: exists, режимы open и размер файлаДозапись в лог без потерь: SD.exists перед записью, чем FILE_WRITE на Uno отличается от FILE_WRITE на ESP32, свободное имя и ротация лога по размеру.17 мин
- Лог со временем: DS3231 штампует каждую строку и диктует имя файлаКаждая строка лога со штампом DS3231 и имя файла из даты: LOG0115.CSV по формату 8.3, скетч со sprintf и ловушка сбросившихся часов на 2000-01-01.16 мин
- Текст против бинарника: одни показания, разница вчетвероОдна телеметрия в двух форматах: CSV-строка за 26 байт против бинарной записи за 6, суточные объёмы на карте, скорость на Uno и чем открывается каждый формат.15 мин
- Скорость записи: блоки по 512 байт и паузы, ломающие ритмUno пишет на SD блоками по 512 байт: буфер библиотеки, паузы 10-50 мс на сброс блока, почему раз в секунду комфортно, а раз в 50 мс уже пропуски строк.17 мин
- SD на ESP32: VSPI, HSPI и общая шина с дисплеемПины VSPI и HSPI на классическом ESP32, проводка SD-модуля, карта и дисплей на одной шине SPI: кто держит CS, где конфликтует MISO и на какой частоте гонять.16 мин
- Сбой питания при записи: FAT, потерянные кластеры и flushЧто обрыв питания делает с FAT, откуда берутся потерянные кластеры, чем flush отличается от close и как суперконденсатор даёт логгеру секунду на закрытие файла.16 мин
- Конфиг с карты: SD → EEPROM → значения по умолчаниюЧитаем настройки с карты при старте, если карты нет — EEPROM, а там пусто — зашитый дефолт: иерархия источников конфига с парсингом и валидацией.16 мин
- Экспорт на комп: CSV в таблице и дамп в hex-просмотреКарта из логгера приехала на комп: чем открыть CSV без кривых столбцов, как читать бинарный дамп в hex-просмотре и когда байтовый формат экономит место вдвое16 мин
- Погодная станция на неделю без человека: интервал против ресурсаНеделя погоды без человека: суточный объём лога, интервал записи против ресурса флеш-ячеек, пакетный flush, файл на сутки и чек-лист перед отъездом с дачи17 мин
- Карта в бою: ноль байт из файла, мороз и вынимание под токомНоль байт из живого файла, карта молчит на морозе, вынимание под током: диагноз и лечение полевых симптомов SD после удачного begin, с самодиагностикой в скетче17 мин
- CSV-лог датчика: заголовок, строка на измерение и минутная сессияCSV-лог на SD: шапка один раз, строка на измерение, метка от millis и сессия открыт-дописал-закрыл раз в минуту — схема, которая переживает обрыв питания16 мин
- SD + RTC: настоящая временная метка и файл на суткиШтамп из DS3231 в строке CSV, имя файла из даты в формате 8.3, ротация файлов по суткам в полночь — и двоеточие, которое молча ломает имя файла на FAT17 мин
- Грабли SD-модуля: питание, формат карты, имена и end()Почему SD-модуль не видит карту: питание 3,3 и 5 В, FAT16/FAT32 против exFAT, лимиты имён файлов и SD.end() перед повторным begin — диагноз по порядку16 мин
- Логгер климата на SD: DHT + ротация файлов по днямЛоггер климата на SD: имя файла из счётчика дней, шапка CSV при создании, запись раз в минуту и close после каждой строки — цена сбоя питания в байтах16 мин
- Конфиг с SD: читаем settings.txt построчноЧитаем settings.txt с SD построчно: readStringUntil, пары key=value, parseInt и parseFloat по ключам, дефолты вместо молчания и CRLF-грабля Windows-блокнота15 мин
- Чистка на SD: rename, remove и мусор от записейУборка карты из скетча: SD.rename старого лога в архив, remove для битых файлов, exists перед операцией, ловушка открытого файла и имена 8.3 на классике15 мин
- Скорость записи на SD: буферы, flush и паузыЗапись на SD блоками по 512 байт: всплески задержки 10-100 мс на границе кластера, метки времени вокруг записи, flush против close и честные 2-20 КБ/с на Uno16 мин
- Автономный логгер на батарейке: сон + SDЛоггер на 3×AA живёт месяцами: ритм сон-просыпание, счётчик сессий в EEPROM, цена SD.begin 100-300 мс после пробуждения и бюджет 2000 мА·ч с полевыми поправками17 мин
- SD молчит при begin: диагностика картыSD.begin вернул false: exFAT вместо FAT32, клон «2 ТБ» на 8 ГБ, питание модуля 3,3 В, занятый CS и тайминги SPI — порядок проверки и CardInfo из примеров16 мин
- Формат карты: FAT16, FAT32 и размерыПочему SD.h не видит exFAT: FAT16, FAT32 и лимит 32 ГБ, кластеры 4-32 КБ и как правильно разметить microSD для логгера на Arduino.16 мин
- File и режимы открытия: чтение, запись, добавлениеFile как дескриптор: FILE_READ и FILE_WRITE, курсор в конце при дозаписи, перезапись через SD.remove и почему seek(0) оставляет хвост старого файла.15 мин
- Запись в файл: println и обязательный closeКак println кладёт строки в буфер 512 байт, что делает close() и flush() и почему ночной лог без close превращается в пустой файл на карте.14 мин
- Сутки CSV на millis: интервалы и бюджет картыСуточный CSV-лог на SD без delay: millis-таймер с переменным интервалом день/ночь, расчёт объёма 1440 строк, контроль байтов через size() и бюджет карты на годы16 мин
- SD.begin не поднялся: протокол за десять шаговПошаговый протокол локализации отказа SD.begin: питание и CS, дупонты, вторая карта, FAT32 вместо exFAT, конфликт шины — десять шагов и таблица симптомов17 мин
- Лог и резервная копия: запись в два файлаДва файла на карте: пишем в основной лог, раз в сутки копируем в резервный и сверяем размер байт в байт — страховка логгера от сбоя карты и обрыва питания16 мин
- Чтение файла: available, read и циклЧтение лога с SD обратно в скетч: available и read в цикле while, возврат -1, каст char, счётчики байт и строк, скорость Serial на 9600 и close после чтения.16 мин
- readStringUntil: парсим строки конфигаРазбор config.txt с SD: readStringUntil и таймаут секунды, trim против \r из блокнота Windows, ловушка toInt с нулём, strtol и дефолты на кривых строках.16 мин
- CSV-лог: формат колонок и заголовокКолонки CSV-лога проектируем заранее: время millis, сырое показание, статус кодом, версия прошивки, шапка первой строкой и запятые внутри данных.15 мин
- Логгер DHT: температура и влажность в CSVПолный логгер DHT22 на D2: запись в data.csv раз в 10 секунд по millis(), шапка и две колонки, статус каждой записи и счётчик строк в Serial.16 мин
- Метки времени: RTC плюс SD в одном логеDS3231 на I2C и SD-карта на SPI в одном скетче: штамп даты в каждую строку CSV, unixtime против ISO-поля и синхронизация rtc.adjust перед логированием.16 мин
- Потеря данных при сбое: sync и питаниеЧто доезжает до карты при провале питания: буфер 512 байт, flush и close, потерянный кластер FAT, конденсаторы 470-1000 мкФ и правило записал — flush — жив.17 мин
- Циклическая запись: перезапись старых логовЛог растёт, карта кончается: myFile.size() против лимита 1 МБ, ротация закрыл-переименовал-открыл, счётчик номеров в EEPROM и когда циклическая запись нужна.16 мин
- Конфиг с карты: текстовый файл настроекПороги, интервалы и имя устройства в config.txt на карте: разбор строк ключ-значение, досмотр диапазонов, дефолты при отсутствии файла — всё без перепрошивки.16 мин
- JSON-конфиг на SD: ArduinoJson и файлыJSON-конфиг с SD-карты: readFile, deserializeJson, containsKey и досмотр диапазонов; вложенность и массивы против key=value, цена RAM — 512-1024 байта на Uno.17 мин
- Список файлов карты: openNextFileКак вывести оглавление SD-карты в Serial: dir.openNextFile() в цикле, имена и размеры файлов, порядок записей FAT, рекурсия по папкам и ловушки 8.3-имён.16 мин
- remove и rename: управление файлами из скетчаSD.remove, SD.exists и File.rename: ротация логов из скетча, пустой файл через FILE_WRITE, rename с бэкапом и кнопка-защита с тумблером от лишнего удаления.15 мин
- Папки на SD: mkdir и структура архиваSD.mkdir создаёт весь путь за раз: логи по дням в /logs/dNNN, путь в SD.open, лимиты FAT и структура архива измерений на microSD для Arduino.16 мин
- Размер файла: size и предел 4 ГБsize() возвращает объём файла в байтах: контроль лога до ротации, предел FAT32 в 4 ГБ и арифметика — сколько мегабайт в сутки пишет логгер раз в 10 секунд.16 мин
- Питание SD-модуля: потребление и просадкиПиковый ток SD-карты при записи 100-200 мА: просадки от слабого стабилизатора и проводов, блокировочный конденсатор 100-470 мкФ и отдельный AMS1117-3.3.16 мин
- 3.3V против 5V модулей: согласование уровнейГолая карта питается 3,3 В и боится 5 В на MOSI: делители 1 кОм плюс 2 кОм, буфер 74LVC125A, прямой MISO и случай, когда нужен 4-канальный преобразователь.15 мин
- Скорость записи SD: почему теряются строкиПочему при записи на SD пропадают строки из Serial: пауза на сектор 512 байт, буфер приёма 64 байта, замер dt через millis и батч-запись пачкой строк.16 мин
- Управление логированием: кнопка старт-стопКнопка старт-стоп для логгера на Arduino: фронт на D2 с INPUT_PULLUP и антидребезгом, сессия записи новым файлом, LED-индикатор и обязательный close по стопу.15 мин
- Логи через веб: читаем SD с ESP32Читаем лог с SD-карты ESP32 из браузера телефона: пины VSPI 18/19/23/5, WebServer с обработчиком GET /log, отдача файла чанками по 512 байт и text/plain.16 мин
- Сервер файлов на ESP32: скачивание с картыСтриминг файла с microSD в браузер на ESP32: цикл file.read и client.write, заголовки Content-Length и attachment, список файлов ссылками и защита config.16 мин
- Даталоггер на батарейке: сон между записямиЛоггер на ESP32 от 18650: глубокий сон между записями через esp_sleep_enable_timer_wakeup, расчёт срока работы по интервалу и ловушка FAT при отвале питания.16 мин
- WAV с SD-карты: проигрываем звукПроигрываем WAV с SD-карты на Uno через TMRpcm: формат 8 бит 16-32 кГц, пин D9 и таймер 1, ток пина против громкости, усилитель LM386 и питание модуля.15 мин
- SD-карта: логируем данные датчиковПодключаем модуль microSD к Arduino Uno по SPI, пишем первые строки в log.csv через SD.open и FILE_WRITE и разбираемся, почему без close() данные пропадают.20 мин
- CSV-лог и чтение конфига с SD-картыФормат CSV для логов Arduino: шапка и разделители, запись раз в 60 секунд через millis() и чтение config.txt с SD-карты, чтобы менять порог без перепрошивки.22 мин
Гайды по теме раздела
- SD-карта: папки, пути, листинг на ArduinoРабота с папками на SD-карте Arduino: SD.mkdir, SD.open путь-стиль, File.openNextFile листинг, SD.exists/rmdir, path-style имена с /, грабли FAT16.
- Логгер данных на Arduino: SD-карта и DS3231 с меткой времениЛоггер данных на Arduino: SD-карта и DS3231 пишут CSV с меткой времени, DHT11 добавляет температуру.