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

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1898 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


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

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

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

Для этого проекта нам понадобятся библиотеки «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-12E (см. на eBay)
  • Один температурный датчик DS18B20 (см. на eBay)
  • Один резистор на 4700 Ом (см. на eBay)
  • Одна макетная плата (см. на eBay)

Схема

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. Чтобы увидеть самые последние данные, просто обновите эту страницу.

См.также

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

  1. randomnerdtutorials.com - ESP8266 DS18B20 Temperature Sensor Web Server with Arduino IDE