Создание Smart Home с Blynk
Установление связи между Silego GreenPAK и смартфоном под названием Blynk создает базовую интеллектуальную домашнюю систему.
Все подключенные ниже по потоку компоненты управляются устройством GreenPAK, конфигурируемой ИС смешанного сигнала (CMIC). Blynk - это платформа, совместимая как с iOS, так и с Android-смартфонами. Он может взаимодействовать с различными микроконтроллерами (например, Arduino, NodeMCU, Raspberry Pi, Beaglebone Black, Particle Photon и т. Д.). Он был разработан для IoT (Internet of Things) и способен удаленно управлять оборудованием и хранить / отображать данные с датчиков для любого желаемого проекта. Blynk идеально подходит для людей, у которых нет уровня знаний, необходимых для создания сложного приложения для смартфонов, или для быстрого прототипирования IoT.
Как показано на рисунке 1, интеллектуальная домашняя структура работает как двунаправленная сеть. Это можно объяснить двумя простыми общими примерами:

Рисунок 1. Интеллектуальная домашняя архитектура
Управление выходными компонентами:
Если пользователь хочет включить лампочку, расположенную внутри дома, им просто нужно нажать на виджет кнопки, связанный с лампочкой. После генерации запроса булевы данные (LOW или HIGH) перемещаются к серверам Blynk, которые сообщают Arduino о включении лампы. Затем Arduino обрабатывает данные и начинает передачу I2C в Silego GreenPAK (SLG46538V в этом случае, но может работать аналогично SLG46537V, SLG46533V и другим общим GreenPAK с асинхронной государственной машиной (ASM)). Значение регистра 0xF4 изменяется на 0x01, что превращает первый бит регистра I2C в виртуальный выход в HIGH. Это связано в то же время с контактом 7 (лампочка) в дизайне GP, который заставляет этот цифровой выходной контакт HIGH, активируя реле через созданную схему. Когда кнопка в виджет кнопки приложения не нажата, выход отключается.
Контроль входных датчиков:
Предположим, что ночью, когда все спят, злоумышленник решает войти в дом через окно. Как только они попытаются открыть окно, будильник и специальные огни будут включены (он был установлен таким образом в GP Design). Arduino будет часто контролировать все подключенные датчики GP5 через I2C (считывая регистр 0xF0), поэтому он обнаружит изменение значения регистра. Как и в нашем сценарии, значение будет 0x08, что будет означать, что цифровой входной контакт 4 активен, что в конечном итоге включит светодиод виджета и отправит уведомление в приложение, вызвав пользователя для обеспечения безопасности.
Приложение Blynk
Загрузите приложение и нажмите на эту ссылку: //docs.blynk.cc/. Любой может создать свою собственную учетную запись Blynk. Для этой заметки приложения был создан проект с несколькими кнопками, светодиодами, вкладками, электронной почтой, уведомлениями, ползунком, калибровочным, графическим и историческим графами. (Фигура 2).

Рисунок 2. Интерфейс HMI смартфона Blynk
Оттуда это просто вопрос настройки контактов (аппаратных контактов напрямую или просто виртуальных контактов, как в этом проекте) и некоторых других вариантов для каждого виджета, чтобы получить интерфейс человеко-машинного интерфейса (HMI), готовый запустить целевой проект.
Обоснование виджета:
- Кнопки: Есть несколько кнопок: один для активации лампочки, а другой для активации звукового сигнала, оба независимы.
- Светодиоды: имеется четыре светодиодных виджета, указывающих состояние каждого датчика, например: датчик движения (как MS), кнопка дверного звонка (DBB), датчик двери (DS) и датчик окна (WS)
- Вкладки. Включите дополнительные вкладки, чтобы лучше организовать виджетов.
- Электронная почта: включение уведомлений по электронной почте
- Уведомления. Включить уведомления о смартфонах.
- Ползунок: один ползунок для установки значения данных счетчика (от 0 до 248 в этом случае) CNT6 / DLY6 в GP Design
- Калибр: один датчик, показывающий уровень воды в баке дома
- График: один график, показывающий уровень воды в баке дома (такой же, как виджет датчика).
- Диаграмма истории: отображение статистики данных о резервуаре воды во времени (от часов до месяцев хранения данных)
Уведомления о событиях:
Поддерживаются два вида уведомлений: по электронной почте и через смартфоны (вы также можете добавлять уведомления Twitter). Вам нужно будет добавить виджеты уведомлений в приложение и записать правильные функции из библиотеки Blynk на Arduino IDE, чтобы включить модуль уведомлений. См. Рис. 3.

Рисунок 3. Примеры уведомлений
ESP8266 Модуль Wi-Fi
ESP8266 - это чип Wi-Fi с полным стеком TCP / IP и возможностями микроконтроллера. Через некоторые библиотеки и протоколы вы можете не только достичь связи с вашим оборудованием, но и стабилизировать его. Получить доброкачественную информацию с любым другим микроконтроллером или программируемым устройством через протокол UART через предварительно запрограммированные AT-команды внутри чипа.
Существует много видов модулей ESP8266, но для этого проекта используется ESP8266-01. Он подключен к Arduino, как показано на рисунке 4:

Рисунок 4. Схема подключения Arduino Mega и ESP8266
Модуль Wi-Fi работает с уровнями 3, 3 В, поэтому есть два варианта: более простой показан на рисунке 4. Он включает в себя подключение VDD-штырька ESP8266 к выводу 3.3V от Arduino и TX TX Arduino к делителю напряжения (преобразование 5v до 3, 3 В), а затем подключите уровень выходного напряжения к выходу RX модуля. Другой вариант - купить чип преобразователя уровня напряжения (или, возможно, плату источника питания 3, 3 В) для питания схемы ESP8266.
Библиотеки Blynk получат запросы на управление всем модулем с помощью AT-команд: от подключения к вашей WLAN дома, для отправки и получения как можно большего количества байтов данных.
Протокол I2C в SLG46538V является инструментом для многих проектов. Для этого GreenPAK ASM используется в качестве расширения выводов ввода-вывода, оставляя почти все контакты свободными на Arduino. Доступны некоторые заметки о приложениях (например, AN-1107 и AN-1090), где хорошо объясняется I2C. Почти все оборудование устройства GreenPAK можно контролировать с помощью I2C: настройка общего микроконтроллера в качестве мастера и GreenPAK в качестве ведомого. Через I2C можно считывать и записывать несколько команд байтов, штырьков, ASM RAM, счетчиков, LUT и многих других элементов в GreenPAK.
Конструкция GreenPAK основана на выводах GPIO, а инструмент протокола I2C блокирует соединения. Цифровые входы, такие как датчик движения, датчик двери, датчик окна и кнопка дверного звонка в автоматическом доме, связаны с контактами 2, 3, 4 и 5 соответственно. Их можно легко считывать из инструмента I2C, но также хорошо спроектированы с помощью шлюзов (LUT) для запуска одного или обоих цифровых выходов, включенных в проект. Например, когда нажата кнопка дверного звонка, она активирует сигнал тревоги для имитации только звука в дверном звонке. Когда датчик движения обнаружит кого-то, он включит свет (имитирует кого-то в комнате). Наконец, если датчик двери или датчик окна (через эффект Холла) обнаруживают какого-либо злоумышленника, они одновременно запускают сигнал тревоги и огни.
На штыре 10 также имеется лампа регулировки яркости, подключенная к двум счетчикам, которые имеют этот вывод в качестве выходного сигнала ШИМ, где CNT0 / DLY0 устанавливает частоту (100 Гц) и CNT6 / DLY6 устанавливает ширину импульса от 0 до 255. Однако там это диапазон ошибок приблизительно 3% для установки выходной ширины, поэтому предлагается отправить байты от 0 до 248 из приложения Blynk, чтобы получить отличную PWM.
Кроме того, часть контура ультразвукового датчика контролируется системой GreenPAK ASM. Он управляет импульсом запуска модуля через два счетчика: CNT3 / DLY3 для установки частоты (10 Гц) и CNT4 / DLY4 для установки ширины импульса, необходимой для активации процесса схемы датчика, тем самым создавая выходной сигнал «эхо», который будет принят с помощью платы Arduino для обработки данных.
Блок I2C подключается по умолчанию к выводу 8 (SCL) и выводу 9 (SDA). Адрес устройства равен 0x00, но также может быть установлен любой другой адрес от 0x00 до 0xF. Важно знать (на основе спецификации SLG46538V), что кадр записи I2C состоит из стартового бита, за которым следуют байт управления, адрес слова, данные и стоповый бит (рисунок 7). Кадр считывания I2C состоит из стартового бита, за которым следуют байт управления, адрес слова, бит запуска (снова), байт управления, данные и стоповый бит для завершения передачи (см. Примечание к приложению AN-1090 для получения дополнительной информации о том, как I2C).
Код Arduino
Для Arduino (с точки зрения аппаратного обеспечения) обновления не очень много, кроме подключения к модулю Wi-Fi. Выход эхосигнала ультразвукового датчика подключен к цифровому входному выводу 12 Arduino. Таким образом, Arduino может обрабатывать данные эхо-импульсов (более подробно о нем говорится ниже).
Что касается дизайна кода Arduino, некоторые библиотеки использовались для решения многих задач и упрощения программирования. Эти библиотеки: «ESP8266_Lib.h», «BlynkSimpleShieldEsp8266.h», «SimpleTimer.h» и «Silego.h». Код хорошо прокомментирован и объяснен (проверьте его, загрузив файл Arduino). Некоторые общие вещи объясняются:
// You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth() = "YourAuthToken"; // replace "YourAuthToken" for the token number of the Blynk project // Your WiFi credentials. // Set password to "" for open networks. char ssid() = "YourNetworkName"; // replace "YourNetwokName" for the name of your network char pass() = "YourPassword"; // replace "YourPassword" for the wifi password
Чтобы установить проект дома, необходимо ввести номер Token Token. Чтобы найти его, просто откройте приложение Blynk, войдите в свою учетную запись (если вы ее не создали, просто зарегистрируйтесь), создайте проект и перейдите к настройкам проекта. Там можно увидеть номер маркера Auth (см. Пример на рисунке 10). Как только вы его найдете, просто введите число в коде Arduino или упростите отправку этого кода в электронную почту через приложение. Затем его можно просто скопировать и вставить на ПК. Кроме того, необходимо ввести имя и пароль WLAN, как и любое другое электронное устройство на базе Wi-Fi.

