В этом проекте мы узнаем о применении Arduino IoT Cloud вместе с ESP32. Недавно сообщество Arduino запустило свою платформу Интернета вещей (IoT) под названием Arduino IoT Cloud (облако IoT). С ее помощью вы можете подключить несколько устройств друг к другу и позволить им обмениваться данными в реальном времени. Вы также можете контролировать данные из любой точки мира с помощью простого пользовательского интерфейса. Чтобы узнать больше об Arduino IoT Cloud, вы можете ознакомиться с разделом документации.
Например, вы можете управлять несколькими бытовыми приборами с панели Arduino IoT Cloud Dashboard. Мы подключим 4-канальное реле к модулю ESP32 WiFI и будем отправлять команды ВКЛ/ВЫКЛ либо с панели мобильного телефона, либо с панели компьютера и реле управления, светом или чем-либо еще. Итак, давайте посмотрим, как можно развернуть всю эту систему.
Ранее на нашем сайте мы уже рассматривали достаточно много различных проектов автоматизации дома на основе различных микроконтроллеров (плат), наиболее популярными среди которых являются следующие:
- автоматизация дома на Raspberry Pi с управлением с веб-страницы;
- управление светом в доме с помощью сенсорного датчика и Arduino;
- автоматическая регулировка температуры в доме с помощью терморезистора и Arduino;
- автоматизация дома на Arduino под управлением смартфона.
Необходимые компоненты
- Модуль ESP32 (купить на AliExpress).
- Реле 5В - 4 шт. (купить на AliExpress).
- Регулятор напряжения 7805 (купить на AliExpress).
- Разъем питания постоянного тока DCJ0202.
- Диод 1N4007 - 4 шт.
- Резистор 330 Ом - 5 шт.
- NPN-транзистор BC547 - 4 шт.
- Клеммная колодка 5мм - 4 шт.
- Светодиод 5мм любого цвета (купить на AliExpress).
- Разъем типа "мама" 2,54 мм - 2 комплекта.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема для проекта автоматизации дома с использованием Arduino IoT Cloud и ESP32 очень проста и приведена на рисунке ниже. Я использовал программное обеспечение Fritzing для рисования схемы. Приведенная ниже схема предназначена только для сборки макетной платы.
Плата ESP32 имеет достаточно много контактов GPIO для реализации проектов подобного типа. В этом проекте мы будем использовать ее контакты GPIO19, GPIO21, GPIO22 и GPIO23 для управления реле. На выходе реле мы будем использовать лампочки для тестирования и демонстрации. Вы можете использовать адаптер постоянного тока 9 В для питания схемы, поскольку выход регулятора напряжения 7805 IC подключается к Vin ESP32.
Печатная плата для проекта
Если вы не хотите собирать схему на макетной плате и вам нужна печатная плата для проекта, то вот печатная плата для вас. Я использовал EasyEDA для проектирования печатной платы. Печатная плата для домашней автоматизации с ESP32 выглядит примерно так, как показано ниже.
Файл Gerber для изготовления данной печатной платы вы можете скачать по следующей ссылке.
Настройка панели управления Arduino IoT Cloud
Теперь пришло время настроить панель управления Arduino IoT Cloud. Перейдите в Arduino Store. Нажмите на IoT Cloud.
Затем вам нужно сначала создать Thing. Для этого нажмите add variable («добавить переменную»).
Назовите переменную как-нибудь вроде Light1. В типе переменной выберите bool. Таким образом, будет выполнено автоматическое объявление переменной. Затем нажмите Add variable («Добавить переменную»). Первая переменная создана.
Аналогичным образом создайте еще три переменные с именами Light2, Light3, Light4.
Теперь нам нужно настроить устройство. Для этого выберите опцию устройства. Из списка выберите устройство стороннего производителя. Затем выберите ESP32. Из этого списка выберите ESP32 Developer Module.
Нажмите, чтобы продолжить, и дайте устройству любое имя. Затем нажмите Next («Далее»). Таким образом, здесь создается идентификатор устройства и секретный ключ. Сохраните этот идентификатор устройства для кода программы. Или просто загрузите этот PDF-файл, содержащий информацию о секретном ключе. Затем нажмите continue («Продолжить»).
Теперь вам снова нужно настроить сетевые учетные данные. Так что введите свой SSID, пароль, а также секретный ключ, который вы создали ранее. Наконец, теперь все настроено.
Переходим в панель инструментов - нам нужно ее настроить.
Из опции редактирования добавьте переменную. Поэтому выберите switch (переключатель).
Дайте ему любое имя. Затем привяжите переменную. Нажмите Done («Готово»).
Аналогично добавьте еще 3 переменные для 3 разных переключателей и свяжите переменную с ними. Вы можете расположить виджет или изменить его размер по своему усмотрению.
Итак, наконец-то мы закончили. Настройка панели инструментов готова.
Исходный код программы
Теперь перейдем к скетчу домашней автоматизации с Arduino IoT Cloud и ESP32.
В коде программы у нас имеется 4 переменные с автоматически объявленным типом bool.
1 2 3 4 |
bool light1; bool light2; bool light3; bool light4; |
В функции setup() мы определим 4 контакта ESP32 как выходные контакты. Эти 4 контакта — контакты 19, 21, 22 и 23.
1 2 3 4 |
pinMode (19, OUTPUT); pinMode (21, OUTPUT); pinMode (22, OUTPUT); pinMode (23, OUTPUT); |
Инициализируйте их уровнем HIGH, чтобы изначально все приборы были выключены.
1 2 3 4 |
digitalWrite (19, HIGH); digitalWrite (21, HIGH); digitalWrite (22, HIGH); digitalWrite (23, HIGH); |
Ниже функции void Light назначьте условие, что если команда с контакта панели инструментов Arduino IoT Cloud имеет высокий уровень, реле должно включиться. В противном случае, если команда имеет низкий уровень, реле должно выключиться.
1 2 3 4 5 6 7 8 |
if (light1==1) { digitalWrite (19, LOW); } else { digitalWrite (19, HIGH); } |
Вот полный код, который вы можете использовать для этого проекта.
Home_Automation.ino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#include "arduino_secrets.h" /* Sketch generated by the Arduino IoT Cloud https://cloud.arduino.cc/ Arduino IoT Cloud Variables description The following variables are automatically generated and updated when changes are made to the Thing bool light1; bool light2; bool light3; bool light4; Variables which are marked as READ/WRITE in the Cloud Thing will also have functions which are called when their values are changed from the Dashboard. These functions are generated with the Thing and added at the end of this sketch. */ #include "thingProperties.h" void setup() { // Initialize serial and wait for port to open: Serial.begin(9600); pinMode (19, OUTPUT); pinMode (21, OUTPUT); pinMode (22, OUTPUT); pinMode (23, OUTPUT); digitalWrite (19, HIGH); digitalWrite (21, HIGH); digitalWrite (22, HIGH); digitalWrite (23, HIGH); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found delay(1500); // Defined in thingProperties.h initProperties(); // Connect to Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection); /* The following function allows you to obtain more information related to the state of network and IoT Cloud connection and errors the higher number the more granular information you’ll get. The default is 0 (only errors). Maximum is 4 */ setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); } void loop() { ArduinoCloud.update(); // Your code here } void onLight1Change() { if (light1==1) { digitalWrite (19, LOW); } else { digitalWrite (19, HIGH); } } void onLight2Change() { if (light2==1) { digitalWrite (21, LOW); } else { digitalWrite (21, HIGH); } } void onLight3Change() { if (light3==1) { digitalWrite (22, LOW); } else { digitalWrite (22, HIGH); } } void onLight4Change() { if (light4==1) { digitalWrite (23, LOW); } else { digitalWrite (23, HIGH); } } |
thingProperties.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Code generated by Arduino IoT Cloud, DO NOT EDIT. #include <ArduinoIoTCloud.h> #include <Arduino_ConnectionHandler.h> const char THING_ID[] = "86fc6944-21a5-4447-a980-125dc1b15276"; const char DEVICE_LOGIN_NAME[] = "7a1770df-b86b-46df-b8de-5a3603eb8d68"; const char SSID[] = SECRET_SSID; // Network SSID (name) const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP) const char DEVICE_KEY[] = SECRET_DEVICE_KEY; // Secret device password void onLight1Change(); void onLight2Change(); void onLight3Change(); void onLight4Change(); bool light1; bool light2; bool light3; bool light4; void initProperties(){ ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME); ArduinoCloud.setSecretDeviceKey(DEVICE_KEY); ArduinoCloud.setThingId(THING_ID); ArduinoCloud.addProperty(light1, READWRITE, ON_CHANGE, onLight1Change); ArduinoCloud.addProperty(light2, READWRITE, ON_CHANGE, onLight2Change); ArduinoCloud.addProperty(light3, READWRITE, ON_CHANGE, onLight3Change); ArduinoCloud.addProperty(light4, READWRITE, ON_CHANGE, onLight4Change); } WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS); |
arduino_secrets.h
1 2 3 |
#define SECRET_SSID "" #define SECRET_PASS "" #define SECRET_DEVICE_KEY "" |
Помимо части кода, нам нужно загрузить код. Но перед этим нам нужно установить драйвер или установить Agent (агента) для прошивки кода прямо из браузера. Следуйте инструкциям на экране, чтобы установить агента.
После установки драйвера появится COM-порт. Затем выберите из списка плату разработчика ESP32 и COM-порт. Затем загрузите код. Загрузка кода займет некоторое время, и когда она будет завершена, под окном появится сообщение.
Тестирование работы проекта
После загрузки кода откройте Serial Monitor (окно монитора последовательной связи). Он покажет, что соединение WiFi установлено, а затем устройство подключено к панели инструментов Arduino IoT Cloud.
Откройте панель управления, чтобы увидеть, что переключатель можно включить и выключить, включить или отключить. Вы можете провести начальное тестирование. Здесь мы можем отправить команду, чтобы увидеть, включится ли светодиод на плате реле или нет.
Также вы можете управлять приборами из Mobile Dashboard (мобильной версии панели инструментов). Для этого установите Arduino IoT Remote из Playstore. Войдите, используя тот же идентификатор и пароль.
Для легкого управления приборами перейдите на панель инструментов.