Хранение большого объема данных и работа с ним в Arduino (база данных)
- Войдите на сайт для отправки комментариев
Добрый день.
Есть Ардуино с GPS, SD, GPRS шилдами.
Ардуино собирает данные GPS и еще с 10 разнообразных датчиков. Периодически (и это не системно - возможно раз в час, а возможно раз в день или даже раз в месяц) Ардуино попадает в зону действия GSM сети и получает возможность сгрузить данные на удаленный сервер. Но.... собранные данные он все равно должен продолжать хранить.
Так как данные собираются/записываются каждые 2-3 секунды - то массив данных получается довольно внушительным + необходимость учета того что уже было отправлено на удаленный сервер, а что нет.
Я далеко не профессионал в Ардуино и эта задача меня поставила в тупик. В данный момент у меня получился какой-то гомункул - данные после каждого считывания записываются в отдельный файл и хранятся на SD, когда получается подключиться к сети и Ардуино имеет возможность "поделится" данными с сервером то после выгрузки Ардуино перемещает файлы, данные из которых удалось отправить на сервер, в отдельную папку (тем самым условно помечая их как "отправленные".
Но это решение ужасно из-за исполинского количества файлов и дикого неудобства работы с таким количеством файлов, а писать все в один файл (или несколько) тоже, мне кажется, не вариант потому что каким-то образом нужно организовать пометку "отправлено/неотправленно на сервер".
В общем прошу помочь советом в решении. Может у кого-то более изящное решение.
Спасибо.
В общем прошу помочь советом в решении. Может у кого-то более изящное решение.
Спасибо.
Можно создать 1 (один) буферный файл для сбора данных либо с каждого отдельного датчика (по файлу на датчик), либо на весь массив данных за один сеанс опроса. Пишете в этот файл(ы) весь месяц показания добавлением в конец. По мере возможности отдаете из этого файла данные по ГСМ. Храните в EEPROM указатель на следующий "неотданный" пакет данных. Все
По прошествии времени переименовываете этот файл для истории и начинаете новый
Хранить что-то после отправки на сервер уже не нужно. Файлов больше одного тоже не нужно. Можно вообще файловую систему выкосить для экономии циклов и памяти.
поставить EEPROM, хранить позицию последней успешной отправки и при следующем попадании в сеть отправлять только свежее
Хранить что-то после отправки на сервер уже не нужно.
А ТС утверждает что нужно! :)
Там на практике другая проблема может возникнуть. С такой частотой опроса датчиков если писать на карту каждый сеанс опроса, то карте скоро настанет кирдык. Однозначно надо сокращать частоту сеансов записи, либо каждый день новый файл создавать, чтобы не долбить постоянно одни ячейки флэша
Хранить что-то после отправки на сервер уже не нужно.
А ТС утверждает что нужно! :)
осталось понять зачем, если в базу скидывается?
ять зачем, если в базу скидывается?
Ну, что там за "база" нам достоверно не известно. Может и сервер не его, а какой-нибудь "народный". Ну и если есть локально все данные, то может и удаленный сервер не понадобится.
С практической точки зрения вижу это как затыкание места на флэшке, чтобы на затиралась до дыр в одном месте. при получении данных с частотой 3 секунды за сутки один кластер fat32 перезапишется 28,8 тыс. раз. Пара недель работы с единственным файлом и усё