Цифровий газовий датчик CCS811 для моніторингу якості повітря в приміщенні по CO2 та TVOC – програмний I2C драйвер з обробкою подій без GPIO переривань

249299

Програмний модуль драйвера сенсора еквівалентних рівнів CO2 та TVOC реалізує набір інструментів апаратної інтегральної схеми сенсора CCS811. В драйвері ми вирішили програмно опитувати сенсор і обробляти події на стороні головного контролера. Застосування послідовної шини, заощаджує/вивільняє порт контролера під сигнал INT. До програмної обробки подій на стороні контролера нас підштовхнула відсутність апаратної реалізації обробки подій за порогами по TVOC (сенсор підтримує лише події для CO2 у ppm), що робить неможливим для користувача вказувати пороги у ppb для обробки рівнів TVOC. Варто згадати про гістерезис, який в апаратній реалізації чіпа є фіксованим і становить 50 ppm для CO2.

Ми реалізували в драйвері наступні задачі: події обробляються як для CO2 так і для TVOC із можливістю задавати гістерезис індивідуально; GPIO займає лише шина I2C, користувач вказує пороги не у двійкових “сирих” числах, а у ppm для CO2 та у ppb для TVOC. Введено спеціальний коефіцієнт достовірності вимірюваних величин, адже сенсор у відповідності до документації починає стабільно працювати лише через певний проміжок часу. Виконується компенсація по температурі та вологості. Стани за подіями розрізняються які: “Норма” / “Нижче норми” / “Вище норми” / “Невідомий”.

Продукт ccs811_drv , після запуску у середовищі Lua, «фоново» працює як повноцінний модуль зі своїми публічними методами, що зареєстровано у системному оточенні і котрі можливо викликати з рівня мови Lua. У модулі реалізовано методи ініціалізації ccs811.init()  та читання поточних значень ccs811.readout() , а також службовий метод event()  що обробляє події зміни стану.

Очистити

Опис

Digital gas sensor CCS811 for monitoring indoor air quality via CO2 and TVOC – software I2C driver with event handling without GPIO interrupts

Цей програмний модуль розроблявся і тестувався для роботи з

  • Прошивкою NodeMCU 3.0.0.0 built on nodemcu-build.com provided by frightanic.com
  • branch: master
  • release: 3.0-master_20200610
  • build created on 2020-07-28
  • powered by Lua 5.1.4 on SDK 3.0.1-dev(fce080e)
  • Для роботи модуля, прошивка NodeMCU має містити обов’язковий модуль I2C
  • Тестовий стенд, крім мікроконтролера ESP8266 з прошивкою NodeMCU, має включати до свого складу сенсор CCS811 у вигляді модуля. Вивід Int для обробки подій в даній реалізації програмного продукту не застосовується.
  • Обробка подій виконується періодичним опитуванням регістрів CCS811, а період налаштовується користувачем.
  • Також драйвер реалізує можливість компенсації впливу температури та вологості оточуючого середовища. Для цього потрібно підключити до головного контролера додатковий сенсор(и).

Цей програмний модуль драйвера сенсора еквівалентних рівнів CO2 та TVOC реалізує повний набір інструментів апаратної інтегральної схеми сенсора CCS811. В даному драйвері ми вирішили програмно опитувати сенсор і обробляти події на стороні головного контролера. Застосування лише послідовної шини, заощаджує/вивільняє порт контролера під сигнал INT. Також, до програмної обробки подій на стороні контролера, нас підштовхнула відсутність апаратної реалізації обробки подій за порогами по TVOC (сенсор підтримує лише події для CO2 у ppm), що робить неможливим для користувача вказувати пороги у ppb для обробки рівнів TVOC. Варто згадати про гістерезис, який в апаратній реалізації чіпа є фіксованим і становить 50 ppm для CO2.

А отже, ми реалізували в драйвері наступні задачі:

  • події обробляються як для CO2 так і для TVOC із можливістю задавати гістерезис індивідуально;
  • GPIO займає лише шина I2C, користувач вказує пороги не у двікових “сирих” числах, а у ppm для CO2 та у ppb для TVOC;
  • введено спеціальний коефіцієнт достовірності вимірюваних величин, адже сенсор у відповідності до документації починає стабільно працювати лише через певний проміжок часу;
  • виконується компенсація по температурі та вологості.

