
Интернет-магазин «Неглупый Дом»
Веб-страница ESP8266 показывает температуру с DS18B20 из любой точки сети, а локальный зуммер сразу включается прямо у платы при перегреве — даже если никто в этот момент не смотрит на страницу.
DS18B20 — цифровой датчик температуры по однопроводному протоколу 1-Wire: несмотря на название, физически это три провода (сигнал, питание, земля), но вся передача данных идёт по одному сигнальному проводу, который обязательно нуждается в подтягивающем резисторе (4.7 кОм к питанию), иначе линия "плавает" и показания будут мусором.
ESP8266 — микроконтроллер со встроенным Wi-Fi, который здесь выполняет две роли одновременно: во-первых, это простейший веб-сервер (`WiFiServer`), отдающий HTML-страницу с текущей температурой любому, кто зайдёт на его IP-адрес по локальной сети; во-вторых, это полноценный контроллер сигнализации — проверка порога `alarmTemp` и включение зуммера происходят в каждом цикле `loop()` независимо от того, обращается ли кто-то к веб-странице в этот момент.
Это ключевое архитектурное решение проекта: сирена не зависит от сети и браузера — даже если Wi-Fi временно пропал или никто не смотрит на страницу, локальная проверка температуры и зуммер продолжают работать как отдельная, самодостаточная функция.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
const int buzzerPin = 0;
const float alarmTemp = 30.0; // порог тревоги, градусы Цельсия
const char* ssid = "your_wifi_name";
const char* password = "your_wifi_password";
WiFiServer server(80);
void setup() {
Serial.begin(9600);
sensors.begin();
pinMode(buzzerPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Подключено, IP-адрес: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
sensors.requestTemperatures();
float t = sensors.getTempCByIndex(0);
digitalWrite(buzzerPin, (t > alarmTemp) ? HIGH : LOW);
WiFiClient client = server.available();
if (!client) return;
client.readStringUntil('\r');
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=utf-8");
client.println();
client.print("<html><body><h1>Температура: ");
client.print(t);
client.print(" °C</h1>");
if (t > alarmTemp) client.print("<p style='color:red'>ПЕРЕГРЕВ!</p>");
client.println("</body></html>");
}
Сирена включается независимо от того, открыта ли веб-страница в браузере — проверка температуры и управление зуммером происходят в каждом цикле `loop()` до и вне зависимости от обработки веб-запроса.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 308 ₽ 277 ₽ (экономия 31 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.