IoT — pt.1 — Air quality sensor
Интернет вещичек — часть 1 — Датчик качества воздуха в помещении
Это крайне простое устройство замеряет температуру, влажность, давление, содержание углекислого газа и летучей органики в воздухе и отправляет данные MQTT брокеру. На основе этих данных другие устройства в нашей IoT сети смогут выполнять соответствующие ситуации действия, например включить вентиляцию или увлажнитель. Но в рамках данной статьи мы будем их просто выводить в дашборд.
Материалы
- Модуль ESP-12F
- Модуль CJMCU-8128
- Двухсторонняя макетная плата 70x30
- Резистор 4.7k
- Линейный стабилизатор LM1117–3.3
- Конденсаторы 10uF и 0.1uF по две штуки каждого
- Брэйкаут с micro-USB разъёмом.
- Монтажный провод
- Опционально 3Dпечатный корпус и винты M3x10 с гайками
- Еще опционально светодиод и резистор ~220
Для прошивки модуля потребуется USB-UART преобразователь с выходным высоким логическим уровнем 3.3V и пара временных кнопок для подключения к выводам RESET и FLASH.
Схема
Сборка
Традиционно, я для таких устройств предпочитаю не морочиться с ЛУТом или заказом плат на заводе, а быстро леплю на макетной плате в меру своих mad skillz. Поэтому подробно останавливаться на этом не будем.
Нужно. Просто. Соеднить. Всё. По. Схеме.
Получиться должно примерно следующее:
Код
Модуль CJMCU-8182 состоит из трех датчиков, подключенных к шине I2C — CCS811, BMP280 и SI7021.
Для их работы потребуется скачать в директорию проекта библиотеки:
https://github.com/dafvid/micropython-bmp280
https://github.com/chrisbalmer/micropython-si7021
https://github.com/Notthemarsian/CCS811
Туда же помещаем основные файлы прошивки
В предыдущей статье я рассказывал как установить и настроить MQTT брокер. Датчик будет подключаться к нему же, поэтому параметры соединения совпадают.
Надо ли мне говорить, что в файле config.py
необходимо указать свои адреса, логины и пароли?
Интервал сбора данных по умолчанию равен 300 секундам. Это, по-хорошему, тоже стоило вынести в конфиг, но при необходимости его можно изменить в строке 83 файла main.py
.
Прошивка
Наиболее внимательные читатели уже заметили, что код написан на micropython, а значит вновь понадобятся esptool и rshell.
Сначала прошиваем сам микропитон:
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio -ff 40m 0 esp8266–20200911-v1.13.bin
И затем код:
rshell -p /dev/ttyUSB0 -b 115200 cp config.py boot.py main.py bmp280.py si7021.py ccs811.py /pyboard
Процесс для всех моих поделок на микроконтроллерах ESP8266 всегда почти одинаков. Поэтому в будущем я буду ссылаться на свою статью про тикерный монитор, где он описан впервые.
Корпус
На этот раз я сделал скучный (по сравнению с брутальной простотой микроинфостенда) корпус-коробочку.
Скачать файлы для печати можно в проекте Onshape.
Дашборд
Через несколько секунд после включения, датчик отправит показания сенсоров в топики eCO2, tVOC, t0, t1, h0, p1
с префиксом sensor0/
Остается только добавить в MQTT Dashboard плитки для отображения этих данных.
Примечания
При первом запуске показания содержания углекислого газа и летучих органических веществ оказываются равны нулю. Через пять минут, впрочем, все показания собираются правильно.
Сенсор SI7021 был заклеен кусочком белого мягкого пластика. Возможно воздухопроницаемого. Проверить я это уже не могу, т.к. сразу отклеил его.
В моем случае, показания датчиков температуры завышены примерно на 5 градусов. На скриншоте выше T2 это температура в комнате по мнению BMP280, а T1 по мнению DS18B20 от на другом устройстве.