IoT — pt.1 — Air quality sensor

m0nochr0me
4 min readDec 27, 2020

--

Ξ

Интернет вещичек — часть 1 — Датчик качества воздуха в помещении

Это крайне простое устройство замеряет температуру, влажность, давление, содержание углекислого газа и летучей органики в воздухе и отправляет данные MQTT брокеру. На основе этих данных другие устройства в нашей IoT сети смогут выполнять соответствующие ситуации действия, например включить вентиляцию или увлажнитель. Но в рамках данной статьи мы будем их просто выводить в дашборд.

Материалы

  1. Модуль ESP-12F
  2. Модуль CJMCU-8128
  3. Двухсторонняя макетная плата 70x30
  4. Резистор 4.7k
  5. Линейный стабилизатор LM1117–3.3
  6. Конденсаторы 10uF и 0.1uF по две штуки каждого
  7. Брэйкаут с micro-USB разъёмом.
  8. Монтажный провод
  9. Опционально 3Dпечатный корпус и винты M3x10 с гайками
  10. Еще опционально светодиод и резистор ~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 от на другом устройстве.

--

--