ESP8266:Примеры/Отображение температуры в браузере с помощью чипа ESP8266 и датчика DS18B20

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Отображение температуры в браузере с помощью чипа ESP8266 и датчика DS18B20[1]

Эта статья рассказывает о том, как создать автономный веб-сервер на базе чипа ESP8266(Купить ESP8266 на Aliexpress), который получает данные от температурного датчика DS18B20(Купить DS18B20 на Aliexpress), а затем выводит их на экран.

Необходимые компоненты

Справочная информация

Температурный датчик DS18B20

Температурный датчик DS18B20(Купить DS18B20 на Aliexpress) – это цифровой датчик, коммуницирующий через шину 1-Wire. Это значит, что для чтения данных с этого датчика понадобится очень простая цепь. Кроме того, он коммуницирует через общую шину, и это значит, что вы можете подключить друг к другу несколько устройств и считывать их данные с помощью лишь одного цифрового контакта ESP8266(Купить ESP8266 на Aliexpress).

Как можно видеть на фото ниже, у датчика DS18B20(Купить DS18B20 на Aliexpress) всего три контакта:

DS18B20.png

Кроме того, DS18B20(Купить DS18B20 на Aliexpress) продается и в влагозащищенной версии.

Crowtail-DS18B20-One-Wire-Waterproof-Temperature-Sensor.jpg

Функции

Главные функции температурного датчика DS18B20(Купить DS18B20 на Aliexpress):

  • Коммуницирует через шину 1-Wire;
  • Диапазон измеряемой температуры: между -55˚C и 125˚C;
  • Точность: +/-0.5˚C (в диапазоне между -10˚C и 85˚C);

Установка библиотек

Для этого проекта нам понадобятся библиотеки «OneWire» и «DallasTemperature».

Чтобы установить библиотеку «OneWire», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «OneWire-master».
  3. Переименуйте ее на «OneWire».
  4. Переместите переименованную папку в папку «libraries» IDE Arduino.
  5. Перезапустите IDE Arduino.

Чтобы установить библиотеку «DallasTemperature», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «Arduino-Temperature-Control-Library-master».
  3. Переименуйте ее на «DallasTemperature».
  4. Переместите переименованную папку в папку «libraries» IDE Arduino.
  5. Перезапустите IDE Arduino.

Загрузка кода на ESP8266

Для начала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, можно почитать тут.

Далее кликаем в IDE Arduino на Плата > Инструменты > Generic ESP8266 Module (Board > Tools > Generic ESP8266 Module). Вместо «Generic ESP8266 Module» также может быть вариант «ESP-12E».

Arduino-IDE-select-esp8266 1.png

