Оглавление:
- Шаг 1. Спецификация оборудования и программного обеспечения
- Шаг 2: Сохранение учетных данных пользователя
- Шаг 3: Настройка вашей веб-формы в SPIFFS
- Шаг 4: Планирование задач
- Шаг 5: Считывание значений температуры и влажности из SHT25
- Шаг 6. Публикация значений в ThingSpeak с помощью ThingSpeak MQTT API
- Шаг 7. Уведомление по электронной почте с прогнозом погоды
- Шаг 8: Общий код
Видео: Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT: 8 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Вступление
Облачное погодное приложение, предоставляющее ежедневные отчеты о погоде в виде уведомлений по электронной почте. Это веб-приложение измеряет температуру и влажность с помощью SHT25 и Adafruit Huzzah ESP8266. Он предоставляет нам данные о температуре и влажности в реальном времени, а также ежечасную аналитику. Данные отправляются с использованием ThingSpeak MQTT API, а позже мы отправляем пользователю уведомление по электронной почте всякий раз, когда температура достигает заданного порогового значения с использованием протокола IFTTT. SHT25 - это датчики температуры и влажности производства Sensirion. SHT25 обеспечивает высокий уровень точности около ± 2% относительной влажности. Диапазон влажности составляет от 0 до 100%, а диапазон температур - от -40 до 125 ° C. Это намного надежнее и быстрее с временем отклика датчика 8 секунд.
Функции
- Предоставляет аналитику и статистику в реальном времени с помощью Thing Speak MQTT API.
- Уведомление по электронной почте предоставляется пользователю в назначенное время с помощью IFTTT.
- Планировщик заданий используется для планирования таких задач, как получение данных с датчиков, публикация показаний датчиков, подписка на тему MQTT.
- Он использует протокол I2C для получения более точных, расширяемых и масштабируемых показаний датчика.
- спящий режим, когда устройство бездействует или не вызывается обратный вызов задачи.
- эффективное планирование задач обеспечивает беспроблемное использование
- Размещается отдельная веб-страница, на которой пользователь должен предоставить свои учетные данные, чтобы избежать перепрограммирования вашего устройства каждый раз, когда он находится в зоне досягаемости других сетей Wi-Fi.
-
SPIFFS используется для хранения нашей веб-страницы, чтобы сделать наш код более читабельным и менее неуклюжим.
Шаг 1. Спецификация оборудования и программного обеспечения
Спецификация оборудования
- Adafruit esp8266 Huzzah board
- Щит Huzzah Board
- SHT25 Сенсорный модуль
- Кабель I2C
Спецификация программного обеспечения
- IDE Arduino
- IFTTT Thing Speak
- MQTT API
Шаг 2: Сохранение учетных данных пользователя
Здесь мы используем датчик SHT25 I2C для считывания значения температуры и относительной влажности в реальном времени и отправки этих значений в облако. Чтобы время от времени получать обновленное значение датчика и публиковать эти обновления одновременно, мы используем библиотеку планировщика заданий Arduino. Для облачных операций мы используем ThingSpeak MQTT API. Позже мы предоставляем пользователю прогноз погоды в режиме реального времени с помощью апплетов IFTTT. Вы можете выполнить следующие действия, чтобы создать собственную метеостанцию. Итак, сделай сам.
Прежде чем продолжить. Нам нужно сохранить учетные данные пользователя. Для этого мы размещаем веб-сервер по адресу 192.169.1.4. Мы сохранили нашу веб-форму в SPIFFS. После запуска устройство на 60 секунд размещает веб-сервер. Пользователь должен выполнить следующие действия.
- Подключитесь к AP ESPuser, он указан в списке доступных сетей Wi-Fi. Подключитесь к этой AP и введите пароль «*******»
- После подключения перейдите в браузер и введите IP-адрес 192.168.1.4.
- Введите SSID и пароль вашего локального Wi-Fi в поля ввода и введите ОТПРАВИТЬ.
- Эти учетные данные будут сохранены в EEPROM.
- Через 60 секунд устройство автоматически отключится от точки доступа.
- В следующий раз, когда вы включите устройство, пользователю не нужно выполнять эту процедуру. Устройство автоматически получит учетные данные пользователя из EEPROM и продолжит получение показаний датчика из интерфейса I2C и отправку их в облако.
// --------- Конфигурация точки доступа ------------ // IP-адрес ap_local_IP (192, 168, 1, 4); IP-адрес ap_gateway (192, 168, 1, 254); IP-адрес ap_subnet (255, 255, 255, 0);
Serial.print («Настройка точки доступа…»);
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print («Настройка учетных данных пользователя»);
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = миллис ();
while (millis () - APTimer <APInterval) {
server.handleClient ();
}
// *************************** РУЧКА КОРНЯ ****************** ********* // void handleRoot () {
если (server.hasArg ("ssid") && server.hasArg ("пароль"))
{
// Если все поля формы содержат данные, вызов
handelSubmit ()
handleSubmit (); }
еще {
// Повторно отображаем форму
// читаем файл, содержащийся в spiffs
Файл file = SPIFFS.open ("/ webform.html", "r");
server.streamFile (файл, «текст / HTML»);
// не забываем закрыть файл
file.close ();
}}
// Проверяем статус, что у него есть аргументы ssid и пароль
// Затем записываем учетные данные в ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("пароль")))
Шаг 3: Настройка вашей веб-формы в SPIFFS
СПИФЫ
Флэш-файловая система с последовательным периферийным интерфейсом, сокращенно SPIFFS. Это легкая файловая система для микроконтроллеров с микросхемой флэш-памяти SPI. На встроенной флеш-микросхеме ESP8266 достаточно места для ваших веб-страниц, особенно если у вас версия 1 МБ, 2 МБ или 4 МБ. Мы также сохранили нашу веб-страницу в системе Flash. Чтобы загрузить данные в spiffs, нам нужно выполнить несколько шагов.
- Загрузите инструмент:
- В каталоге альбомов Arduino создайте каталог инструментов, если он еще не существует.
- Распакуйте инструмент в каталог инструментов (путь будет выглядеть как /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Перезагрузите Arduino IDE.
- Откройте эскиз (или создайте новый и сохраните его)
- Перейдите в каталог эскиза (выберите «Скетч»> «Показать папку эскиза»).
- Создайте каталог с именем data и любые файлы, которые вы хотите в файловой системе. Мы загрузили нашу HTML-страницу с именем webform.html
- Убедитесь, что вы выбрали плату, порт и закрыли Serial Monitor.
- Выберите Инструменты> ESP8266 Sketch Data Upload. Это должно начать загрузку файлов в файловую систему флэш-памяти ESP8266. Когда это будет сделано, в строке состояния IDE отобразится сообщение SPIFFS Image Uploaded.
Файл file = SPIFFS.open ("/ webform.html", "r");
server.streamFile (файл, «текст / HTML»);
// не забываем закрыть файл
file.close ();
Шаг 4: Планирование задач
В этом руководстве мы выполняем две операции:
- Считайте данные с SHT25 по протоколу I2C
- Опубликуйте обновленные данные в облаке с помощью ThingSpeak MQTT API.
Для этого мы используем библиотеку TaskScheduler. Мы запланировали две разные задачи, относящиеся к двум различным операциям контроля. Это делается следующим образом
- Задача 1 предназначена для считывания значения датчика, эта задача выполняется в течение 1 секунды, пока не истечет время ожидания 10 секунд.
- Когда Task1 достигает своего тайм-аута, мы подключаемся к локальному Wi-Fi и брокеру MQTT.
- Теперь задача 2 включена, и мы отключаем задачу 1 Задача 2 предназначена для публикации данных датчика в брокере Thing Speak MQTT, эта задача выполняется в течение 20 секунд, пока не достигнет тайм-аута в 20 секунд.
- Когда Task2 достигает своего тайм-аута, Task 1 снова включается, а Task2 отключается. и здесь мы снова получаем обновленное значение, и процесс продолжается
- когда обратный вызов не выполняется или устройство находится в режиме ожидания, оно переходит в режим легкого сна, что позволяет экономить электроэнергию.
// --------- прототип для обратного вызова задачи ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
//---------Задания------------//
Задача tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Задача tWiFi (20 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// включить tI2C tI2C.enable ();
Шаг 5: Считывание значений температуры и влажности из SHT25
I2C - это двухпроводной интерфейс, который использует только два провода для связи с главным устройством. Один из них - это SCL (последовательные часы), а другой - SDA (последовательные данные). Каждое ведомое устройство имеет уникальный адрес. SHT 25 также имеет 8-битный адрес и может быть доступен по адресу 0x44. он имеет 8 бит адреса, где 7 бит являются фактическим адресом, а самый правый младший бит 0 используется для сигнализации чтения или записи в устройство. Если бит 0 установлен в 1, тогда ведущее устройство будет читать с ведомого устройства I2C. I2C намного более надежен, масштабируем и быстр, и даже имеет множество режимов работы, что делает его гораздо более энергоэффективным.
Мы используем библиотеку Wire.h для чтения значений температуры и влажности. Эта библиотека упрощает обмен данными i2c между датчиком и главным устройством. 0x44 - это адрес I2C для SHT25. SHT25 работает в другом режиме работы. Для этого вы можете обратиться к таблице данных. Мы используем 0x2C и 0x06 как MSB и LSB соответственно для одиночной операции.
Шаг 6. Публикация значений в ThingSpeak с помощью ThingSpeak MQTT API
Для публикации наших значений температуры и влажности в облаке мы используем ThingSpeak MQTT API. ThingSpeak - это платформа Интернета вещей. ThingSpeak - это бесплатный веб-сервис, который позволяет собирать и хранить данные датчиков в облаке. MQTT - это распространенный протокол, используемый в системах Интернета вещей для подключения устройств и датчиков низкого уровня. MQTT используется для передачи коротких сообщений брокеру и от него. ThingSpeak недавно добавил брокера MQTT, чтобы устройства могли отправлять сообщения в ThingSpeak. Вы можете следовать процедуре настройки канала ThingSpeak из этого сообщения.
ThingSpeak MQTT
MQTT - это архитектура публикации / подписки, которая разработана в первую очередь для подключения устройств с ограниченной пропускной способностью и мощностью по беспроводным сетям. Это простой и легкий протокол, который работает через сокеты TCP / IP или WebSockets. MQTT через WebSockets можно защитить с помощью SSL. Архитектура публикации / подписки позволяет отправлять сообщения на клиентские устройства, при этом устройству не нужно постоянно опрашивать сервер. Клиент - это любое устройство, которое подключается к брокеру и может публиковать или подписываться на темы для доступа к информации. Тема содержит информацию о маршрутизации для брокера. Каждый клиент, который хочет отправлять сообщения, публикует их в определенной теме, и каждый клиент, который хочет получать сообщения, подписывается на определенную тему.
Публикация и подписка с помощью ThingSpeak MQTT
- Публикация в каналах подачи каналов / публикация /
- Публикация в определенном поле каналы / publish / fields / field /
- Подпишитесь на канал в поле channels / subscribe //
- Подпишитесь на каналы каналов приватного канала // subscribe / fields / field /
- Подпишитесь на все поля канала. каналы // подписка / поля / feild /
недействительная задачаWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("тайм-аут для этой задачи: / t");
Serial.println (tWiFi.getTimeout ());
если (! mqttCli.connected ())
{
Serial.println («Клиент не подключен»);
reconnectMQTT ();
}
Строка topicString = «каналы /» + Строка (идентификатор канала) + «/ публикации /» + Строка (writeAPIKey);
int topicLength = topicString.length () + 1;
char topicBuffer [topicLength];
topicString.toCharArray (topicBuffer, topicLength + 1);
Serial.println (topicBuffer);
Строка dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (humid, 1));
int dataLength = dataString.length () + 1;
byte dataBuffer [длина данных];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Опубликовано": "не удалось опубликовать");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Шаг 7. Уведомление по электронной почте с прогнозом погоды
Мы используем апплеты IFTTT, чтобы отправлять пользователю уведомление о погоде по электронной почте в режиме реального времени. Итак, мы реализовали это через ThingSpeak. Мы усредняем пятикратные значения температуры и влажности. Всякий раз, когда значение последней записи больше среднего значения. По электронной почте будет отправлено уведомление «сейчас жаркий день». и когда оно меньше среднего значения. По электронной почте будет отправлено уведомление «Какой прекрасный день». Каждый день около 10:00 (IST) мы будем получать уведомление по электронной почте.
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
влажностьДата = thingSpeakRead (channelID, 'Поля', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Поля', 1, 'NumDays', 5);
perHumid = макс (данные влажности) -мин (данные влажности);
humidValue = 0,1 * perHumid + min (влажностьДанные);
perTemp = max (tempData) -min (tempData);
tempValue = 0,1 * perTemp + min (tempData);
urlTemp = strcat ('https://api.thingspeak.com/channels/', строка (идентификатор канала), '/fields/1/last.txt');
urlHumid = strcat ('https://api.thingspeak.com/channels/', строка (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));
если (lastTempValue
если (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Жаркий день.'; webwrite (iftttURL, 'значение1', plantMessage, 'значение2', lastTempValue, 'значение3', lastHumidValue); конец
Шаг 8: Общий код
Общий код
Полный код доступен в этом репозитории GitHub.
Ограничения
- Есть некоторые проблемы с публикацией данных с использованием метода публикации для большого объема данных. Для решения этой проблемы мы используем функцию write ()
- Перед загрузкой новых данных в SPIFFS необходимо отформатировать файловую систему SPIFFS.
- Вы не должны использовать функцию delay (). delay () препятствует фоновой работе. Вместо этого создавайте задержки с помощью millis (), только если это необходимо.
Кредиты
- ESP826WebServer
- Планировщик заданий
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Рекомендуемые:
Примечание о погоде: 7 шагов (с изображениями)
Примечание о погоде: это комбинация метеостанции и напоминания. Мы все можем узнать погоду на наших телефонах, но иногда, особенно когда кто-то пытается выбраться за дверь, все, что нужно, - это быстрый путь к погодным условиям. Эта метеостанция поддерживает
(Проект IOT) Получение данных о погоде с помощью ESP8266 и Openweather API: 5 шагов
(Проект IOT) Получение данных о погоде с помощью ESP8266 и Openweather API: в этом руководстве мы собираемся создать простой проект IOT, в котором данные о погоде в нашем городе будут извлекаться из openweather.com/api и отображаться с помощью программного обеспечения для обработки
Периодический отчет Excel: 6 шагов
Периодический отчет Excel: вот мои советы по составлению периодических отчетов о потреблении в Excel 2010. В обучающем видео ниже этот отчет рассказывает нам об удельном потреблении электроэнергии, воды, кислорода, азота на тонну готовой продукции по недельным, ежемесячным и квартальным данным
Данные о погоде с использованием Google Таблиц и Google Script: 7 шагов
Данные о погоде с использованием Google Sheets и Google Script: в этом Blogtut мы собираемся отправлять показания датчика SHT25 в таблицы Google с помощью Adafruit huzzah ESP8266, который помогает отправлять данные в Интернет. Отправка данных в ячейку таблицы Google очень полезна. и простой способ, который сохраняет данные в
Отчет - Монитор производительности водителя: 5 шагов
Отчет - Монитор производительности драйвера: Отчет !? Что это такое? Это электронное устройство, которое собирает данные с грузовиков в режиме реального времени и использует их для создания отчета о том, как грузовик вел себя во время поездки, показывая это на платформе Iot для менеджеров автопарка. Наша цель - сотрудничать