ESP8266:Примеры/Отображение температуры в браузере с помощью чипа ESP8266 и датчика DS18B20
Отображение температуры в браузере с помощью чипа ESP8266 и датчика DS18B20[1]
Эта статья рассказывает о том, как создать автономный веб-сервер на базе чипа ESP8266(), который получает данные от температурного датчика DS18B20(), а затем выводит их на экран.
Необходимые компоненты
- Один плата ESP8266()(NodeMcu v3 ESP8266());
- Один температурный датчик DS18B20();
- Один резистор на 4,7 кОм;
- Одна макетная плата();
- Провода перемычки();
Справочная информация
Температурный датчик DS18B20
Температурный датчик DS18B20() – это цифровой датчик, коммуницирующий через шину 1-Wire. Это значит, что для чтения данных с этого датчика понадобится очень простая цепь. Кроме того, он коммуницирует через общую шину, и это значит, что вы можете подключить друг к другу несколько устройств и считывать их данные с помощью лишь одного цифрового контакта ESP8266().
Как можно видеть на фото ниже, у датчика DS18B20() всего три контакта:
Кроме того, DS18B20() продается и в влагозащищенной версии.
Функции
Главные функции температурного датчика DS18B20():
- Коммуницирует через шину 1-Wire;
- Диапазон измеряемой температуры: между -55˚C и 125˚C;
- Точность: +/-0.5˚C (в диапазоне между -10˚C и 85˚C);
Установка библиотек
Для этого проекта нам понадобятся библиотеки «OneWire» и «DallasTemperature».
Чтобы установить библиотеку «OneWire», проделайте следующее:
- Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
- Распакуйте этот архив. В результате у вас должна появиться папка «OneWire-master».
- Переименуйте ее на «OneWire».
- Переместите переименованную папку в папку «libraries» IDE Arduino.
- Перезапустите IDE Arduino.
Чтобы установить библиотеку «DallasTemperature», проделайте следующее:
- Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
- Распакуйте этот архив. В результате у вас должна появиться папка «Arduino-Temperature-Control-Library-master».
- Переименуйте ее на «DallasTemperature».
- Переместите переименованную папку в папку «libraries» IDE Arduino.
- Перезапустите IDE Arduino.
Загрузка кода на ESP8266
Для начала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, можно почитать тут.
Далее кликаем в IDE Arduino на Плата > Инструменты > Generic ESP8266 Module (Board > Tools > Generic ESP8266 Module). Вместо «Generic ESP8266 Module» также может быть вариант «ESP-12E».
Скопируйте код, показанный ниже, в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить не получается, поищите решение проблемы в этой статье).
/*********
Руи Сантос (Rui Santos)
Более подробно о проекте на: http://randomnerdtutorials.com
*********/
// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// вписываем здесь SSID и пароль для вашей WiFi-сети:
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// контакт для передачи данных подключен к D1 на ESP8266 12-E (GPIO5):
#define ONE_WIRE_BUS 5
// создаем экземпляр класса oneWire; с его помощью
// можно коммуницировать с любыми девайсами, работающими
// через интерфейс 1-Wire, а не только с температурными датчиками
// от компании Maxim/Dallas:
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту DS18B20:
DallasTemperature DS18B20(&oneWire);
char temperatureCString[6];
char temperatureFString[6];
// веб-сервер на порте 80:
WiFiServer server(80);
// блок setup() запускается только один раз – при загрузке:
void setup() {
// инициализируем последовательный порт (для отладочных целей):
Serial.begin(115200);
delay(10);
DS18B20.begin(); // по умолчанию разрешение датчика – 9-битное;
// если у вас какие-то проблемы, его имеет смысл
// поднять до 12 бит; если увеличить задержку,
// это даст датчику больше времени на обработку
// температурных данных
// подключаемся к WiFi-сети:
Serial.println();
Serial.print("Connecting to "); // "Подключаемся к "
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); // "Подключение к WiFi выполнено"
// запускаем веб-сервер:
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// "Веб-сервер запущен. Ожидание IP-адреса ESP..."
delay(10000);
// печатаем IP-адрес ESP:
Serial.println(WiFi.localIP());
}
void getTemperature() {
float tempC;
float tempF;
do {
DS18B20.requestTemperatures();
tempC = DS18B20.getTempCByIndex(0);
dtostrf(tempC, 2, 2, temperatureCString);
tempF = DS18B20.getTempFByIndex(0);
dtostrf(tempF, 3, 2, temperatureFString);
delay(100);
} while (tempC == 85.0 || tempC == (-127.0));
}
// блок loop() будет запускаться снова и снова:
void loop() {
// начинаем прослушку входящих клиентов:
WiFiClient client = server.available();
if (client) {
Serial.println("New client"); // "Новый клиент"
// создаем переменную типа «boolean»,
// чтобы определить конец HTTP-запроса:
boolean blank_line = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && blank_line) {
getTemperature();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// веб-страница с данными о температуре:
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head><body><h1>ESP8266 - Temperature</h1><h3>Temperature in Celsius: ");
client.println(temperatureCString);
client.println("*C</h3><h3>Temperature in Fahrenheit: ");
client.println(temperatureFString);
client.println("*F</h3></body></html>");
break;
}
if (c == '\n') {
// если обнаружен переход на новую строку:
blank_line = true;
}
else if (c != '\r') {
// если в текущей строчке найден символ:
blank_line = false;
}
}
}
// закрываем соединение с клиентом:
delay(1);
client.stop();
Serial.println("Client disconnected.");
// "Клиент отключен."
}
}
Схема
IP-адрес ESP8266
Откройте монитор порта IDE Arduino на скорости 115200 бод. Спустя несколько секунд там должен показаться IP-адрес ESP8266.
В моем случае это «192.168.1.105».
Демонстрация
Чтобы проверить, работает ли проект, просто откройте браузер на устройстве, подключенном к той же WiFi-сети, что и ваш ESP. Затем впишите в адресной строке IP-адрес ESP и нажмите ↵ Enter :
Если все настроено правильно, появится веб-страница, которая покажет температурные данные, считанные датчиком DS18B20. Чтобы увидеть самые последние данные, просто обновите эту страницу.
См.также
Внешние ссылки
ESP8266 AT-команды | |
---|---|
Список AT-команд | |
Базовые команды |
|
Команды для WiFi |
|
Команды для TCP/IP |
|