Однажды, сидя на работе и чувствуя некомфортность в дыхании, решил собрать измеритель СО2.
Изучив несколько статей на эту тему сформулировал требования к прибору.
Последний пункт неоднозначно привел к вводу, что прибор будет на ESP. Так как большой производительности мне не нужно, то выбираю дешевый вариант — ESP8266, 07 которая. Дома как раз завалялся экземпляр с 1 мб памятью.
Заказал недостающие запчасти на алиэкспресс, а ими были:
По получении деталей приступил к разработке схемы с помощью KiCad.
Сразу скажу — все исходники будут в конце статьи и собрав по схемам, залив прошивку, должны получить полностью рабочий прибор.
Схема вышла такой:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/586/54e/9f2/58654e9f2abb832f1884fdf9930289d4.png)
Модули решил делать съемными, поэтому на схеме самих модулей нет, а только разъёмы под них.
Развел плату:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/ecd/642/39d/ecd64239d067adf6cad3f5d93df58db7.png)
После изготовления печатной платы и пайки вышло следующее:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/675/f89/3e5/675f893e5969c4d8a54754420949497b.png)
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/725/db9/9d3/725db99d3353086b9b26c26471880f95.png)
В сборе и в работе выглядит так:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/be2/7eb/fae/be27ebfae5e1f3a020ebdfd315f6a477.png)
Теперь о программной части.
Код писался в Arduine IDE, так как я не программист, и разбираться с библиотеками в визуал студии или еще где — не хотелось.
В принципе, код для модулей в приборе я использовал из примеров библиотек и из просторов интернета, так что на нем останавливаться не буду. Кто захочет — запросто разберется в скетче.
А вот реализовать просмотр и вывод статистики по времени получилось не так просто.
Хотелось так: с мобильного телефона или ноутбука как можно проще подключится к прибору, через HTML броузер зайти на страничку с данными и просмотреть из в виде графика по времени.
Первое — на ESP создал точку доступа без паролей и аутентификаций.
Второе — создал массив данных, в которые записываю данные СО2 и время съёма данных (для этого, собственно, в прибор устанавливал часы.
Третье — настроил HTTP сервер и несколько HTML страничек, на одной из которых вывожу данные.
Четвертое — Java Script по отрисовке графика на страничке записал в файловую систему ESP.
Так как вывод графика оказался возможным только с помощью Java Script, то, после долгих экспериментов, четвертый пункт реализовал так: самый простой скрипт Chart.js в виде файла записал в файловую систему SPIFFS ESP, который, страничка, отображающая результат, и запрашивает.
В общем, включив прибор, на дисплее каждые 10 -15 секунд отображаются новые показания датчика, а каждые 8 минут текущие показания датчика записываются в массив данных.
Спустя какое то время, захотев проанализировать показания во времени, подключаетесь через телефон или ноутбук к вайфай точке «СО2», после подключения стартуете интернет браузер и в строке поиска вводите IP адрес «10.10.10.1». Попадаете на страничку:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/bc3/9c1/a54/bc39c1a54ff54c02447343b017839d6c.png)
Тут кнопка перехода на страницу просмотра данных и кнопка перехода на страницу задания времени (так как время иногда сбивается, и точно сбивается при замене батарейки).
Страничка с выводом данных выглядит так:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/a8c/968/366/a8c9683666d6a32276df41c4da153c84.png)
Архив с исходниками тут.
В архиве лежат скетч, Java Script, Kicad проект, печатка в фотошоповском формате в разрешении 600dpi, на случай если с Kicad возится не захочется.
Как настроить Adruino ide для прошивки ESP и как заливать файлы в SPIFS можно легко найти в интернете.
Для прошивки ESP нужно будет отсоединять датчик СО2, так как он висит на TX0 и RX0, которые нужны для прошивки. Так же, я на плате линии данных подписал наоборот, чтобы TX с прошивальщика подключить к TX на плате и т.д.
Изучив несколько статей на эту тему сформулировал требования к прибору.
- Прибор должен быть с экраном, так как это должен быть переносной девайс.
- Прибор не должен зависеть от интернета по той же причине.
- Прибор должен уметь логировать значения во времени, которые удобно в любой момент просматривать. А это означает, что он должен иметь собственный веб сервер и свою вайфай точку.
Последний пункт неоднозначно привел к вводу, что прибор будет на ESP. Так как большой производительности мне не нужно, то выбираю дешевый вариант — ESP8266, 07 которая. Дома как раз завалялся экземпляр с 1 мб памятью.
Заказал недостающие запчасти на алиэкспресс, а ими были:
- Oled display 96x64 SSD1331.
- MH-Z19B CO2 sensor.
- DS1307 RTC module.
По получении деталей приступил к разработке схемы с помощью KiCad.
Сразу скажу — все исходники будут в конце статьи и собрав по схемам, залив прошивку, должны получить полностью рабочий прибор.
Схема вышла такой:
![image](https://habrastorage.org/getpro/habr/post_images/586/54e/9f2/58654e9f2abb832f1884fdf9930289d4.png)
Модули решил делать съемными, поэтому на схеме самих модулей нет, а только разъёмы под них.
Развел плату:
![image](https://habrastorage.org/getpro/habr/post_images/ecd/642/39d/ecd64239d067adf6cad3f5d93df58db7.png)
После изготовления печатной платы и пайки вышло следующее:
![image](https://habrastorage.org/getpro/habr/post_images/675/f89/3e5/675f893e5969c4d8a54754420949497b.png)
![image](https://habrastorage.org/getpro/habr/post_images/725/db9/9d3/725db99d3353086b9b26c26471880f95.png)
В сборе и в работе выглядит так:
![image](https://habrastorage.org/getpro/habr/post_images/be2/7eb/fae/be27ebfae5e1f3a020ebdfd315f6a477.png)
Теперь о программной части.
Код писался в Arduine IDE, так как я не программист, и разбираться с библиотеками в визуал студии или еще где — не хотелось.
В принципе, код для модулей в приборе я использовал из примеров библиотек и из просторов интернета, так что на нем останавливаться не буду. Кто захочет — запросто разберется в скетче.
А вот реализовать просмотр и вывод статистики по времени получилось не так просто.
Хотелось так: с мобильного телефона или ноутбука как можно проще подключится к прибору, через HTML броузер зайти на страничку с данными и просмотреть из в виде графика по времени.
Первое — на ESP создал точку доступа без паролей и аутентификаций.
Второе — создал массив данных, в которые записываю данные СО2 и время съёма данных (для этого, собственно, в прибор устанавливал часы.
Третье — настроил HTTP сервер и несколько HTML страничек, на одной из которых вывожу данные.
Четвертое — Java Script по отрисовке графика на страничке записал в файловую систему ESP.
Так как вывод графика оказался возможным только с помощью Java Script, то, после долгих экспериментов, четвертый пункт реализовал так: самый простой скрипт Chart.js в виде файла записал в файловую систему SPIFFS ESP, который, страничка, отображающая результат, и запрашивает.
В общем, включив прибор, на дисплее каждые 10 -15 секунд отображаются новые показания датчика, а каждые 8 минут текущие показания датчика записываются в массив данных.
Спустя какое то время, захотев проанализировать показания во времени, подключаетесь через телефон или ноутбук к вайфай точке «СО2», после подключения стартуете интернет браузер и в строке поиска вводите IP адрес «10.10.10.1». Попадаете на страничку:
![image](https://habrastorage.org/getpro/habr/post_images/bc3/9c1/a54/bc39c1a54ff54c02447343b017839d6c.png)
Тут кнопка перехода на страницу просмотра данных и кнопка перехода на страницу задания времени (так как время иногда сбивается, и точно сбивается при замене батарейки).
Страничка с выводом данных выглядит так:
![image](https://habrastorage.org/getpro/habr/post_images/a8c/968/366/a8c9683666d6a32276df41c4da153c84.png)
Архив с исходниками тут.
В архиве лежат скетч, Java Script, Kicad проект, печатка в фотошоповском формате в разрешении 600dpi, на случай если с Kicad возится не захочется.
Как настроить Adruino ide для прошивки ESP и как заливать файлы в SPIFS можно легко найти в интернете.
Для прошивки ESP нужно будет отсоединять датчик СО2, так как он висит на TX0 и RX0, которые нужны для прошивки. Так же, я на плате линии данных подписал наоборот, чтобы TX с прошивальщика подключить к TX на плате и т.д.