Сенсор освітленості MAX44009 – програмний I2C драйвер з обробкою подій без GPIO переривань

239279

Цей програмний модуль драйвера сенсора освітленості реалізує повний набір інструментів в обхід деяких незручних можливостей апаратної інтегральної схеми MAX44009. Через “дивну” реалізацію виробником мікросхеми режиму обробки переривань “віконного компаратора” з двома порогами, ми прийшли до рішення, що набагато ефективніше буде програмно опитувати сенсор і обробляти події на стороні головного контролера. Застосування лише послідовної шини, заощаджує/вивільняє порт контролера під сигнал INT. Також, до програмної обробки подій на стороні контролера, нас підштовхнула експоненційна природа значень порогів у регістрах сенсора, що робить неможливим для користувача вказувати пороги у люксах без спеціальних таблиць перерахунку. Ми ж, гарно попрацювали і вирішили всі згадані складнощі: події обробляються, GPIO займає лише порти під шину I2C, користувач вказує пороги не у двікових “сирих” числах, а у люксах.

Продукт max44009_drv, після запуску у середовищі Lua, «фоново» працює як повноцінний модуль зі своїми публічними методами, що зареєстровано у системному оточенні і котрі можливо викликати з рівня мови Lua. У модулі реалізовано методи ініціалізації max44009.init() та читання поточного значення max44009.readout(), а також службовий метод event() що обробляє події зміни стану на принципах: “Норма” / “Нижче норми” / “Вище норми”.

Очистити

Опис

Ambient Light Sensor MAX44009 Software I2C driver for with event handling without interrupt GPIO

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

  • Прошивкою 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, має включати до свого складу сенсор MAX44009 у вигляді модуля. Вивід Int для обробки подій в даній реалізації програмного продукту не застосовується.
  • Обробка подій виконується періодичним опитуванням регістрів MAX44009, а період налаштовується користувачем.

Цей програмний модуль драйвера сенсора освітленості реалізує повний набір інструментів в обхід деяких незручних можливостей апаратної інтегральної схеми MAX44009. Через “дивну” реалізацію виробником мікросхеми режиму обробки переривань “віконного компаратора” з двома порогами, ми прийшли до рішення, що набагато ефективніше буде програмно опитувати сенсор і обробляти події на стороні головного контролера. Застосування лише послідовної шини, заощаджує/вивільняє порт контролера під сигнал INT. Також, до програмної обробки подій на стороні контролера, нас підштовхнула експоненційна природа значень порогів у регістрах сенсора, що робить неможливим для користувача вказувати пороги у люксах без спеціальних таблиць перерахунку.

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

Зверніть увагу. В той час, як апаратний сенсор надає можливість забезпечувати зону нечутливості лише по часу, в нашому продукті таких параметри два:

  1. період опитування і обробки подій
  2. значення гістерезису, що приймається до уваги під час порівняння значень у функції обробки подій.

Продукт max44009_drv, після запуску у середовищі Lua, «фоново» працює як повноцінний модуль зі своїми публічними методами, що зареєстровано у системному оточенні і котрі можливо викликати з рівня мови Lua. У модулі реалізовано методи ініціалізації max44009.init() та читання поточного значення max44009.readout(), а також службовий метод event() що обробляє події зміни стану на принципах: “Норма” / “Нижче норми” / “Вище норми”.

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

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

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

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

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

max44009.readout() – зчитування поточного значення рівня освітленості.

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

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

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

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

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

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

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

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

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

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

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

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

А також з публікаціямі про датчик MAX44009:

MAX44009 22-bit I2C-bus Low Power Ambient Light Sensor

Чому в інтернет немає прикладів програми для сенсора рівня освітленості MAX44009 де б застосовувалися всі його можливості

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

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

Складний

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

Немає

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

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

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

Немає

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

Немає

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

Звичайне

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

Один скрипт

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

Немає

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

3.0-master_20200610

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

Немає

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

Немає

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

MAXIM INTEGRATED

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

i2c модуль

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

1.5.4.1-master_20161201

комплект:

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

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

I2C