DS18B20 е цифров термометър с интерфейс използващ за комуникация само един проводник.
Всеки DS18B20 има уникален 64 битов сериен номер, което позволява много сензори да споделят един проводник.
Термометърът може да измерва температури от -55°C до +125°C.

За да използваме DS18B20, ще се наложи да инсталираме две библиотеки OneWire и DallasTemperature.


Свързваме:
- Пин 1 (левият) на
DS18B20сGNDнаNodeMCU - Пин 2 (средният) на
DS18B20сD3наNodeMCU - Пин 3 (десният) на
DS18B20с3v3наNodeMCU - Нужен е и
4.7kΩрезистор между Пин 2 и Пин 3
Като база за демото ще използвам кодът от предишната статия.
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "OneWire.h"
#include "DallasTemperature.h"
#define SCREEN_WIDTH 128 // OLED широчина на екрана в пиксели
#define SCREEN_HEIGHT 32 // OLED височина на екрана в пиксели
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// пин, на който е свързан DS18B20 на ESP8266 - D3
OneWire oneWire(D3);
DallasTemperature sensors(&oneWire);
void setup() {
// I2C адресът е 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// задаваме размер на шрифта
display.setTextSize(1);
// задаваме цвят на шрифта
display.setTextColor(WHITE);
// стартираме библиотеката за сензори
sensors.begin();
}
void loop() {
// правим заявка към температурният сензор
sensors.requestTemperatures();
// присвояваме температурата
float temperatureC = sensors.getTempCByIndex(0);
// изчистваме буфера
display.clearDisplay();
// задаваме позиция на текста
display.setCursor(0, 8);
// извеждаме текст
display.println("TechPot.w-lab.win");
// задаваме позиция на текста
display.setCursor(0, 18);
// извеждаме текст
display.print("Temp: ");
// извеждаме текст с текущата температура
display.print(temperatureC);
// извеждаме текст
display.print(" C");
// рисуваме знакът за градус °
display.drawCircle(68, 19, 1, WHITE);
// извеждаме буфера на екрана
display.display();
// пауза половин секунда
delay(500);
}
Резултатът:

