maniack74
Сбор и обработка показаний датчиков с Arduino в базу mysql
Говорят у меня появился один подписчик, возможно это будет интересно ещё кому-то.
Сам я программист не настоящий, пытаюсь помаленьку, иногда выходит что-то вразумительное. На основе данного поста, возможно кто-то более настойчивый и сообразительный сможет построить что-то своё.
В предыдущем посте я уже показал сбор и передачу показаний датчиков по "воздуху" от одной Arduino до другой. Здесь продолжение этой цепочки, дальнейшая обработка полученный данных.
В качестве базы использовал OrangePi One с установленной Armbian OS. В основе Debian, по этому всё как там. Соответственно MariaDB и Apach. Возможно что-то другое на свой вкус.
За сбор данных отвечает скрипт на Python запущенный в качестве сервиса. При запуске автоматом сканирует COM-порты и если такой находит, слушает его. Если в COM-порт что-то приходит, пытается разобрать и отправить в базу данных. База имеет такую структуру:
В базе две таблицы, в одну "data", заносятся показания датчиков, в другой "servo", заносятся значения устанавливаемые на сайте в разделе "Управление" для ручного управления какой-либо автоматикой (возможное дальнейшее развитие этого проекта), в моём случает для управления автоматизацией теплицы. На данный момент здесь нет логики которая основывалась бы на значениях датчиков и собственно автоматизированного управления. Пока только ручное управление.
Данные с базы "data" визуализированы и выводятся в виде различных графиков. По умолчанию выводятся на диаграммы последние значения, на общий график последние 12/48/... (сколько задать в настройках скриптов) значений, либо за указанный период.
Его нужно закинуть в /etc/systemd/system в варианте для Armbian OS.
На этом пока всё. Спасибо за внимание :)
Arduino - передача показаний датчиков по "воздуху"
Озадачился передачей показаний различных датчиков по воздуху для последующего накопления и обработки, мониторинга в реальном времени и тп. на основе этого.
Собрал две макетки. На одну ардуинку зацеплены различные датчики и модуль NRF24l01 как передатчик, на другую ардуинку только приёмник NRF24l01.
На этом собственно всё, данные с датчиков передаются и принимаются. У этого проекта есть дальнейшее развитие, данные с датчиков собираются в mysql-базу и выводятся на сайт для дальнейшей обработки. Оформлю позже в другом посте.
На данном этапе есть существенная проблема не связанная с моментом передачи, а связанная с чтением данных температуры с датчика DHT22 при значениях температуры ниже ноля.
выглядит это примерно так:
Humidity: 26.10% Temperature: 0.90°C 33.62°F Heat index: -2.27°C 27.91°F
Humidity: 26.30% Temperature: 0.70°C 33.26°F Heat index: -2.49°C 27.52°F
Humidity: 26.30% Temperature: 0.70°C 33.26°F Heat index: -2.49°C 27.52°F
Humidity: 26.40% Temperature: 0.50°C 32.90°F Heat index: -2.71°C 27.13°F
Humidity: 26.60% Temperature: 0.40°C 32.72°F Heat index: -2.81°C 26.94°F
Humidity: 26.60% Temperature: 0.30°C 32.54°F Heat index: -2.92°C 26.74°F
Humidity: 26.70% Temperature: 0.20°C 32.36°F Heat index: -3.03°C 26.55°F
Humidity: 26.90% Temperature: 0.00°C 32.00°F Heat index: -3.24°C 26.16°F
Humidity: 26.90% Temperature: 0.00°C 32.00°F Heat index: -3.24°C 26.16°F
Humidity: 27.10% Temperature: -3276.70°C -5866.06°F Heat index: -3607.57°C -6461.69°F
Humidity: 27.20% Temperature: -3276.60°C -5865.88°F Heat index: -3607.46°C -6461.49°F
Humidity: 27.30% Temperature: -3276.50°C -5865.70°F Heat index: -3607.35°C -6461.29°F
Humidity: 27.50% Temperature: -3276.30°C -5865.34°F Heat index: -3607.12°C -6460.88°F
Humidity: 27.50% Temperature: -3276.20°C -5865.16°F Heat index: -3607.01°C -6460.68°F
Humidity: 27.70% Temperature: -3276.10°C -5864.98°F Heat index: -3606.90°C -6460.48°F
Humidity: 27.80% Temperature: -3276.00°C -5864.80°F Heat index: -3606.78°C -6460.27°F
Humidity: 27.90% Temperature: -3276.00°C -5864.80°F Heat index: -3606.78°C -6460.27°F
Humidity: 28.00% Temperature: -3275.80°C -5864.44°F Heat index: -3606.56°C -6459.87°F
Humidity: 28.10% Temperature: -3275.70°C -5864.26°F Heat index: -3606.44°C -6459.66°F
Humidity: 28.20% Temperature: -3275.60°C -5864.08°F Heat index: -3606.33°C -6459.46°F
На последней строчке значение которое в дальнейшем не меняется.
Проблема проявляет себя не только в той библиотеке для DHT22 которую я использовал, а также в других. Хотелось бы решить эту проблему при помощи сообщества, сам пока не умею.
Вывод показаний датчика DHT11 на четырехразрядный семисегментный дисплей
Озадачился постоянным мониторингом значения температуры и влажности в комнате. Смотреть на серийном порту показания датчика DHT11 любопытно но не информативно. Циферки нужно показывать красиво.
Вывод на семисегментный дисплей сам по себе не сложный, но первоначально вводит в ступор. Разряды на дисплее зажигаются не одновременно а последовательно, в этом и загвоздка. числовые значения с датчика нужно разделять на отдельные цифры и последовательно выводить на дисплей, также последовательно выводить значения влажности, температуры и индекс комфорта (соотношение температуры и влажности) в цикле.
В данном макете это и реализовано.
Также можно выводить показания других датчиков. В данном конкретном примере DHT11 можно заменить на DHT22 без переписывания кода нужно только поменять тип на "DHT22" в третьей строчке скетча.










