WEB сервер на ESP-01 с DS18B20

В этой статье расскажу, как можно реализовать простой WEB — сервер на чипе ESP8266 (ESP-01) с отображением на нем температуры с датчика DS18B20.

WEB сервер на ESP-01 с DS18B20

WEB — Сервер на ESP-01 с DS18B20

Необходимые детали:
► Беспроводной Wi-Fi модуль ESP8266-01 (ESP01) x 1 шт.
► Датчик температуры DS18b20 x 1 шт.
► Провод DuPont 10x, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.
► Адаптер для ESP-01 (USB, CH340G, ESP8266) x 1 шт.
► Резистор 4.7 кОм x 1 шт

Прошивка ESP-01:
Прежде, чем собирать принципиально. схему, необходимо прошить модуль ESP01 (ES8266), для этого берем USB адаптер на CH340G (с небольшой доработкой, которая включаем в себя перемычку между GND и GPIO0). Устанавливаем модуль ESP01 в USB адаптер CH340G и подключаем его в USB разъем компьютера (в системе должен появится новый последовательный порт (COMx).
Программа написана в среде IDE Arduino, но для работы с чипами ESP8266, необходимо установить ESP плату, как это сделать можно посмотреть в этой статье. Так-же, необходимы две дополнительные библиотеки  «OneWire» и  «DallasTemperature» (скачиваем их можно в конце статьи). Теперь осталось загрузить скетч в программу IDE и загрузить в модуль ESP01.

/* 
Тестировалось на Arduino IDE 1.8.0
Дата тестирования 26.07.2017г.
*/ 

#include <ESP8266WiFi.h>                                // Подключаем библиотеку ESP8266WiFi
#include <OneWire.h>                                    // Подключаем библиотеку Wire
#include <DallasTemperature.h>                          // Подключаем библиотеку DallasTemperature

const char* ssid = "Название Вашей сети";               // Название Вашей WiFi сети
const char* password = "Пароль от Вашей сети";          // Пароль от Вашей WiFi сети

#define ONE_WIRE_BUS 2                                  // Указываем, к какому выводу подключена датчик
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&amp;oneWire);
WiFiServer server(80);                                  // Указываем порт Web-сервера

void setup() 
{
  Serial.begin(115200);                                 // Скорость передачи 115200 
  delay(10);                                            // Пауза 10 мкс
  DS18B20.begin();                                      // Инициализация DS18B20
                             
  Serial.println("");                                   // Печать пустой строки 
  Serial.print("Connecting to ");                       // Печать "Подключение к:"
  Serial.println(ssid);                                 // Печать "Название Вашей WiFi сети"
  
  WiFi.begin(ssid, password);                           // Подключение к WiFi Сети
  
  while (WiFi.status() != WL_CONNECTED)                 // Проверка подключения к WiFi сети
  {
   delay(500);                                          // Пауза 500 мкс
   Serial.print(".");                                   // Печать "."
  }
   Serial.println("");                                  // Печать пустой строки                                          
   Serial.println("WiFi connected");                    // Печать "Подключение к WiFi сети осуществлено"
   server.begin();                                      // Запуск Web сервера
   Serial.println("Web server running.");               // Печать "Веб-сервер запущен"
   delay(10000);                                        // Пауза 10 000 мкс
   Serial.println(WiFi.localIP());                      // Печатаем полученный IP-адрес ESP
}

