Пишем программный код для подключения датчика температуры DS18B20 к микроконтроллеру ESP8266 в среде программирования Arduino IDE.

В данном уроке мы подключим датчик температуры DS18B20 к микроконтроллеру ESP8266.

Детальную информацию по данному датчику можно посмотреть тут.

Подключать будем к выходу D1 микроконтроллера ESP8266:

Данные мы выведем на экран и передадим по WI-FI на WEB страничку.

#include <ESP8266WiFi.h> 
#include <OneWire.h>
#include <DallasTemperature.h> const char* ssid ="*****"; const char* password="******"; #define ONE_WIRE_BUS 5 OneWire oneWire(ONE_WIRE_BUS);//создаем объект для работы с библиотекой OneWire DallasTemperature DS18B20 (&oneWire);//создаем объект для работы с библиотекой DallasTemperature char temperatureC[6]; WiFiServer server (80);// Номер порта для сервера
void getTemperature(){ float tempC; do{ DS18B20.requestTemperatures(); tempC=DS18B20.getTempCByIndex(0); dtostrf(tempC,2,2,temperatureC); delay(100); } while (tempC==85.0||tempC==(-127.0));// код 85 - ошибка чтения, -127 - отсутствует датчик } void setup() { Serial.begin(115200); delay(10); DS18B20.begin();//начинаем работу с датчиком
DS18B20.setResolution(12);//устанавливаем расширение датчика (от 9 до 12) Serial.println(); Serial.println("Connecting to"); Serial.println(ssid); WiFi.begin(ssid,password); while (WiFi.status()!=WL_CONNECTED){ delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); server.begin();//ожидаем соединения клиентов Serial.println(" Web server running. IP:"); delay(1000); Serial.println(WiFi.localIP()); } void loop() {
WiFiClient client =server.available();//ожидаем подключение клиентов
if(client){// если есть подключение
while (client.connected()){// пока клиент подключен к серверу
if(client.available()){// если есть не прочитанные данные (возвращает количество непрочитанных байт)
char c=client.read();// читаем байт или символ, если нечего читать возвращает -1
if(c=='\n'){// если есть переход на новую строчку
getTemperature();// читаем температуру
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("ESP8266-Temperature ");
client.println("<br>");
client.println("Temperature:");
client.println(temperatureC);
client.println("*C");
Serial.print("Temperature =");
Serial.println(temperatureC);
break;
}
}
}
delay(1);
client.stop();// закрываем соединение
Serial.println("Client disconnected.");
}
}

В данном коде мы использовали функцию: dtostrf (), преобразует данные с плавающей точкой в массив символов:

dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);

где:

floatvar — переменная которую нужно преобразовать.

StringLengthIncDecimalPoint — количество символов после запятой.

numVarsAfterDecimal — количество символов до запятой.

charbuf — переменная, где храним результат в виде массива символов. 

Залив данную программу, в мониторе порта Вы увидите адрес который Вам присвоил  Ваш роутер:

Вбив данный адрес в браузер Вы увидите температуру которую измерил наш датчик: