Оглавление:
- Шаг 1. Требуется оборудование
- Шаг 2: Подключение оборудования
- Шаг 3. Код для планирования задач
- Шаг 4: Код для считывания значений температуры и влажности
- Шаг 5: Код для размещения веб-сервера
- Шаг 6. Код для публикации данных в Thing Speak
- Шаг 7: Общий код
Видео: Веб-приложение Weather с использованием Esp8266: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
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. Подключения следующие.
- SHT31 работает по I2C. На изображении выше показано соединение между ESP8266 и модулем SHT31. Мы используем для этого кабель I2C или можем использовать перемычки 4 F на F.
- один провод используется для Vcc, второй - для GND, а два других - для SDA и SCL соответственно.
- Согласно адаптеру 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
- Создавайте каналы и поля для хранения данных вашего датчика
- мы можем получать и отправлять данные из 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
Рекомендуемые:
Устройство открывания гаражных ворот с обратной связью с использованием Esp8266 в качестве веб-сервера: 6 шагов
Устройство открывания гаражных ворот с обратной связью с использованием Esp8266 в качестве веб-сервера: Привет, я покажу вам, как сделать простой способ открытия ворот гаража. ESP8266 закодирован как веб-сервер, дверь может быть открыта повсюду в мире. обратная связь, вы будете знать, открыта или закрыта дверь в режиме реального времени - Просто, всего один ярлык, чтобы я
Как создать веб-сайт для доски объявлений с использованием PHP и MYSQL: 5 шагов
Как создать веб-сайт доски объявлений с использованием PHP и MYSQL: в этом руководстве показано, как создать веб-сайт доски объявлений с использованием php, mysql, html и css. Если вы новичок в веб-разработке, не волнуйтесь, будут подробные объяснения и аналогии, чтобы вы могли лучше понять концепции. Мат
Светодиод, управляемый через Интернет, с использованием веб-сервера на базе ESP32: 10 шагов
Светодиод, управляемый через Интернет с использованием веб-сервера на основе ESP32: обзор проекта В этом примере мы выясним, как настроить веб-сервер на основе ESP32 для управления состоянием светодиода, доступного из любой точки мира. Для этого проекта вам понадобится компьютер Mac, но вы можете запустить это программное обеспечение даже на i
Повторное использование модуля веб-камеры HP WebCam 101 Aka 679257-330 в качестве универсальной веб-камеры USB: 5 шагов
Повторное использование модуля веб-камеры HP WebCam 101, известного как 679257-330, в качестве универсальной веб-камеры USB: я хочу приправить свой 14-летний Panasonic CF-18 совершенно новой веб-камерой, но Panasonic больше не поддерживает эту замечательную машину, поэтому я должен используйте серое вещество для чего-нибудь попроще, чем b & b (пиво и гамбургеры). Это первая часть
Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров: 8 шагов
Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров: Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров Последнее обновление: 26.07.2015 (Проверяйте почаще, поскольку я обновляю эти инструкции с более подробной информацией и примерами) мне поставили интересную задачу. Я нуждался в