Рисунок 6. Настройки проекта
Если требуется работать со светодиодными виджетами в приложении, просто добавьте столько же объектов WidgetLED, сколько требуется в коде Arduino. Для этого примечания к приложению были добавлены все датчики, которые используются для создания проекта.
Существуют и другие важные объекты для определения таких как Wi-Fi из классов библиотеки ESP8266 и таймер из более простых классов таймера.
Кроме того, адрес GreenPAK ASM должен быть определен, в данном случае 0x00.
ESP8266 wifi(&EspSerial); WidgetLED movementSensor(V2); // Creating Widgets using virtual pins on Blynk WidgetLED doorSensor(V3); // There are a large virtual pins available to use WidgetLED windowSensor(V8); WidgetLED doorBellButton(V4); SimpleTimer timer; Silego silego(0x00); // GreenPAK ASM I2C slave Address
Если какое-либо значение должно быть записано из приложения на виртуальный вывод, рекомендуемым способом работы с ним является функция BLYNK_WRITE (имя виртуального булавка), чтобы узнать виртуальный вывод, который должен быть прочитан из Blynk. За этим следует ввести имя булавки в качестве параметра в функции. Таким образом, param.asInt () должен быть вызван внутри функции, которая возвращает целочисленное значение (оно может быть байтом или булевым), которое необходимо обработать для создания триггера для выполнения других предложений в коде.
BLYNK_WRITE(V0) //Button Widget is writing to pin V0 { int statusBulb = param.asInt(); // Saves Light Bulb status if (statusBulb) { silego.writeI2C(0xf4, 0x01); // Set GP5's pin 7 HIGH (Light Bulb) by the virtual pin 0 in GP Design } else { silego.writeI2C(0xf4, 0x00); // Clear register 0xf4 (all virtual inputs) } }
Очень важно при использовании Blynk с Arduino оставить функцию цикла void, используя только функцию Blynk.run (), если это возможно, и избежать любых длинных миллисекундных задержек с задержкой (). Следствием этого может быть остановка связи между Arduino и Blynk или задержка передачи данных. Тем не менее, всегда желательно добавить некоторые другие функции в код Arduino в дополнение к тому, что предлагают приложения, и именно поэтому timer.setInterval (миллисекунды, функция FunctionToExecute) из функции «SimplerTimer.h» используется в настройке кода, чтобы проверьте функцию проекта общего назначения, необходимую для ее выполнения, чтобы добавить другие функции. Для этого примера это timer.setInterval (100L, readInputs), что означает, что на каждые 100 миллисекунд Arduino будет запускать функцию readInputs ().
void setup() { pinMode(echo, INPUT); // echo from ultrasonic sensor connected on pin 12 // Set console baud rate Serial.begin(74880); // Any baud rate desired delay(10); // Set ESP8266 baud rate EspSerial.begin(ESP8266_BAUD); //74880 of baud rate delay(10); Blynk.begin(auth, wifi, ssid, pass); // This function connects ESP8266 to wifi network // and then with Blynk servers timer.setInterval(100L, readInputs); }
readInput (), является одной из наиболее важных функций в проекте, поскольку она считывает цифровые входы GreenPAK с помощью инструмента I2C, затем оценивает возвращаемый номер байта, чтобы узнать, какой датчик активирован. Как только Arduino знает, какой датчик он считывает, он запускает (включает ON) соответствующий светодиодный виджет, записывая ранее настроенный объект виртуального номера. Таким образом, пользователь может наблюдать, когда датчик обнаруживает что-то, просто проверив приложение, но это также вызовет некоторые уведомления с помощью функции Blynk.notification (); например, Arduino читает GreenPAK ASM и знает, что датчик движения обнаружил кого-то, поэтому он вызовет движениеSensor.on () и уведомление смартфона, в котором говорится: «В гостиной есть кто-то».
void readInputs() { readingByte = silego.readI2C(0xf0); //read input pins associated to 0xf0 register switch (readingByte) { case 0x02: // if input pin 2 is HIGH movementSensor.on(); // Blynk's movement sensor widget LED is ON doorSensor.off(); windowSensor.off(); doorBellButton.off(); Blynk.notify("There is someone in the Living Room"); // Sends the notification to your smartphone break; case 0x04: // if input pin 3 is HIGH movementSensor.off(); doorSensor.on(); // Blynk's door sensor widget LED is ON windowSensor.off(); doorBellButton.off(); Blynk.notify("ALERT. An intruder opened the Door"); // Sends the notification to your smartphone delay(10); Blynk.email("", "ALERT", "An intruder opened the Door"); // Sends the notification to your email break;
Наконец, эта функция также считывает ультразвуковой эхо-сигнал через функцию, называемую pulseIn (), она измеряет, как долго импульс эха остается HIGH в микросекундах, тогда он переводит это время в сантиметры, используя следующую формулу: distance = microseconds / 58 (check приложение AN-1050 для получения дополнительной информации о том, как работает ультразвуковой датчик); Как только значение расстояния известно, функция Blynk.virtualWrite () используется для записи любого виртуального на Blynk, например, для этого модуля Smart Home, значение расстояния отправляется на виртуальные контакты 6 и 7, где виртуальный вывод 6 связан с калибровочного виджета и вывод 7 в графический виджет в приложении, чтобы показать, как ведет себя эта переменная (имитируя уровень воды в резервуаре на расстоянии).
// This part covers the ultrasonic's echo pulses processing duration = pulseIn(echo, HIGH); // Counts the time echo pin is HIGH in microseconds and saves it distance = duration / 58; // translating that time duration to centimeters, so we can know // eg the distance between water and the sensor in a water tank // So this will calculate how much water is in the tank at home, if you // place it at the top of the tank, facing down to the water Blynk.virtualWrite(V6, distance); // It sends the distance value to two different Virtual pins for X purpose Blynk.virtualWrite(V7, distance); // inside Blynk app if (distance > 100 & distance160 & distance < 200) { Blynk.notify("Tank level is below 20%"); // Sends the notification to your smartphone } }
Что касается уведомления уровня бака, были использованы некоторые основные условия: сообщить пользователю, когда уровень воды низкий, а когда он находится между 100-150 см (это означает, что уровень воды ниже 50%). Кроме того, когда он находится между 160-200 см, уровень воды ниже 20%.
Примечание: для более легкого моделирования уровня водяного бака был изменен момент, когда уведомления о уровне воды произошли в демонстрации видео; поэтому, когда вода была между 100-50 см, уровень воды был ниже 50%; когда он составлял 40-40 см, уровень воды был ниже 20%. Как можно заметить, условия были инвертированы только для демонстрации симуляции в видео проекта.
Соответствующая схема схемы GPIO
Для цифрового выхода лампочки была применена общая изолированная цепь (с оптопарами и реле 5 В и выходом 120 В переменного тока на нормально разомкнутом штыре). (См. Рисунок 8)
Для остальных схем датчики как цифровые входы подключаются непосредственно к ASM GreenPAK. Другие цифровые выходы (например, зуммер и светодиод) напрямую связаны с некоторыми базовыми резисторами для их защиты.
Вывод
Микросхема GreenPAK ASM является эффективным устройством для использования в проектах IN Smart Home. Представьте, что установить шестнадцать (16) GreenPAK в качестве подчиненных устройств, управляемых главным микроконтроллером, сколько датчиков и элементов можно контролировать с помощью этой системы? Даже целое здание можно контролировать во многих аспектах с помощью очень недорогого решения (по крайней мере, от части контроллера в архитектуре системы).
Спецификация и инструменты
Компоненты и инструменты, используемые в проекте:
- SLG46538V Устройство GreenPAK
- Arduino Mega 2560
- ESP8266-01
- HC-SR501
- HC-SR04
- US1881 (2)
- Звуковой сигнал
- Дизайнер GreenPAK
- Arduino IDE
- Blynk
Другие компоненты и инструменты:
- светодиоды
- Сопротивляемость
- Реле 5В
- PNP и NPN-транзисторы
- Нажать кнопку
- Кабели Dupont
Отраслевые статьи - это форма контента, которая позволяет отраслевым партнерам делиться полезными новостями, сообщениями и технологиями с читателями All About Circuits таким образом, что редакционный контент не очень подходит. Все отраслевые статьи подчиняются строгим редакционным правилам с целью предоставления читателям полезных новостей, технических знаний или историй. Точки зрения и мнения, выраженные в отраслевых статьях, являются точками партнера, а не обязательно для All About Circuits или его авторов.