Стани за подіями розрізняються які: “Норма” / “Нижче норми” / “Вище норми” / “Невідомий”.

Продукт ccs811_drv , після запуску у середовищі Lua, «фоново» працює як повноцінний модуль зі своїми публічними методами, що зареєстровано у системному оточенні і котрі можливо викликати з рівня мови Lua. У модулі реалізовано методи ініціалізації ccs811.init()  та читання поточних значень ccs811.readout() , а також службовий метод event()  що обробляє події зміни стану.

Реєстрація модуля у системному оточенні:

Примітка 1. Так викликати можливо як вихідний *.lua код, так і компільований *.lc.

Примітка 2. Рекомендуємо виконувати виклик модуля з файлу початкового завантаження init.lua .

Публічні методи модуля:

ccs811.init()  – ініціалізація модуля із заданими параметрами;

ccs811.readout()  – зчитування поточного значення рівня eCO2 & TVOC.

Розробник може за допомогою API, котрий надає модуль, реалізувати власний алгоритм подальшої обробки подій чи реакції на них, засобами мови Lua та бібліотек мікроконтролера NodeMCU.

Для кого цей продукт

Кожен наш програмний продукт розроблено із застосуванням безмежного розмаїття можливостей простих і доступних контролерів, сенсорів та інших електронних компонентів, які можна знайти у будь-якому магазині. Головна наша мета – надати прості і недорогі інструменти швидкого вирішення задуманих проектів.

Для використання програмного модуля ccs811_drv  підійде будь-який модуль чи плата на базі ESP8266-12e/f з прошивкою NodeMCU.

Ми будемо раді, якщо нашими продуктами скористаються:

  • Діти та їх батьки;
  • Учні та їх вчителі;
  • Студенти та їх лабораторні роботи;
  • Новачки у технологіях Інтернету речей;
  • Лаборанти та їх експерименти;
  • Аматори-електронщики-не-програмісти;
  • Аматори-програмісти-не-електронщики;
  • Професійні інженери та їх поважні замовники;

Можливості сучасних обчислювальних систем настільки потужні і всеосяжні, що дані програмні компоненти однаково добре згодяться як для домашньої автоматизації і факультативного навчання, так і комерційного впровадження, або швидкого розгортання окремих сегментів комерційних систем та виконання їх пілотних випробувань.

Необхідні навички та інструменти

Всі програмні продукти на нашому сайті розраховано на користувачів, які вже вміють самостійно підключати, прошивати та програмувати контролер ESP8266 з прошивкою NodeMCU і мовою програмування Lua.

Таким чином, застосування даного комерційного-придбаного програмного модуля Клієнтом полягає у тому, щоб:

  • завантажити (download) lua-код у середовище розробника на комп’ютер,
  • ознайомитися з кодом і супутніми матеріалами пакету постачання,
  • адаптувати код за необхідності під свої задачі,
  • вивантажити (upload) програмний код у контролер та запустити на виконання;
  • після тестування придбаного коду, користувач може інтегрувати його до своїх власних програмних розробок.

Проте, Ви можете ознайомитися з інструкцією на нашому сайті, як швидко почати програмувати на Lua з контролером NodeMCU/ESP8266 за цим посиланням Як швидко почати працювати з контролером NodeMCU/ESP8266.

Або з докладною інструкцією за цим посиланням:   ESP8266 з прошивкою NodeMCU / Lua – докладна інструкція з програмування під Windows

Додаткова інформація

Рівень складності

Складний

Передача даних назовні

Немає

Тип виконання

Модуль з повним API

Локальний Web-сервер

Немає

Журналювання

Немає

Енергоспоживання

Звичайне

Композиція скриптів

Один скрипт

Статистична обробка даних

Немає

Перевірена версія прошивки

3.0-master_20200610

Отримання точного часу

Немає

Інтерфейс користувача

Немає

Виробники апаратного забезпечення

ams, ScioSense

Необхідні модулі прошивки

i2c модуль

Мінімальна сумісна версія прошивки

1.5.4.1-master_20161201

комплект:

модуль, модуль + коментарі

Інтерфейсна шина

I2C