• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

esp сервер и не только

sonmax

New member
Всем привет! Нужна ваша помощь или совет.
Есть успешно работающая связка: ПК с MySQL + 3шт ESP8266 передающие информацию по WiFi (домашняя сеть) в эту базу.
Данные перезаписываемые, т.е. по сути хранится всего 3 набора данных (время и значение)
Есть ли вариант реализовать такую конфигурацию, но вместо ПК использовать ESP?
В этом случае ESP сервер будет использоваться как точка доступа без контакта с домашним роутером.

понимаю, что MySQL на ESP не развернешь, но например допустимо передавать данные и хранить их как то по другому.
Но как правильно это реализовать пока не додумался.
Может у кого есть идеи?
 

pvvx

Активный участник сообщества
  • Типовое ПО для ESP имеет ограниченное кол-во одновременно открытых соединений. То есть такое ПО не годится для многопользовательского сервера. Требуется использовать свой код.
  • Для записи логов в типовом ПО для ESP нет удовлетворительного решения. Использование имеющихся у ESP файловых систем сильно ограничивает частоту следования записей и приводит к быстрому износу Flash. Требуется организация собственной системы записи данных в Flash.
При организации своего циклического буфера записи во Flash в 1 Мегабайт для пары 32-х битных данных с меткой времени следующих 1 раз в секунду вы сможете содержать лог на 10 дней (1048576записей). И ресурс записи Flash составит 27 лет.
 

pvvx

Активный участник сообщества
Не то подсчитал :oops:

1MB = 1048576 байт

Записывается 3 значения по 32 бита = 12 байт

1048576/12 = 87381 запись, но надо вычесть один пустой сектор в 4кБ, который будет очищаться при переходе записей на следующий сектор (1048576-4096)/12 = 87040.

И для поиска и уменьшения всяких вычислений в таком кольцевом буфере удобнее записывать данные кратно размеру сектора Flash.

Итого в 1MB будет содержаться от 87040 до 87296 записей.

При следовании записей в 1 секунду это 24 часа. Заявленный гарантированный ресурс Flash – не менее 10000 перезаписей. Итого ресурс такого буфера по Flash составит 10000 дней (27 лет).
 

pvvx

Активный участник сообщества
При использовании SPIFFS при такой интенсивности записей (она и не обеспечит) Flash полностью скончается за месяц или два.

На AP (сервере) на порту N открываете TCP socket. На клиентах подключаетесь к этому порту и передаете данные, можно сразу бинарной структурой – 2 слова данных по 32 бита. Сервер к этим данным (в 8 байт) добавляет Linux timestamp на 4 байта (32 бита секунд текущего времени в секундах с начала 1970 года) и записывает в кольцевой буфер во Flash.

Для вашего подключения к серверу, организуете web интерфейс с передачей данных из этого циклического буфера и на js строите отображение графика.

Для сокращения объема передачи данных и упрощения всей системы, передаете сразу весь циклический буфер в 1МБ через web-socket в бинарном виде. При правильном создании кода для web и web-socket у ESP8266 это время передачи (открытие и показ графика в 87296 точек) составит до 2 секунд. Обработку данных блока циклического буфера проще описать в js в HTML странице отдаваемой web сервером ESP, но возможно использовать и стороннее размещение web страницы (если она имеет множество файлов и большие размеры).

Для реализации такой простой фигни лучше сразу забыть о Arduino и её либах. На них ничего хорошего сделать не выйдет.
 

pvvx

Активный участник сообщества
И соответственно, если у вас используется больше данных и/или требуется больший период логирования, тогда берете паяльник и перепаиваете чип Flash на 16МБ. Тогда у вас на буфер будет 15МБ. И придется писать специальную процедуру выборки данных из него по указанию времени начальной и конечной даты на СИ в сам ESP. Так как передача полного буфера в 15МБ на правильно написанном web для ESP8266 составляет 19 секунд (800 КБ в сек). Устаревший пример есть в Разработка ‘библиотеки’ малого webсервера на esp8266.

Типично, для домашнего логирования температуры, влажности, состава воздуха (CO2, других газов и частиц), уровня освещения и т.д., для каждого значения используются 16 битные данные и частота логирования около 30 секунд. В итоге в Flash на 16МБ влезает один миллион записей (timestamp + 6 данных) и сохраняемый период записей будет составлять 1 год (1000000*30/60/60/24 дней). А ресурс записи Flash составит более 10 000 лет.
 

sonmax

New member
Спасибо за подробное разъяснение. Объем данных не большой, 4устройства 1раз в 15мин. передают данные общий размер не подсчитывал, думаю максимум 1-4кбайт(дата + значение). и 4 устройства раз в 15мин считывают эти данные.
Из всего этого вижу только одну проблему - одновременный доступ к файлам. М.б. есть другие варианты - не в файл?
 
Сверху Снизу