Скопируйте код, показанный ниже, в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить не получается, поищите решение проблемы в этой статье).

  1 /*********
  2   Руи Сантос (Rui Santos)
  3   Более подробно о проекте на: http://randomnerdtutorials.com  
  4 *********/
  5 
  6 // подключаем библиотеку «ESP8266WiFi»:
  7 #include <ESP8266WiFi.h>
  8 #include <OneWire.h>
  9 #include <DallasTemperature.h>
 10 
 11 // вписываем здесь SSID и пароль для вашей WiFi-сети: 
 12 const char* ssid = "REPLACE_WITH_YOUR_SSID";
 13 const char* password = "REPLACE_WITH_YOUR_PASSWORD";
 14 
 15 // контакт для передачи данных подключен к D1 на ESP8266 12-E (GPIO5):
 16 #define ONE_WIRE_BUS 5
 17 
 18 // создаем экземпляр класса oneWire; с его помощью 
 19 // можно коммуницировать с любыми девайсами, работающими 
 20 // через интерфейс 1-Wire, а не только с температурными датчиками
 21 // от компании Maxim/Dallas:
 22 OneWire oneWire(ONE_WIRE_BUS);
 23 
 24 // передаем объект oneWire объекту DS18B20: 
 25 DallasTemperature DS18B20(&oneWire);
 26 char temperatureCString[6];
 27 char temperatureFString[6];
 28 
 29 // веб-сервер на порте 80: 
 30 WiFiServer server(80);
 31 
 32 // блок setup() запускается только один раз – при загрузке:
 33 void setup() {
 34   // инициализируем последовательный порт (для отладочных целей): 
 35   Serial.begin(115200);
 36   delay(10);
 37 
 38   DS18B20.begin(); // по умолчанию разрешение датчика – 9-битное;
 39                    // если у вас какие-то проблемы, его имеет смысл
 40                    // поднять до 12 бит; если увеличить задержку, 
 41                    // это даст датчику больше времени на обработку
 42                    // температурных данных
 43   
 44   // подключаемся к WiFi-сети:
 45   Serial.println();
 46   Serial.print("Connecting to "); // "Подключаемся к "
 47   Serial.println(ssid);
 48   
 49   WiFi.begin(ssid, password);
 50   
 51   while (WiFi.status() != WL_CONNECTED) {
 52     delay(500);
 53     Serial.print(".");
 54   }
 55   Serial.println("");
 56   Serial.println("WiFi connected"); // "Подключение к WiFi выполнено"
 57   
 58   // запускаем веб-сервер:
 59   server.begin();
 60   Serial.println("Web server running. Waiting for the ESP IP...");
 61               // "Веб-сервер запущен. Ожидание IP-адреса ESP..."
 62   delay(10000);
 63   
 64   // печатаем IP-адрес ESP: 
 65   Serial.println(WiFi.localIP());
 66 }
 67 
 68 void getTemperature() {
 69   float tempC;
 70   float tempF;
 71   do {
 72     DS18B20.requestTemperatures(); 
 73     tempC = DS18B20.getTempCByIndex(0);
 74     dtostrf(tempC, 2, 2, temperatureCString);
 75     tempF = DS18B20.getTempFByIndex(0);
 76     dtostrf(tempF, 3, 2, temperatureFString);
 77     delay(100);
 78   } while (tempC == 85.0 || tempC == (-127.0));
 79 }
 80 
 81 // блок loop() будет запускаться снова и снова:
 82 void loop() {
 83   // начинаем прослушку входящих клиентов:
 84   WiFiClient client = server.available();
 85   
 86   if (client) {
 87     Serial.println("New client");  //  "Новый клиент"
 88     // создаем переменную типа «boolean»,
 89     // чтобы определить конец HTTP-запроса:
 90     boolean blank_line = true;
 91     while (client.connected()) {
 92       if (client.available()) {
 93         char c = client.read();
 94         
 95         if (c == '\n' && blank_line) {
 96             getTemperature();
 97             client.println("HTTP/1.1 200 OK");
 98             client.println("Content-Type: text/html");
 99             client.println("Connection: close");
100             client.println();
101             // веб-страница с данными о температуре: 
102             client.println("<!DOCTYPE HTML>");
103             client.println("<html>");
104             client.println("<head></head><body><h1>ESP8266 - Temperature</h1><h3>Temperature in Celsius: ");
105             client.println(temperatureCString);
106             client.println("*C</h3><h3>Temperature in Fahrenheit: ");
107             client.println(temperatureFString);
108             client.println("*F</h3></body></html>");  
109             break;
110         }
111         if (c == '\n') {
112           // если обнаружен переход на новую строку:
113           blank_line = true;
114         }
115         else if (c != '\r') {
116           // если в текущей строчке найден символ:
117           blank_line = false;
118         }
119       }
120     }  
121     // закрываем соединение с клиентом:
122     delay(1);
123     client.stop();
124     Serial.println("Client disconnected.");
125                //  "Клиент отключен."
126   }
127 }

Схема

ESP8266 ds18b20 arduino 2.jpg

IP-адрес ESP8266

Откройте монитор порта IDE Arduino на скорости 115200 бод. Спустя несколько секунд там должен показаться IP-адрес ESP8266.

В моем случае это «192.168.1.105».

Serial-monitor-2 3.png

Демонстрация

Чтобы проверить, работает ли проект, просто откройте браузер на устройстве, подключенном к той же WiFi-сети, что и ваш ESP. Затем впишите в адресной строке IP-адрес ESP и нажмите  ↵ Enter :

Web-server-window esp8266 4.png

Если все настроено правильно, появится веб-страница, которая покажет температурные данные, считанные датчиком DS18B20. Чтобы увидеть самые последние данные, просто обновите эту страницу.

См.также

Внешние ссылки