Categories
ESP8266 NodeMCU

Да измерим температурата с DS18B20

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);
}

Резултатът:

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *