
Интернет-магазин «Неглупый Дом»
Модуль SD-карты и DS18B20 вместе пишут показания температуры в обычный CSV-файл — после снятия карты его можно сразу открыть в Excel или Google Таблицах и построить график.
Модуль SD-карты подключается к Arduino по той же шине SPI, что и многие другие модули (RFID, Ethernet и т.д.), и работает с картой как с обычным файлом на диске через стандартную библиотеку SD. Формат CSV (Comma-Separated Values) — это просто текстовый файл, где значения в каждой строке разделены запятыми, его "из коробки" понимает Excel, Google Таблицы и большинство программ для построения графиков, не требуя специального формата.
Ключевая деталь надёжности в этом коде — файл открывается, в него дописывается одна строка, и сразу закрывается, а не держится открытым всё время работы. Если файл остаётся открытым долго, при внезапном отключении питания (что для автономного логгера вполне реально) несохранённые данные в буфере могут быть потеряны. Закрытие после каждой записи гарантирует, что данные физически попадают на карту сразу же.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
const int csPin = 4;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
if (!SD.begin(csPin)) {
Serial.println("Ошибка: SD-карта не найдена или не читается");
return;
}
sensors.begin();
File dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("millis,temp_c");
dataFile.close();
Serial.println("Лог-файл создан, начинаем запись");
}
}
void loop() {
sensors.requestTemperatures();
float t = sensors.getTempCByIndex(0);
File dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(millis());
dataFile.print(",");
dataFile.println(t);
dataFile.close(); // закрываем сразу после записи, чтобы данные гарантированно сохранились
Serial.print("Записано: ");
Serial.println(t);
} else {
Serial.println("Ошибка записи на SD-карту");
}
delay(60000); // запись раз в минуту
}
Файл `log.csv` открывается на запись и сразу закрывается на каждой итерации — так данные гарантированно сохраняются на карту, даже если Arduino внезапно потеряет питание между записями.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 163 ₽ 147 ₽ (экономия 16 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.