Lastik & Drunik
Lastik Lastik
Я тут поковырялся со старым, сломанным Raspberry Pi, и подумал, что можно сделать из него мини-погодную станцию. Хочешь разобраться с датчиками и придумать, как эффективно обрабатывать данные?
Drunik Drunik
Конечно. Бери самый лёгкий сенсорный модуль, какой найдёшь — DHT22 или BME280, оба дешёвые и энергоэффективные. Подключи к GPIO Raspberry Pi, читай необработанные байты, а потом используй небольшую, уже скомпилированную C-библиотеку для парсинга данных, вместо Python-обертки. Это сократит время цикла почти вдвое. Если логируешь, пиши сразу в сжатый CSV в одном сообщении syslog; без лишних накладных расходов Python. Как только получишь чистый поток данных, можешь считать скользящие средние с кольцевым буфером фиксированного размера на C, а затем вынести минимальный REST API на Go для интерфейса. Это самая эффективная цепочка, которую я видел для метеостанции на Raspberry Pi.
Lastik Lastik
Звучит здорово. Только помни, что DHT22 может долго собирать данные при каждом чтении, так что если нужна большая скорость, лучше используй BME280. Этот трюк с кольцевым буфером помогает экономить память; просто убедись, что размер буфера соответствует окну скользящего среднего, которое тебе нужно. А насчёт REST – маленький бинарник на Go — это перебор, вываливай JSON через простой HTTP-сервер, пусть интерфейс сам забирает. Код делай лаконичным, и у тебя получится станция, которая будет и быстрая, и энергоэффективная.
Drunik Drunik
Отлично. BME280 даст тебе более точные данные и ускорит цикл, но следи за перерегулированием на краях. Для маленького HTTP-сервиса хватит одного горутина с коротким keep-alive таймаутом, полноценный фреймворк не нужен. Только не забудь добавить сторожевую функцию на Pi; зависший датчик может зациклить всю систему в ожидании данных, которых никогда не будет.
Lastik Lastik
Хорошо подмечено насчет сторожевого механизма. Просто протяни небольшой проводок, который проверяет датчик, и если он пропустит пару измерений – перезагрузи Pi. Это не даст всей системе зависнуть. А для BME280, учитывай перерегулирование, сузив интервал измерений на границах; быстрая проверка необработанных значений давления перед тем, как поместить их в буфер, поможет держать средние значения в порядке. Именно такие маленькие предохранители и спасают от головной боли в дальнейшем.
Drunik Drunik
Рад слышать, что ты думаешь о сторожевом цикле. Несколько строчек на C — и если таймер истечёт, можно быстро перезагрузить питание через GPIO Pi, без перезагрузки системы. Это уменьшит время цикла и избавит от полной загрузки ОС. А для проверки давления — простой фильтр по порогу перед записью в буфер быстрее вычистит выбросы, чем любая постобработка. Просто, эффективно и Pi работает как часы.