В прошлых экспериментах мы научились создавать веб-сервер и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера.
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <OneWire.h> #include <DallasTemperature.h> #define WIFI_NAME "Имя WiFi сети" #define WIFI_PASSWORD "Пароль" #define BUS_PIN 12 //the device is on GPIO12 OneWire oneWire(BUS_PIN); DallasTemperature sensors(&oneWire); ESP8266WebServer server(80); void showMessage() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); server.send(200, "text/html", String(tempC)); } void setup() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_NAME, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { } server.on("/", showMessage); server.begin(); } void loop() { server.handleClient(); }
Код подключения к сети и создания веб-сервера был изучен в предыдущих экспериментах, поэтому здесь повторно останавливаться на этом не будем.
Создаем шину 1-Wire на 12 выводе микроконтроллера и создаем объект датчика температуры DS18B20 (подробно о работе с шиной 1-Wire и датчиком DS18B20)
# the device is on GPIO12 OneWire oneWire(BUS_PIN); DallasTemperature sensors(&oneWire);
Когда происходит обращение к веб-серверу по адресу / (корневая директория, главная страница), то вызывается функция showMessage
. В ней считываются данные с датчика о текущей температуре и возвращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.