Оглавление:
- Шаг 1. Требуется оборудование
- Шаг 2: Подключение оборудования
- Шаг 3. Код для планирования задач
- Шаг 4: Код для считывания значений температуры и влажности
- Шаг 5: Код для размещения веб-сервера
- Шаг 6: настройка Thingspeak
- Шаг 7. Код для публикации данных в Thing Speak
- Шаг 8: Общий код
- Шаг 9: кредиты
Видео: THINGSPEAK ТЕМПЕРАТУРА И ВЛАЖНОСТЬ ПРИЛОЖЕНИЕ, ИСПОЛЬЗУЯ ESP8266: 9 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Когда я возился с электроникой, мне пришла в голову идея сделать веб-приложение о погоде. Это веб-приложение использует датчик 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. Требуется оборудование
Оборудование, используемое для выполнения этой задачи:
- SHT 31
- Adafruit Huzzah ESP8266
- ESP8266 I2C адаптер
- Кабель 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 мы отправляем показания датчика в облачный 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 - это бесплатный веб-сервис, который позволяет собирать и хранить данные датчиков в облаке.
На этом шаге я дам вам краткую процедуру настройки вашей учетной записи Thing Speak.
- Зарегистрируйте новую учетную запись пользователя в ThingSpeak
- Создайте новый канал, выбрав «Каналы», «Мои каналы», а затем «Новый канал».
- Отредактируйте свои поля
- Эти поля содержат данные вашего датчика
- Обратите внимание на ключ API записи и идентификатор канала.
- В своем эскизе Arduino вы можете использовать библиотеку ThingSpeak для Arduino или напрямую отправить данные в ThingSpeak API.
- следующий шаг подробно описывает публикацию контента в Thing Speak API.
Шаг 7. Код для публикации данных в 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
Рекомендуемые:
Температура и влажность с использованием ESP32-DHT22-MQTT-MySQL-PHP: 7 шагов
Температура и влажность с использованием ESP32-DHT22-MQTT-MySQL-PHP: Моя девушка хотела оранжерею, поэтому я сделал ее. Но мне нужен был датчик температуры и влажности внутри теплицы. Итак, я поискал примеры в Google и начал экспериментировать. Я пришел к выводу, что все найденные мной примеры не совсем то
Автоматизация теплицы с помощью LoRa! (Часть 1) -- Датчики (температура, влажность, влажность почвы): 5 шагов
Автоматизация теплицы с помощью LoRa! (Часть 1) || Датчики (температура, влажность, влажность почвы): в этом проекте я покажу вам, как я автоматизировал теплицу. Это означает, что я покажу вам, как я построил теплицу и как я подключил силовую и автоматическую электронику. Также я покажу вам, как программировать плату Arduino, которая использует L
Метеостанция Arduino с использованием BMP280-DHT11 - температура, влажность и давление: 8 шагов
Метеостанция Arduino с использованием BMP280-DHT11 - Температура, влажность и давление: в этом уроке мы узнаем, как создать метеостанцию, которая будет отображать ТЕМПЕРАТУРУ, ВЛАЖНОСТЬ И ДАВЛЕНИЕ на ЖК-дисплее TFT 7735Посмотрите демонстрационное видео
Используя Raspberry Pi, оцените влажность и температуру с помощью SI7006: 6 шагов
Используя Raspberry Pi, оценивайте влажность и температуру с помощью SI7006: будучи энтузиастами Raspberry Pi, мы придумали еще несколько захватывающих экспериментов с ним. В этой кампании мы будем измерять температуру и влажность, которые необходимо контролировать, используя Raspberry Pi и SI7006, датчик влажности и температуры
ThingSpeak, ESP32 и температура и влажность беспроводного соединения на большом расстоянии: 5 шагов
ThingSpeak, ESP32 и температура и влажность в беспроводной сети дальнего действия: в этом руководстве мы будем измерять различные данные о температуре и влажности с помощью датчика температуры и влажности. Вы также узнаете, как отправить эти данные в ThingSpeak. Чтобы вы могли анализировать его из любого места для разных приложений