#include <OneWire.h> //Библиотека OneWire для работы с датчиком DS18B20
OneWire ds(17);//порт датчика температуры ds18b20. Датчик температуры для почвы.
float temperature; //Переменная для хранения данных с датчика DS18B20
void setup() {
/*Включаем экран*/
pinMode(16,OUTPUT); //Обьявляем пин как выходной. Reset экрана
digitalWrite(16, LOW);
delay(50);
digitalWrite(16, HIGH);
display.init();
display.flipScreenVertically();
}
void loop() {
// Определяем температуру от датчика DS18b20
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
delay(1000); // Микросхема измеряет температуру, а мы ждем.
ds.reset(); // Теперь готовимся получить значение измеренной температуры
ds.write(0xCC);
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
// Получаем и считываем ответ
data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший
// Формируем итоговое значение:
// - сперва "склеиваем" значение,
// - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)1
temperature = ((data[1] << 8) | data[0]) * 0.0625;
display.setFont(ArialMT_Plain_16); //Размер шрифта
display.setTextAlignment(TEXT_ALIGN_LEFT); //Выравнивание по левому краю
display.clear(); // Очистка дисплея
display.drawString(0, 0, "temp: " + String(temperature) + "C");
display.display();
}
На экране должно появиться значение «temp: ____»
Часть 2 Датчик температуры и влажности
/*Обьявление переменных экрана*/
#include "SSD1306.h"
#define SDA_PIN 4// GPIO4 -> SDA
#define SCL_PIN 15// GPIO15 -> SCL
#define SSD_ADDRESS 0x3c
SSD1306 display(SSD_ADDRESS, SDA_PIN, SCL_PIN);
/* DHT */
#include "DHT.h"
#define DHTPIN 22 //Пин к которому подключен DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float localHum = 0;
float localTemp = 0;
void setup() {
dht.begin();//Считывание данных
/*Включаем экран*/
pinMode(16,OUTPUT); //Обьявляем пин как выходной. Reset экрана
digitalWrite(16, LOW);
delay(50);
digitalWrite(16, HIGH);
display.init();
display.flipScreenVertically();
}
void loop() {
float tempIni = localTemp;
float humIni = localHum;
localTemp = dht.readTemperature();
localHum = dht.readHumidity();
if (isnan(localHum) || isnan(localTemp)) // Check if any reads failed and exit early (to try again).
{
localTemp = tempIni;
localHum = humIni;
return;
}
display.setFont(ArialMT_Plain_16); //Размер шрифта
display.setTextAlignment(TEXT_ALIGN_LEFT); //Выравнивание по левому краю
display.clear(); // Очистка дисплея
display.drawString(0, 0, "air temp: " + String(localTemp) + "C");
display.drawString(0, 20, "humidity: " + String(localHum) + "%");
display.display();
delay(100);
}