Оглавление:

Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT: 8 шагов
Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT: 8 шагов

Видео: Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT: 8 шагов

Видео: Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT: 8 шагов
Видео: 7 апплеты 2024, Ноябрь
Anonim
Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT
Отчет о погоде с использованием апплетов ThingSpeak MQTT и IFTTT

Вступление

Облачное погодное приложение, предоставляющее ежедневные отчеты о погоде в виде уведомлений по электронной почте. Это веб-приложение измеряет температуру и влажность с помощью 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, нам нужно выполнить несколько шагов.

  1. Загрузите инструмент:
  2. В каталоге альбомов Arduino создайте каталог инструментов, если он еще не существует.
  3. Распакуйте инструмент в каталог инструментов (путь будет выглядеть как /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Перезагрузите Arduino IDE.
  5. Откройте эскиз (или создайте новый и сохраните его)
  6. Перейдите в каталог эскиза (выберите «Скетч»> «Показать папку эскиза»).
  7. Создайте каталог с именем data и любые файлы, которые вы хотите в файловой системе. Мы загрузили нашу HTML-страницу с именем webform.html
  8. Убедитесь, что вы выбрали плату, порт и закрыли Serial Monitor.
  9. Выберите Инструменты> 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

Считывание значений температуры и влажности из SHT25
Считывание значений температуры и влажности из 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 с помощью ThingSpeak MQTT API
Публикация значений в 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

Рекомендуемые: