Съдържание:
- Стъпка 1: Спецификация на хардуера и софтуера
- Стъпка 2: Създаване на портал за задържане
- Стъпка 3: Предоставяне на идентификационни данни за WiFi и UbiDots
- Стъпка 4: Публикуване на показанията на сензорите в UbiDots
- Стъпка 5: Визуализиране на данните
- Стъпка 6: Общ код
Видео: UbiDots-Свързване на ESP32 и публикуване на данни от множество сензори: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
ESP32 и ESP 8266 са много познати SoC в областта на IoT. Това е нещо като благодат за IoT проектите. ESP 32 е устройство с интегриран WiFi и BLE. Просто дайте вашите SSID, парола и IP конфигурации и интегрирайте нещата в облака. Тук, в тази инструкция, ще разгледаме някои от основните условия на IoT като IoT платформа, MQTT, Captive портали и т.н. Така че нека да преминем през него
- Архитектурата на IoT с много прости думи се състои от вградено устройство и IoT платформа за поставяне на устройството в облака. Тук използваме UbiDots IoT платформата за визуализиране на сензорните данни.
- Управлението на IP настройките и потребителските идентификационни данни може да бъде главоболие за потребителя. Ами ако потребителят иска да промени идентификационните данни за WiFi? Ами ако потребителят иска да смени настройките за DHCP/статичен IP? Мигането на ESP32 всеки път не е надеждно и дори не е решение на тези проблеми. Така че ще преминем през портала за задържане, за да запазим идентификационните данни за WiFi и други конфигурации.
- MQTT сега се превръща в много често срещан термин в света на IoT. той е надминал заявките и отговорите (HTTP) от Publish and Subscribe поради бързата, здрава и чиста архитектура.
Тук, в тази инструкция, ще демонстрираме.
- Предоставяне на идентификационни данни за WiFi и MQTT чрез Captive Portal.
- Публикуване и абониране на множество сензорни данни за UbiDots.
- Четене на данните от сензора от безжичните сензори за температура и влажност.
- Хостинг на уеб формуляр от ESP32.
- Четене и писане от SPIFFS ESP32.
Стъпка 1: Спецификация на хардуера и софтуера
- ESP32 WiFi/BLE
- Безжичен сензор за температура и влажност
Спецификация на софтуера
Arduino IDE
Стъпка 2: Създаване на портал за задържане
Порталът за задържане е уеб страница, която се показва на новосвързаните потребители, преди да им бъде предоставен по -широк достъп до мрежовите ресурси. Тук обслужваме три уеб страници за избор между DHCP и статични IP настройки. можем да определим IP адреса към ESP по два начина.
- DHCP IP адрес- това е начин за динамично присвояване на IP адреса на устройството. IP адресът на ESP по подразбиране е 192.168.4.1
- Статичният IP адрес- присвояване на постоянен IP адрес на нашето мрежово устройство. за да предоставим статичния IP на устройството, трябва да определим IP адреса, адреса на шлюза и маската на подмрежата.
Първата уеб страница се хоства на адрес 192.168.1.77. Тук на потребителя са предоставени радио бутони за избор между DHCP и статични IP настройки. На следващата уеб страница трябва да предоставим информация, свързана с IP, за да продължим по -нататък.
HTML код
HTML кодът за уеб страници може да бъде намерен в това хранилище на Github. Можете да използвате всеки IDE или текстов редактор като Sublime или notepad ++ за създаване на HTML уеб страници.
- Първо създайте HTML уеб страница, съдържаща два радио бутона, за да избирате между DHCP и статични IP настройки.
- Сега създайте бутона, за да изпратите отговора си
- Дайте някакво име на бутоните за избор.
- Класът на уеб сървъра на ESP ще вземе тези имена като аргументи и ще получи отговора на радио бутоните, използвайки тези аргументи
- Сега поставете бутон „ИЗПРАЩАНЕ“, за да изпратите отговора на устройството. В другите уеб страници имаме текстови полета.
- Дайте стойността на името и типа на въвеждане в текстовото поле и добавете бутон за изпращане, за да изпратите отговора „SUBMIT“.
- Създайте бутон „RESET“, за да нулирате съдържанието на текстовото поле.
Стъпка 3: Предоставяне на идентификационни данни за WiFi и UbiDots
Основният проблем възниква при управлението на идентификационните данни за WiFi. Въпреки че имаме WiFiMulti библиотека за това, където можем да дадем множество SSID и пароли на устройството и устройството ще се свърже с наличната мрежа. Но какво ще стане, ако наличната мрежа не е в списъка WiFiMulti. Мигането на устройството ESP32 през цялото време не е надеждно решение.
За да разрешим този проблем, ние хостваме уеб страница, където потребителят може да представи SSID и парола на наличната мрежа. Работи по следния начин.
- Уеб страницата се хоства на статичен IP или DHCP IP, избран от потребителя от портала за задържане
- Тази уеб страница съдържа текстови полета за въвеждане на SSID, парола и идентификационен номер на маркера на UBIDOTS за свързване на устройството към UbiDots.
- Въведете SSID и паролата на вашия локален WiFi в полетата за въвеждане, Въведете идентификационния номер на маркера на UbiDot и въведете SUBMIT
- Тези идентификационни данни се записват в EEPROM на ESP32
- След 60 секунди устройството автоматично ще се изключи от точката за достъп
- Следващия път, когато включите устройството, Потребителят не трябва да следва тази процедура, Устройството автоматично ще извлече идентификационните данни на потребителя от EEPROM и ще продължи да публикува показанията на сензора в UbiDots.
Стъпка 4: Публикуване на показанията на сензорите в UbiDots
Тук използваме безжични сензори за температура и влажност с устройството ESP 32, за да получим данните за температурата и влажността. Изпращаме данните към UbiDots, използвайки протокола MQTT. MQTT следва механизъм за публикуване и абониране, а не тази заявка и отговор. Той е по -бърз и надежден от HTTP. Това работи по следния начин.
- Ние използваме Task Scheduler за планиране на задачата като извличане на данни от сензори, публикуване на показанията на сензора, абониране за тема MQTT.
- Първо, включете заглавните файлове на Task Scheduler, негов екземпляр и планира задачите.
- Планирали сме две задачи, отнасящи се до две различни контролни операции.
#define _TASK_TIMEOUT#include
Планировчик ts;
// --------- Tasks ------------ // Task tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Задача tWiFi (10* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
Задача 1 е за отчитане на стойността на сензора, тази задача се изпълнява за 1 секунда, докато достигне таймаут от 10 секунди
- Когато Task1 изтече, свързваме се с локален Wifi и MQTT брокер.
- Сега задача 2 е активирана и деактивираме задача 1
- Задача 2 е за публикуване на сензорните данни в UbiDots MQTT брокер Тази задача се изпълнява за 20 секунди, докато достигне таймаут от 20 секунди
- Когато Task2 изтече времето си, Task 1 се активира отново и Task2 е деактивиран. Тук отново получаваме актуализираната стойност и процесът продължава.
Четене на данните от сензора I2C
Получаваме 29-байтова рамка от безжичните сензори за температура и влажност. Тази рамка се манипулира, за да се получат данни за действителната температура и влажност
uint8_t данни [29];
данни [0] = Serial1.read (); забавяне (к); // chck за начален байт if (data [0] == 0x7E) {while (! Serial1.available ()); за (i = 1; i <29; i ++) {данни = Serial1.read (); забавяне (1); } if (data [15] == 0x7F) ///////, за да проверите дали получените данни са правилни {if (data [22] == 1) //////// уверете се, че типът на сензора е вярно {
влажност = ((((данни [24]) * 256) + данни [25]) /100.0); влажност /=10,0; cTempint = (((uint16_t) (данни [26]) << 8) | данни [27]); cTemp = (плаващ) cTempint /100.0; cTemp /= 10,0; fTemp = cTemp * 1.8 + 32; fTemp /= 10,0; батерия = произволна (100, 327); напрежение = батерия/100; nodeId = данни [16];}
Свързване към UbiDots MQTT API
Включете заглавния файл за процеса MQTT
#включва
дефинирайте други променливи за MQTT като име на клиент, адрес на брокер, идентификационен номер на маркера (Извличаме идентификационния номер на маркера от EEPROM)
#define MQTT_CLIENT_NAME "ClientVBShightime123"
char mqttBroker = "things.ubidots.com";
char полезен товар [100]; char тема [150];
// създаване на променлива за съхраняване на ID на токен
Низов tokenId;
Създайте променливи за съхраняване на различни сензорни данни и създайте променлива char за съхраняване на тема
#define VARIABLE_LABEL_TEMPF "tempF" // Задаване на етикета на променливата #define VARIABLE_LABEL_TEMPC "tempC" // Определяне на етикета на променливата #define VARIABLE_LABEL_BAT "bat" #дефиниране на VARIABLE_LABEL_HUMID "влажен" етикет
char topic1 [100]; char topic2 [100]; char topic3 [100];
публикуване на данните към споменатата тема за MQTT полезният товар ще изглежда като {"tempc": {стойност: "tempData"}}
sprintf (topic1, "%s", ""); sprintf (topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (полезен товар, "%s", ""); // Почиства полезния товар sprintf (полезен товар, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Добавя стойността sprintf (полезен товар, "%s {" стойност / ":%s}", полезен товар, str_cTemp); // Добавя стойността sprintf (полезен товар, "%s}", полезен товар); // Затваря скобите на речника Serial.println (полезен товар); Serial.println (client.publish (topic1, полезен товар)? "Published": "notpublished");
// Направете същото и за друга тема
client.publish () публикува данните в UbiDots
Стъпка 5: Визуализиране на данните
- Отидете на Ubidots и влезте в профила си.
- Придвижете се до таблото за управление от раздела Данни, посочен в горната част.
- Сега щракнете върху иконата "+", за да добавите новите джаджи.
- Изберете приспособление от списъка и добавете променлива и устройства.
- Данните от сензора могат да се визуализират на таблото за управление, като се използват различни приспособления.
Стъпка 6: Общ код
Over кодът за HTML и ESP32 може да бъде намерен в това хранилище на GitHub.
Кредити
- ncd ESP32 пробивна платка.
- ncd Безжични сензори за температура и влажност.
- pubsubclient
- UbiDots
- Планировчик на задачи
Препоръчано:
Множество сензори BMP280 в Arduino Uno чрез SPI: 6 стъпки
Множество сензори BMP280 в Arduino Uno чрез SPI: В този урок ще свържем три BMP280 на Arduino Uno чрез SPI, но можете да свържете до осем BMP280 на Uno, използвайки цифрови портове D3 до D10 като nSS (Slave Select) за всеки сензор. от пробите на атмосферното налягане, измерени с B
Arduino контролира множество сензори за P.I.R на един и същи борд: 3 стъпки
Arduino Управление на множество PIR сензори на един и същ борд: Днес ще ви кажа как да свържете множество PIR сензори с един Arduino Bord > тук също използвах 4 -канален релеен модул за някаква допълнителна функционалност. (ИЛИ Можете да използвате колкото се може повече пинове на вашия arduin
Множество инфрачервени температурни сензори - MLX90614: 4 стъпки
Множество инфрачервени температурни сензори - MLX90614: Това е кратко ръководство за това как да настроите множество безконтактни температурни сензори MLX90614B чрез I2C шината с Arduino uno и да покажете показанията на серийния монитор на Arduino IDE. Използвам предварително изградените платки, но ако закупите сензора b
2.4 TFT метеостанция Arduino с множество сензори: 7 стъпки
2.4 TFT метеостанция Arduino с множество сензори: Преносима метеорологична станция Arduino с TFT LCD и няколко сензора
Публикуване на данни за безжичен сензор за налягане с помощта на MQTT: 7 стъпки
Публикуването на данни за безжичен сензор за налягане с помощта на MQTT: ESP32 и ESP 8266 са много познати SoC в областта на IoT. Това е нещо като благодат за IoT проектите. ESP 32 е устройство с интегриран WiFi и BLE. Просто дайте своя SSID, парола и IP конфигурации и интегрирайте нещата в