AHT15 – цифровой датчик температуры и влажности, обеспечивающий высокую точность измерений. Он работает по интерфейсу I2C, что облегчает интеграцию с микроконтроллерами. Данное устройство имеет высокую точность измерений ±0.2°C для температуры и ±2% для влажности. Одним из преимуществ AHT15 является его широкий диапазон рабочих температур от -40°C до 85°C. Этот датчик также отличается низким энергопотреблением и компактными размерами. Напряжение питания составляет от 1.8 В до 3.6 В.
ESP8266 – это компактный микроконтроллер с поддержкой Wi-Fi, который широко используется в DIY проектах благодаря своей универсальности и простоте в использовании. Он обладает компактными размерами, что делает его идеальным для интеграции в различные устройства, включая метеостанции. Кроме того, его низкое энергопотребление позволяет эффективно использовать его в батарейных устройствах.
Соединение датчика AHT15 с ESP8266 позволяет создать простую, но эффективную метеостанцию. AHT15 – это высокоточный датчик температуры и влажности, а ESP8266 – компактный и экономичный микроконтроллер, идеальный для подобных проектов.
Схема подключения
Датчик AHT15 работает по интерфейсу i2c, что очень удобно, так как для подключения нужно всего два провода, не считая проводов для подачи питания.
AHT15 | ESP8266 |
---|---|
VCC | 3.3V |
GND | GND |
SDA | GPIO0 (DIO) |
SCL | GPIO2 (DIO) |
Библиотеки
Для работы с датчиком AHT15 достаточно стандартных библиотек из Arduino IDE. Однако, чтобы иметь возможность прошивать ESP8266, необходимо добавить поддержу этой платы, вот как это сделать:
- Откройте Arduino IDE и выберите пункт меню: Файл > Настройки
- В открывшемся окне заполните поле Дополнительные ссылки для Менеджера плат введя в него строку: “http://arduino.esp8266.com/stable/package_esp8266com_index.json”.
- Нажмите на кнопку Ok.
- Запустите Менеджер плат выбрав пункт меню Инструменты > Плата > Менеджер плат.
- В открывшемся окне выберите пункт esp8266 by ESP8266 Community из списка сборок и нажмите на кнопку Установка.
- Дождитесь окончания установки сборки. Менеджер плат загрузит примерно 150 Мбайт данных.
- Теперь в списке плат есть раздел ESP8266. Выберете Generic ESP8266 Module.
Пример кода
Представленный ниже код демонстрирует, как можно получать данные с датчика и отображать их на веб-странице в вашем браузере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
#include <Wire.h> #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> // Определяем пины, которые будем использовать для шины i2c на esp8266 #define SDA 0 #define SCL 2 // i2c адрес датчика AHT15 #define AHT15_ADDR 0x37 // Название и пароль от вашей сети WiFi const char *ssid = "Ваш WiFi SSID"; const char *password = "Ваш WiFi пароль"; // Создаём экземпляр сервера ESP8266WebServer server(80); // Веб-страница, которая будет отображаться в браузере String webpage = R"rawliteral( <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Метеостанция</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } h1 { color: #333; } p { font-size: 18px; margin-bottom: 10px; } span { font-weight: bold; color: #0066cc; } </style> </head> <body> <h1>Метеостанция</h1> <p>Температура: <span id='temp'>#</span>°C</p> <p>Влажность: <span id='humid'>#</span>%</p> <script> // Запрашиваем данные с сервера раз в секунду setInterval(() => { fetch('/values') .then(response => response.json()) .then(data => { // Получаем ответ от сервера и обновляем данные на странице document.getElementById('temp').innerHTML = data.temperature; document.getElementById('humid').innerHTML = data.humidity; }) .catch(error => console.error('Error:', error)); }, 1000); </script> </body> </html> )rawliteral"; void setup() { Wire.begin(SDA, SCL); // Подключение к WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); } // Калибровка сенсора uint8_t calibrate_cmd[] = {0xE1, 0x08, 0x00}; Wire.beginTransmission(AHT15_ADDR); Wire.write(calibrate_cmd, 3); Wire.endTransmission(); delay(100); Wire.requestFrom(AHT15_ADDR, 1); uint8_t result = Wire.read(); // Если сенсор не откалибровался, останавливаем программу if(result & 0x68 != 0x08) while (1) {} // Функция, отвечающая за обработку запросов по адресу "/" server.on("/", HTTP_GET, []() { // Если пришел HTTP_GET запрос, отправляет в ответ веб-страницу server.send(200, "text/html", webpage); }); // Функция, отвечающая за обработку запросов по адресу "/values" server.on("/values", HTTP_GET, []() { // Если пришел HTTP_GET запрос, запрашиваем данные с датчика uint8_t read_cmd[] = {0xAC, 0x33, 0x00}; // Команда для чтения данных uint32_t data[6]; Wire.beginTransmission(AHT15_ADDR); Wire.write(read_cmd, 3); Wire.endTransmission(); delay(100); // Получаем ответ датчика Wire.requestFrom(AHT15_ADDR, 6); for(size_t i = 0; Wire.available() > 0; i++) data[i] = Wire.read(); // Расшифровываем полученные данные float raw_humidity = ((data[1] << 16) | (data[2] << 8) | data[3]) >> 4; float raw_temp = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5]; // Переводим данные в привычные единицы float temp = (200 * raw_temp / 1048576) - 50; // °C float humidity = raw_humidity * 100 / 1048576; // % // Отправляем данные String json = "{\"temperature\":" + String(temp) + ",\"humidity\":" + String(humidity) + "}"; server.send(200, "application/json", json); }); // Запуск сервера server.begin(); } void loop() { // Обрабатываем запросы в цикле server.handleClient(); } |
Теперь вы знаете, как подключить датчик AHT15 к микроконтроллеру ESP8266 и получать данные о температуре и влажности. Это отличное решение для создания устройств для мониторинга климата в различных помещениях или проектов интернета вещей (IoT).