Оглавление:

THINGSPEAK ТЕМПЕРАТУРА И ВЛАЖНОСТЬ ПРИЛОЖЕНИЕ, ИСПОЛЬЗУЯ ESP8266: 9 шагов
THINGSPEAK ТЕМПЕРАТУРА И ВЛАЖНОСТЬ ПРИЛОЖЕНИЕ, ИСПОЛЬЗУЯ ESP8266: 9 шагов

Видео: THINGSPEAK ТЕМПЕРАТУРА И ВЛАЖНОСТЬ ПРИЛОЖЕНИЕ, ИСПОЛЬЗУЯ ESP8266: 9 шагов

Видео: THINGSPEAK ТЕМПЕРАТУРА И ВЛАЖНОСТЬ ПРИЛОЖЕНИЕ, ИСПОЛЬЗУЯ ESP8266: 9 шагов
Видео: ESP8266 график температуры и влажности прямо в контроллере 2024, Июль
Anonim
ПРИЛОЖЕНИЕ THING SPEAK TEMPERATURE И ВЛАЖНОСТЬ, ИСПОЛЬЗУЮЩЕЕ ESP8266
ПРИЛОЖЕНИЕ THING SPEAK TEMPERATURE И ВЛАЖНОСТЬ, ИСПОЛЬЗУЮЩЕЕ ESP8266

Когда я возился с электроникой, мне пришла в голову идея сделать веб-приложение о погоде. Это веб-приложение использует датчик SHT31 для получения данных о температуре и влажности в реальном времени. Мы развернули наш проект на WiFi-модуле ESP8266. Онлайн или офлайн! Не нужно беспокоиться, вне зависимости от того, в сети вы или в автономном режиме, вы будете получать обновления погоды из любого места и в любое время. Это веб-приложение отправляет данные как на локальный веб-сервер, так и в облако. Для облачных операций мы используем ThingSpeak API. SHT31 использует I2C для получения данных от датчика.

SHT 31 - это датчики температуры и влажности производства Sensirion. SHT31 обеспечивает высокий уровень точности около ± 2% относительной влажности. Диапазон влажности составляет от 0 до 100%, а диапазон температур - от -40 до 125 ° C. Это намного надежнее и быстрее с временем отклика датчика 8 секунд. Его функциональные возможности включают улучшенную обработку сигналов и совместимость с I2C. Он имеет разные режимы работы, что делает его энергоэффективным.

В этом уроке мы связали SHT 31 с доской Adafruit Huzzah. Для считывания значений температуры и влажности мы использовали экран ESP8266 I2C. Этот адаптер делает все контакты доступными для пользователя и предлагает удобную среду I2C.

Шаг 1. Требуется оборудование

Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование

Оборудование, используемое для выполнения этой задачи:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. ESP8266 I2C адаптер
  4. Кабель I2C

Шаг 2: Подключение оборудования

Аппаратные соединения
Аппаратные соединения

Этот шаг включает руководство по подключению оборудования. В этом разделе в основном объясняются проводные соединения, необходимые между датчиком и ESP8266. Подключения следующие.

  1. SHT31 работает по I2C. На изображении выше показано соединение между ESP8266 и модулем SHT31. Мы используем для этого кабель I2C или можем использовать перемычки 4 F на F.
  2. один провод используется для Vcc, второй провод для GND и два других для SDA и SCL соответственно
  3. Согласно адаптеру I2C контакты 2 и 14 платы ESP8266 используются как SDA и SCL соответственно.

Шаг 3. Код для планирования задач

Код для планирования задач
Код для планирования задач

В этом уроке мы выполняем три операции

  • Считайте данные из SHT11 по протоколу I2C
  • разместить веб-сервер и опубликовать показания датчика на веб-странице
  • опубликуйте показания датчика в ThingSpeak API

Для этого мы используем библиотеку TaskScheduler. Мы запланировали три разные задачи, относящиеся к трем различным операциям контроля. Это делается следующим образом

  • Задача 1 предназначена для считывания значения датчика, эта задача выполняется в течение 1 секунды, пока не истечет время ожидания 10 секунд.
  • Когда Task1 достигает своего тайм-аута, Task 2 включается, а Task1 отключается.
  • Мы подключаемся к AP в этом обратном вызове. Две логические переменные позаботятся о переключении между STA и AP.
  • В задаче 2 мы размещаем веб-сервер по адресу 192.168.1.4. Эта задача запускается каждые 5 секунд, пока не истечет время ожидания, равное 50 секундам.
  • Когда задача 2 достигает тайм-аута, задача 3 включается, а задача 2 отключается.
  • В этом обратном вызове мы подключаемся к STA (локальный IP-адрес). В задаче 3 мы отправляем показания датчика в облачный API ThingSpeak.
  • Задача 3 запускается каждые пять секунд, пока не истечет время ожидания, то есть 50 секунд.
  • Когда Task3 достигает своего тайм-аута, Task 1 снова включается, а Task3 отключается.
  • Когда обратный вызов не выполняется или устройство находится в режиме ожидания, оно переходит в режим легкого сна, что позволяет экономить электроэнергию.

void taskI2CCallback ();

void taskI2CDisable (); void taskAPCallback (); void taskAPDisable (); void taskWiFiCallback (); void taskWiFiDisable (); // Задачи для i2c, хостинг веб-сервера и публикация на thingspeak Task tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Задача tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); TAP задачи (5 * TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Задача tWiFi (5 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // таймаут для задач tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // включить задачу I2C tI2C.enable ();

Шаг 4: Код для считывания значений температуры и влажности

Код для считывания значений температуры и влажности
Код для считывания значений температуры и влажности

Мы используем библиотеку Wire.h для чтения значений температуры и влажности. Эта библиотека упрощает обмен данными i2c между датчиком и главным устройством. 0x44 - это адрес I2C для SHT31.

SHT31 работает в другом режиме работы. Для этого вы можете обратиться к таблице данных. Мы используем 0x2C и 0x06 как MSB и LSB соответственно для одиночной операции.

// Обратный вызов задачи I2C void taskI2CCallback () {Serial.println ("taskI2CStarted"); беззнаковый int root [6]; // начать передачу с 0x44; Wire.beginTransmission (адрес); // для однократной передачи с высокой повторяемостью мы используем 0x2C (MSB) и 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // завершение передачи Wire.endTransmission (); // запрашиваем байты из 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Адрес, 6); if (Wire.available () == 6) {// данные [0] и данные [1] содержат 16 бит температуры. корень [0] = Wire.read (); корень [1] = Wire.read (); // data [2] содержит 8 бит CRC root [2] = Wire.read (); // data [3] и data [4] содержат 16 бит влажности root [3] = Wire.read (); корень [4] = Wire.read (); // данные [5] состоят из 8-битной CRC root [5] = Wire.read (); } int temp = (корень [0] * 256) + корень [1]; // сдвинуть старший бит на 8 бит добавить младший бит float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; // сдвигаем старший бит на 8 бит, добавляем к нему младший бит, делим на полное разрешение и * 100 для процентной влажности с плавающей запятой = (100.0 * ((root [3] * 256.0) + root [4])) / 65535.0; tempC = cTemp; tempF = fTemp; влажный = влажность; Serial.print ("Температура в C: / t"); Serial.println (Строка (cTemp, 1)); Serial.print ("Температура в F: / t"); Serial.println (Строка (fTemp, 1)); Serial.print ("Влажность: / t"); Serial.println (String (влажность, 1)); }

Шаг 5: Код для размещения веб-сервера

Код для размещения веб-сервера
Код для размещения веб-сервера
Код для размещения веб-сервера
Код для размещения веб-сервера

Мы разместили веб-сервер с нашего устройства на статическом IP-адресе.

Библиотека ESP8266WebServer используется для размещения веб-сервера

  • Сначала нам нужно объявить IP-адрес, шлюз и маску подсети, чтобы создать наш статический IP-адрес.
  • Теперь объявите ssid и пароль для вашей точки доступа. Подключитесь к точке доступа с любого устройства STA
  • разместите сервер на порту 80, который является портом по умолчанию для протокола интернет-связи, протокол передачи гипертекста (HTTP) введите 192.168.1.4 в вашем веб-браузере для вступительной веб-страницы и 192.168.1.4/Value для считывания веб-страницы с датчика

// статический IP для APIPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IP-адрес ap_subnet (255, 255, 255, 0); // ssid и AP для локального WiFi в режиме STA const char WiFissid = "*********"; const char WiFipass = "*********"; // ssid и переход для AP const char APssid = "********"; const char APpass = "********"; ESP8266WebServer server (80); недействительная настройка {server.on ("/", onHandleDataRoot); server.on ("/ Значение", onHandleDataFeed); server.onNotFound (onHandleNotFound);} void taskAPCallback () {Serial.println ("taskAP запущен"); server.handleClient (); } void onHandleDataRoot () {server.send (200, "текст / HTML", PAGE1); } void onHandleDataFeed () {server.send (200, "текст / HTML", PAGE2); } void onHandleNotFound () {String message = "Файл не найден / n / n"; сообщение + = "URI:"; сообщение + = server.uri (); message + = "\ nMethod:"; сообщение + = (server.method () == HTTP_GET)? "GET": "POST"; message + = "\ nАргументы:"; сообщение + = server.args (); сообщение + = "\ п"; server.send (404, «текст / обычный», сообщение); } void reconnectAPWiFi () {WiFi.mode (WIFI_AP_STA); задержка (100); WiFi.disconnect (); логический статус = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet); if (status == true) {Serial.print ("Настройка программной AP…"); логическое ap = WiFi.softAP (APssid, APpass); if (ap == true) {Serial.print ("подключен к: / t"); // IP-адрес myIP = WiFi.softAPIP (); Serial.println (WiFi.softAPIP ()); } server.begin ();

}

Шаг 6: настройка Thingspeak

Настройка Thingspeak
Настройка Thingspeak
Настройка Thingspeak
Настройка Thingspeak
Настройка Thingspeak
Настройка Thingspeak

ThingSpeak - это платформа Интернета вещей. ThingSpeak - это бесплатный веб-сервис, который позволяет собирать и хранить данные датчиков в облаке.

На этом шаге я дам вам краткую процедуру настройки вашей учетной записи Thing Speak.

  • Зарегистрируйте новую учетную запись пользователя в ThingSpeak
  • Создайте новый канал, выбрав «Каналы», «Мои каналы», а затем «Новый канал».
  • Отредактируйте свои поля
  • Эти поля содержат данные вашего датчика
  • Обратите внимание на ключ API записи и идентификатор канала.
  • В своем эскизе Arduino вы можете использовать библиотеку ThingSpeak для Arduino или напрямую отправить данные в ThingSpeak API.
  • следующий шаг подробно описывает публикацию контента в Thing Speak API.

Шаг 7. Код для публикации данных в Thing Speak

Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak
Код для публикации данных в Thing Speak

Здесь мы отправляем показания датчиков в Thing Speak. следующие шаги необходимы для выполнения этой задачи:

  • Создайте учетную запись на сайте thing Speak. Создайте каналы и поля для хранения данных датчика.
  • мы можем получать и отправлять данные из ESP в thingSpeak и наоборот, используя запросы GET и POST к api.
  • мы можем опубликовать наши данные в ThingSpeak следующим образом

id taskWiFiCallback () {WiFiClient wifiClient; если (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (влажный); postStr + = "& field2 ="; postStr + = Строка (tempC); postStr + = "& field3 ="; postStr + = Строка (tempF); postStr + = "\ г / п / г / п"; wifiClient.print («POST / обновление HTTP / 1.1 / n»); wifiClient.print ("Хост: api.thingspeak.com / n"); wifiClient.print ("Соединение: закрыть / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); wifiClient.print ("Content-Type: application / x-www-form-urlencoded / n"); wifiClient.print ("Длина содержимого:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ п / п"); wifiClient.print (postStr); } wifiClient.stop (); }

Шаг 8: Общий код

Общий код доступен в моем репозитории GitHub

Шаг 9: кредиты

  • Ардуино JSON
  • ESP826WebServer
  • Планировщик заданий
  • SHT 31
  • I2C сканирование
  • Учебное пособие по HIH6130
  • Проволока
  • NCD.io

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