Однажды, сидя на работе и чувствуя некомфортность в дыхании, решил собрать измеритель СО2.
Изучив несколько статей на эту тему сформулировал требования к прибору.
- Прибор должен быть с экраном, так как это должен быть переносной девайс.
- Прибор не должен зависеть от интернета по той же причине.
- Прибор должен уметь логировать значения во времени, которые удобно в любой момент просматривать. А это означает, что он должен иметь собственный веб сервер и свою вайфай току.
Последний пункт неоднозначно привел к вводу, что прибор будет на ESP. Так как большой производительности мне не нужно, то выбираю дешевый вариант — ESP8266, 07 которая. Дома как раз завалялся экземпляр с 1 мб памятью.
Заказал недостающие запчасти на алиэкспресс, а ими были:
- Oled display 96x64 SSD1331.
- MH-Z19B CO2 sensor.
- DS1307 RTC module.
По получении деталей приступил к разработке схемы с помощью KiCad.
Сразу скажу — все исходники будут в конце статьи и собрав по схемам, залив прошивку, должны получить полностью рабочий прибор.
Схема вышла такой:
Модули решил делать съемными, поэтому на схеме самих модулей нет, а только разъёмы под них.
Развел плату:
После изготовления печатной платы и пайки вышло следующее:
В сборе и в работе выглядит так:
Теперь о программной части.
Код писался в Arduine IDE, так как я не программист, и разбираться с библиотеками в визуал студии или еще где — не хотелось.
В принципе, код для модулей в приборе я использовал из примеров библиотек и из просторов интернета, так что на нем останавливаться не буду. Кто захочет — запросто разберется в скетче.
А вот реализовать просмотр и вывод статистики по времени получилось не так просто.
Хотелось так: с мобильного телефона или ноутбука как можно проще подключится к прибору, через HTML броузер зайти на страничку с данными и просмотреть из в виде графика по времени.
Первое — на ESP создал точку доступа без паролей и аутентификаций.
Второе — создал массив данных, в которые записываю данные СО2 и время съёма данных (для этого, собственно, в прибор устанавливал часы.
Третье — настроил HTTP сервер и несколько HTML страничек, на одной из которых вывожу данные.
Четвертое — Jawa Script по отрисовке графика на страничке записал в файловую систему ESP.
Так как вывод графика оказался возможным только с помощью Jawa Script, то, после долгих экспериментов, четвертый пункт реализовал так: самый простой скрипт Chart.js в виде файла записал в файловую систему SPIFFS ESP, который, страничка, отображающая результат, и запрашивает.
В общем, включив прибор, на дисплее каждые 10 -15 секунд отображаются новые показания датчика, а каждые 8 минут текущие показания датчика записываются в массив данных.
Спустя какое то время, захотев проанализировать показания во времени, подключаетесь через телефон или ноутбук к вайфай точке «СО2», после подключения стартуете интернет браузер и в строке поиска вводите IP адрес «10.10.10.1». Попадаете на страничку:
Тут кнопка перехода на страницу просмотра данных и кнопка перехода на страницу задания времени (так как время иногда сбивается, и точно сбивается при замене батарейки).
Страничка с выводом данных выглядит так:
Архив с исходниками тут.
В архиве лежат скетч, Java Script, Kicad проект, печатка в фотошоповском формате в разрешении 600dpi, на случай если с Kicad возится не захочется.
Как настроить Adruino ide для прошивки ESP и как заливать файлы в SPIFS можно легко найти в интернете.
Для прошивки ESP нужно будет отсоединять датчик СО2, так как он висит на TX0 и RX0, которые нужны для прошивки. Так же, я на плате линии данных подписал наоборот, чтобы TX с прошивальщика подключить к TX на плате и т.д.
Автор: 3DAlex