Оглавление:

Веб-приложение Weather с использованием Esp8266: 7 шагов
Веб-приложение Weather с использованием Esp8266: 7 шагов

Видео: Веб-приложение Weather с использованием Esp8266: 7 шагов

Видео: Веб-приложение Weather с использованием Esp8266: 7 шагов
Видео: Разработка WEB-интерфейса для ESP8266. Часть 1: Подготовка скетча в Arduino IDE 2024, Май
Anonim
Веб-приложение Weather с использованием Esp8266
Веб-приложение Weather с использованием Esp8266

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

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

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

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

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

1. SHT31

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 мы отправляем показания датчика в облачный ThingSpeak API.
  • Задача 3 запускается каждые пять секунд, пока не истечет время ожидания, то есть 50 секунд.
  • Когда Task3 достигает своего тайм-аута, Task 1 снова включается, а Task3 отключается.
  • Когда обратный вызов не выполняется или устройство находится в режиме ожидания, оно переходит в режим легкого сна, что позволяет экономить электроэнергию.

Планировщик ts;

// Задачи для i2c, хостинга веб-сервера и публикации на thingspeak

Задача 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 для AP

IP-адрес ap_local_IP (192, 168, 1, 4);

IP-адрес ap_gateway (192, 168, 1, 254);

IPAddress 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);

void setup {

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. Код для публикации данных в 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 следующим образом

void 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 (); }

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

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

Кредиты:

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

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