void loop() 
{
 WiFiClient client = server.available();                // Получаем данные, посылаемые клиентом 
  
 if (client){
  Serial.println("New client");                         // Отправка "Новый клиент"
  boolean blank_line = true;                            // Создаем переменную, чтобы определить конец HTTP-запроса 
  while (client.connected()){                           // Пока есть соединение с клиентом 
    if (client.available()){                            // Если клиент активен 
     char c = client.read();                            // Считываем посылаемую информацию в переменную "с"
     if (c == '\n' &amp;&amp; blank_line){                      // Вывод HTML страницы 
       DS18B20.requestTemperatures();                   // Запрос на считывание температуры
       client.println("HTTP/1.1 200 OK");               // Стандартный заголовок HTTP 
       client.println("Content-Type: text/html"); 
       client.println("Connection: close");             // Соединение будет закрыто после завершения ответа
       client.println("Refresh: 10");                   // Автоматическое обновление каждые 10 сек 
       client.println();
       client.println("<!DOCTYPE HTML>");               // Веб-страница создается с использованием HTML
       client.println("<html>");                        // Открытие тега HTML 
       client.println("<head>");
       client.print("<title>ESP8266 TEMP</title>");     // Название страницы
       client.println("</head>");
       client.println("<body>");
       client.println("<h1>ESP8266 - Temperature</h1>"); 
       client.println("<h3>Temperature = ");
       client.println(DS18B20.getTempCByIndex(0));      // Отображение температуры
       client.println("*C</h3>");
       client.println("</body>");
       client.println("</html>");                       // Закрытие тега HTML 
       break;                                           // Выход
       }
        if (c == '\n'){                                 // Если "с" равен символу новой строки                                             
         blank_line = true;                             // Тогда начинаем новую строку
        }                                          
         else if (c != '\r'){                           // Если "с" не равен символу возврата курсора на начало строки                                        
          blank_line = false;                           // Тогда получаем символ на текущей строке 
         }                                        
    }
  }  
    client.stop();                                      // Закрытие соединения
    Serial.println("Client disconnected.");             // Печать "Клиент отключен"
}
}

Скачать скетч

Если прошивки не начинается, и программа выдает ошибки «warning: espcomm_sync failed», «error: espcomm_open failed» и  «error: espcomm_upload_mem failed» значит модуль не в режиме прошивки, проверьте перемычку между GND и GPIO0.

WEB сервер на ESP-01 с DS18B20

При удачной прошивке модуля, появится диалогового окна с «[ 100% ]»

WEB сервер на ESP-01 с DS18B20

Определение IP (ESP-01):

Теперь необходимо узнать IP модуля, для этого открываем «Мониторинг порта» с выставленной скоростью «115200», в моем случаи сеть выдала «192.168.22.101».

WEB сервер на ESP-01 с DS18B20

Можно приступать к сборке принципиальной схемы.

Подключение ESP-01 и DS18B20

Собираем принципиальную схему, согласно рисунку ниже (для удобства рекомендую использовать готовые модули DS18B20, с впаянным резистором и световой индикацией). Подключение датчика осуществляется по интерфейсу 1-Wire (однопроводной линии), который подключаемся к модулю ESP-01 (вывод GPIO2), так-же, для работы интерфейса 1-Wire необходим подтягивающий резистор на 4.7 кОм. В качестве источника питания, используем понижающий преобразователь LM2596, с выставленным выходным напряжением 3.3В.

WEB сервер на ESP-01 с DS18B20

Чтобы посмотреть, что получилось, открываем любой браузер (компьютер должен находиться в той же сети, что и ESP модуль), вводим IP-адрес (192.168.22.101) и нажимаем Enter.

WEB сервер на ESP-01 с DS18B20

При желании, можно добавить реле, которое будет переключатся при определенном условии.

Ссылки
   Скачать библиотеку DallasTemperature
   Скачать библиотеку OneWire v.2.2

Купить на Aliexpress
  Беспроводной Wi-Fi модуль ESP8266-01 (ESP-01)
  Адаптер USB для ESP8266 (Wi-Fi, CH340G)
  Комплект проводов DuPont, 2,54 мм, 20 см
  Датчик температуры DS18b20+

Купить в Самаре и области
значок RobotChip.ru  Беспроводной Wi-Fi модуль ESP8266-01 (ESP-01)
значок RobotChip.ru  Адаптер USB для ESP8266 (Wi-Fi, CH340G)
значок RobotChip.ru  Купить провода DuPont, 2,54 мм, 20 см в г. Самаре
значок RobotChip.ru  Купить датчик температуры DS18b20+ в г. Самаре

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *