Arduino Due + DHT22 + Реле
- Войдите на сайт для отправки комментариев
Вс, 29/09/2013 - 16:16
Задача этих прибамбасов измерять температуру и включать выключать реле (которое будет включать выключать электрокотел (слаботочку управляющую, потому что реле питая сам тэн жить не будет)).
Понимаю что это стрельба из пушки по воробьям, но задача самая первая частичная - в дальнейшем планируется добавлять функционал. Плюс надо с чего то начинать - я и это сделать то пока не могу - поэтому и обращаюсь за помощью. Зимой будет время поковыряться.
Текущий код
#include <dht22.h>
dht22 DHT22;
void setup()
{
DHT22.attach(3);
Serial.begin(9600);
Serial.println("DHT22 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT22LIB_VERSION);
}
void loop()
{
Serial.println("\n");
int chk = DHT22.read();
Serial.print("Read sensor: ");
switch (chk)
{
case 0: Serial.println("OK"); break;
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
default: Serial.println("Unknown error"); break;
}
Serial.print("Temperature (°C): ");
Serial.println((float)DHT22.temperature, DEC);
Serial.print("Humidity (%): ");
Serial.println((float)DHT22.humidity, DEC);
Serial.print("Dew Point (°C): ");
Serial.println(DHT22.dewPoint(), DEC);
delay(10000);
}
Как в него присобачить включение релюшки (висит на 2 пине) по достижении температуры 5 град и выключение при достижении 7 градусов?
Спасибо. Вот вроде все добавил но вопрос нуба остался ... что писать в в поле оператора IF? 41 и 43 строки. В смысле как температура называется?
#include <dht22.h> #define Relay_1 2 // Arduino Digital I/O pin number dht22 DHT22; void setup() { pinMode(Relay_1, OUTPUT); DHT22.attach(3); Serial.begin(9600); Serial.println("DHT22 TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT22LIB_VERSION); delay(4000); } void loop() { Serial.println("\n"); int chk = DHT22.read(); Serial.print("Read sensor: "); switch (chk) { case 0: Serial.println("OK"); break; case -1: Serial.println("Checksum error"); break; case -2: Serial.println("Time out error"); break; default: Serial.println("Unknown error"); break; } Serial.print("Temperature (°C): "); Serial.println((float)DHT22.temperature, DEC); Serial.print("Humidity (%): "); Serial.println((float)DHT22.humidity, DEC); Serial.print("Dew Point (°C): "); Serial.println(DHT22.dewPoint(), DEC); IF (???<=5) digitalWrite(Relay_1,HIGH);// set the Relay ON IF (???=>7) digitalWrite(Relay_1,LOW);// set the Relay OFF delay(10000); }Вроде допер сам.
Буду копать дальше и тут если что допытывать :-)
В первом варианте првильная логика, во втором синтаксис, так что скрестите их вместе и будет вам счастье.
Это вы про то чтобы не было щелкунчика непрерывного туда\сюда?
Ну да я об помню но синтаксис меня "временно победил"...
Теперь я его... так наверно само то:
температуры временно текущие в комнате - чтоб было понятно что релюшка правильно щелкает.
Задача этих прибамбасов измерять температуру и включать выключать реле (которое будет включать выключать электрокотел (слаботочку управляющую, потому что реле питая сам тэн жить не будет)).
Понимаю что это стрельба из пушки по воробьям, но задача самая первая частичная - в дальнейшем планируется добавлять функционал. Плюс надо с чего то начинать - я и это сделать то пока не могу - поэтому и обращаюсь за помощью. Зимой будет время поковыряться.
реле разные бывают.. тут вон народ носится на 100 ампер пускатели в розетку.. ну типа а вдруг чего :)
и про стрельбу по воробьям из пушки тоже можно не переживать... у нас тут есть инидивиды которые для ентой цели облачные сервера приспособили :)
реле разные бывают.. тут вон народ носится на 100 ампер пускатели в розетку.. ну типа а вдруг чего :)
и про стрельбу по воробьям из пушки тоже можно не переживать... у нас тут есть инидивиды которые для ентой цели облачные сервера приспособили :)
Конечно, я говорил о конкретном реле которое у меня есть, а не в целом о РЕЛЕ.
А насчет "пушки" у меня на нее планов громадье... с учетом того что комутировать проводку звездой буду, то хочу максимально все завести на один блок. Если сдохнет легко заменить за 5 минут, чем постоянно следить за целым выводком разнообразия по всему дому.
Но в эту зиму дом уйдет без жильцов так что единственная его задача поддерживать на несколько градусов выше ноля чтоб опрессованый теплый пол не разморозить...
А зимой с "дублером пушки" буду отлаживать все ништяки... мне это долго и тяжело дастся чувствую - весь опыт програмирования - бейсик в школе почти 30 лет назад :-)
Вообщем сменил DHT22 на DS18B20 т.к. надо было датчик погружать в расширительный бак (самая низкая температура в системе). Все работало вот уже почти пару месяцев. Но решил прикрутить кард ридер и скидывать на него лог температуры. Скетч скидавается в дуину нормально, температуру измеряет, говорит что пишет на флэшку, но когда проверяю - флэшка пустая. Помогите разобраться что в скетче не так?
const int chipSelect = 10; //SC0 на Due #include <OneWire.h> #include <DallasTemperature.h> #include <SdFat.h> #define ONE_WIRE_BUS 2 #define RELAY_ON LOW #define RELAY_OFF HIGH #define Relay_1 4 #define Relay_2 5 #define Relay_3 6 #define Relay_4 7 #define Relay_5 8 #define Relay_6 9 #define Relay_7 11 #define Relay_8 12 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); unsigned long timer[10]; //Таймер на 10 установок если надо больше заменить соответсвенно byte timerState[10]; //Таймер на 10 установок если надо больше заменить соответсвенно SdFat sd; SdFile myFile; //---------------------------------------------------------------------------------------- void setup() { digitalWrite(Relay_1, RELAY_OFF); // т.к. реле управляется LOW то чтобы они при перезагрузке не включались пишем именно в этом порядке digitalWrite(Relay_2, RELAY_OFF); digitalWrite(Relay_3, RELAY_OFF); digitalWrite(Relay_4, RELAY_OFF); digitalWrite(Relay_5, RELAY_OFF); digitalWrite(Relay_6, RELAY_OFF); digitalWrite(Relay_7, RELAY_OFF); digitalWrite(Relay_8, RELAY_OFF); pinMode(Relay_1, OUTPUT); pinMode(Relay_2, OUTPUT); pinMode(Relay_3, OUTPUT); pinMode(Relay_4, OUTPUT); pinMode(Relay_5, OUTPUT); pinMode(Relay_6, OUTPUT); pinMode(Relay_7, OUTPUT); pinMode(Relay_8, OUTPUT); pinMode(10, OUTPUT); Serial.begin(9600); sensors.begin(); while (!Serial) {} delay(400); // задержка из-за перезагрузки Due if (!sd.begin(chipSelect, SPI_QUARTER_SPEED)) sd.initErrorHalt(); } //--------------------------------------------------------------------- void loop() { if (delaySeconds(1, 10)) { // цифра "1" это используемый таймер, а "10" это задержка в секундах, минутах или часах sensors.requestTemperatures(); // Отправка команды на получение температуры Serial.print("Temperature is: "); Serial.println(sensors.getTempCByIndex(0)); if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening test.txt for write failed"); } Serial.print("Writing to test.txt..."); // если файл успешно открыт то пишем myFile.println(sensors.getTempCByIndex(0)); myFile.close(); // закрываем файл Serial.println("done."); if (sensors.getTempCByIndex(0) <= 5) digitalWrite(Relay_1, RELAY_ON); //включаем реле если температура ниже else if (sensors.getTempCByIndex(0) > 7) digitalWrite(Relay_1, RELAY_OFF); //выключаем реле если температура выше } // Тут пишем остальной код который не выполняется в первом таймере } //-------------------------------------------------------------------- // Все ниже должо идти после основного "loop()" и относится только к таймеру int delayHours(byte timerNumber, unsigned long delaytimeH) { delayMilliSeconds(timerNumber, delaytimeH * 1000 * 60 * 60); } int delayMinutes(byte timerNumber, unsigned long delaytimeM) { delayMilliSeconds(timerNumber, delaytimeM * 1000 * 60); } int delaySeconds(byte timerNumber, unsigned long delaytimeS) { delayMilliSeconds(timerNumber, delaytimeS * 1000); } int delayMilliSeconds(int timerNumber, unsigned long delaytime) { unsigned long timeTaken; if (timerState[timerNumber] == 0) { //If the timer has been reset (which means timer (state ==0) then save millis() to the same number timer, timer[timerNumber] = millis(); timerState[timerNumber] = 1; //now we want mark this timer "not reset" so that next time through it doesn't get changed. } if (millis() > timer[timerNumber]) { timeTaken = millis() + 1 - timer[timerNumber]; //here we see how much time has passed } else { timeTaken = millis() + 2 + (4294967295 - timer[timerNumber]); //if the timer rolled over (more than 48 days passed)then this line accounts for that } if (timeTaken >= delaytime) { //here we make it easy to wrap the code we want to time in an "IF" statement, if not then it isn't and so doesn't get run. timerState[timerNumber] = 0; //once enough time has passed the timer is marked reset. return 1; //if enough time has passed the "IF" statement is true } else { //if enough time has not passed then the "if" statement will not be true. return 0; } }Упс я ламер... это флэшка гнала. Заменил на другую - все работает!!! Какой же форум суперский!!! Еще никто не ответил а все заработало! :-)
С наступающим всех!
Спрашивай, не стесняйся ))))
Тебя тоже с наступающим!
Кстати, нке забывай что millis() переполняется за 59 дней и дуня виснет!
лучше бы ссылочкой поделился на библиотеку DHT22 которая с дуей работает...
Кстати, нке забывай что millis() переполняется за 59 дней и дуня виснет!
А я купился на то что в таймере вроде предусмотрен сброс через 48 дней.
Или я неправильно 91 строку понял???
лучше бы ссылочкой поделился на библиотеку DHT22 которая с дуей работает...
Упс, а я их все перепробовал (штук 5) и только одна нормально заработала. Только я не помню откуда ее взял.
Вот расшарил со своего драйва.
https://drive.google.com/file/d/0Bwj7vhGs7_SpYXBjLURuNF9wblk/edit?usp=sharing
Вот нашел Watchdog библиотеку для Дуи.
http://www.leonardomiliani.com/2013/nuova-libreria-advancedfunctions-per-arduino-due/?lang=en
Но не могу ее заставить работать. Ктонить запускал WDT на Дуе успешно?
Вот нашел Watchdog библиотеку для Дуи.
http://www.leonardomiliani.com/2013/nuova-libreria-advancedfunctions-per-arduino-due/?lang=en
Но не могу ее заставить работать. Ктонить запускал WDT на Дуе успешно?
спасиб за DHT22
про WDT нада править arduino core кучками. там текстовик и все написано что делать.
Да там одну строчку всего лишь надо закоментить. Это я сделал а вот все равно WD не работает. Ладно после НГ еще попробую разобраться и скетч выложу.
Решил попробовать переписать скетч под использование schedule.
Черт побери мне так нравится больше - можно сколько угодно баловаться delay - контролер при этом не морозится. Скетч немного распух при загрузке в контролер зато похудел в самом Ide - чисто визуально мне это нравится больше.
Последний код такой.
#include <Scheduler.h> #include <SdFat.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS_PIN 2 #define RELAY_ON LOW #define RELAY_OFF HIGH #define Relay_1 4 #define Relay_3 5 #define Relay_5 6 #define Relay_7 7 #define Relay_9 8 #define Relay_11 9 #define Relay_13 11 #define Relay_15 12 OneWire oneWire(ONE_WIRE_BUS_PIN); DallasTemperature sensors(&oneWire); DeviceAddress Probe01 = { 0x28, 0x99, 0xE7, 0x3C, 0x05, 0x00, 0x00, 0xDD }; DeviceAddress Probe02 = { 0x28, 0x9E, 0x38, 0x3D, 0x05, 0x00, 0x00, 0xE6 }; const int chipSelect = 10; //SC0 на Due int led = 13; SdFat sd; SdFile myFile; //---------------------------------------------------------------------------------------- void setup() { digitalWrite(Relay_1, RELAY_OFF); // т.к. реле управляется LOW то чтобы они при перезагрузке не включались пишем именно в этом порядке digitalWrite(Relay_3, RELAY_OFF); digitalWrite(Relay_5, RELAY_OFF); digitalWrite(Relay_7, RELAY_OFF); digitalWrite(Relay_9, RELAY_OFF); digitalWrite(Relay_11, RELAY_OFF); digitalWrite(Relay_13, RELAY_OFF); digitalWrite(Relay_15, RELAY_OFF); pinMode(Relay_1, OUTPUT); pinMode(Relay_3, OUTPUT); pinMode(Relay_5, OUTPUT); pinMode(Relay_7, OUTPUT); pinMode(Relay_9, OUTPUT); pinMode(Relay_11, OUTPUT); pinMode(Relay_13, OUTPUT); pinMode(Relay_15, OUTPUT); pinMode(10, OUTPUT); pinMode(led, OUTPUT); Serial.begin(115200); sensors.begin(); sensors.setResolution(Probe01, 12); sensors.setResolution(Probe02, 12); while (!Serial) {} if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt(); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Reload..."); // если файл успешно открыт то пишем myFile.print("Reload"); myFile.close(); // закрываем файл Scheduler.startLoop(loop2); Scheduler.startLoop(loop3); } //--------------------------------------------------------------------- void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } void loop2() { Serial.println(); Serial.print("Number of Devices found on bus = "); Serial.println(sensors.getDeviceCount()); Serial.print("Getting temperatures... "); Serial.println(); sensors.requestTemperatures(); // Отправка команды на получение температуры Serial.print("Temperature 1 is: "); Serial.println(sensors.getTempCByIndex(0)); Serial.print("Temperature 2 is: "); Serial.println(sensors.getTempCByIndex(1)); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Writing to temp.txt..."); // если файл успешно открыт то пишем myFile.print("Temp 1 "); myFile.println(sensors.getTempCByIndex(0)); myFile.print("Temp 2 "); myFile.println(sensors.getTempCByIndex(1)); myFile.close(); // закрываем файл Serial.println("done."); if (sensors.getTempCByIndex(0) <= 5) digitalWrite(Relay_1, RELAY_ON); //включаем реле если температура ниже else if (sensors.getTempCByIndex(0) > 7) digitalWrite(Relay_1, RELAY_OFF); //выключаем реле если температура выше delay(60000); } void loop3() { digitalWrite(Relay_3, RELAY_ON); delay(60000); digitalWrite(Relay_3, RELAY_OFF); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Pump restarted"); // если файл успешно открыт то пишем myFile.print("Pump restarted"); myFile.close(); // закрываем файл delay(86400000); yield(); } //---------------------------------------------------------------- // Ниже относится к настройкам датчиков температуры void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); if (tempC == -127.00) { Serial.print("Error getting temperature "); } else { Serial.print("C: "); Serial.print(tempC); // разлочить две строки ниже если нужна температура по Фаренгейту //Serial.print(" F: "); //Serial.print(DallasTemperature::toFahrenheit(tempC)); } }Добавил еще один loop для выключения насоса на минуту раз в сутки (слегка завоздушиватся система) не критично но так стало еще лучше.
А вот WDT так и не запустился. В голом виде из образца рабтает. Если закоментирую строку блокирующую WDT в core и использую свой скетч то таймер исправно ресетует через 16 секунд. Но если вставляю в свой скетч ресет таймера то ниче не работает. Система не стартует вообще. Пробовал вставлять ресет в разные части скетча, в разные лупы но ничего не меняется. Может ктонить помочь куда искать?
Скетч с попыткой использования WDT такой:
#include "advancedFunctions.h" #include <Scheduler.h> #include <SdFat.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS_PIN 2 #define RELAY_ON LOW #define RELAY_OFF HIGH #define Relay_1 4 #define Relay_3 5 #define Relay_5 6 #define Relay_7 7 #define Relay_9 8 #define Relay_11 9 #define Relay_13 11 #define Relay_15 12 OneWire oneWire(ONE_WIRE_BUS_PIN); DallasTemperature sensors(&oneWire); DeviceAddress Probe01 = { 0x28, 0x99, 0xE7, 0x3C, 0x05, 0x00, 0x00, 0xDD }; DeviceAddress Probe02 = { 0x28, 0x9E, 0x38, 0x3D, 0x05, 0x00, 0x00, 0xE6 }; const int chipSelect = 10; //SC0 на Due int led = 13; SdFat sd; SdFile myFile; //---------------------------------------------------------------------------------------- void setup() { wdt.enable(16000); digitalWrite(Relay_1, RELAY_OFF); // т.к. реле управляется LOW то чтобы они при перезагрузке не включались пишем именно в этом порядке digitalWrite(Relay_3, RELAY_OFF); digitalWrite(Relay_5, RELAY_OFF); digitalWrite(Relay_7, RELAY_OFF); digitalWrite(Relay_9, RELAY_OFF); digitalWrite(Relay_11, RELAY_OFF); digitalWrite(Relay_13, RELAY_OFF); digitalWrite(Relay_15, RELAY_OFF); pinMode(Relay_1, OUTPUT); pinMode(Relay_3, OUTPUT); pinMode(Relay_5, OUTPUT); pinMode(Relay_7, OUTPUT); pinMode(Relay_9, OUTPUT); pinMode(Relay_11, OUTPUT); pinMode(Relay_13, OUTPUT); pinMode(Relay_15, OUTPUT); pinMode(10, OUTPUT); pinMode(led, OUTPUT); Serial.begin(115200); sensors.begin(); sensors.setResolution(Probe01, 12); sensors.setResolution(Probe02, 12); while (!Serial) {} if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt(); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Reload..."); // если файл успешно открыт то пишем myFile.print("Reload"); myFile.close(); // закрываем файл Scheduler.startLoop(loop2); Scheduler.startLoop(loop3); } //--------------------------------------------------------------------- void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); wdt.restart(); } void loop2() { Serial.println(); Serial.print("Number of Devices found on bus = "); Serial.println(sensors.getDeviceCount()); Serial.print("Getting temperatures... "); Serial.println(); sensors.requestTemperatures(); // Отправка команды на получение температуры Serial.print("Temperature 1 is: "); Serial.println(sensors.getTempCByIndex(0)); Serial.print("Temperature 2 is: "); Serial.println(sensors.getTempCByIndex(1)); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Writing to temp.txt..."); // если файл успешно открыт то пишем myFile.print("Temp 1 "); myFile.println(sensors.getTempCByIndex(0)); myFile.print("Temp 2 "); myFile.println(sensors.getTempCByIndex(1)); myFile.close(); // закрываем файл Serial.println("done."); if (sensors.getTempCByIndex(0) <= 5) digitalWrite(Relay_1, RELAY_ON); //включаем реле если температура ниже else if (sensors.getTempCByIndex(0) > 7) digitalWrite(Relay_1, RELAY_OFF); //выключаем реле если температура выше delay(60000); } void loop3() { digitalWrite(Relay_3, RELAY_ON); delay(60000); digitalWrite(Relay_3, RELAY_OFF); if (!myFile.open("temp.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("opening temp.txt for write failed"); } Serial.print("Pump restarted"); // если файл успешно открыт то пишем myFile.print("Pump restarted"); myFile.close(); // закрываем файл delay(86400000); yield(); } //---------------------------------------------------------------- // Ниже относится к настройкам датчиков температуры void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); if (tempC == -127.00) { Serial.print("Error getting temperature "); } else { Serial.print("C: "); Serial.print(tempC); // разлочить две строки ниже если нужна температура по Фаренгейту //Serial.print(" F: "); //Serial.print(DallasTemperature::toFahrenheit(tempC)); } }АУ есь тут кто? Или все еще пьяные в салатах валяются :-)
Дуя+schedule+wdt мною так и не побеждены, помогите плз.
PS гугля тоже молчит в т.ч. на пендоском наречии.
АУ есь тут кто? Или все еще пьяные в салатах валяются :-)
Дуя+schedule+wdt мною так и не побеждены, помогите плз.
PS гугля тоже молчит в т.ч. на пендоском наречии.
и никито тебе не поможет.. тут два с половиной инвалида у которых дуя.. :)
и на буржуйском форуме может быть челвоек 5 и они тож тока свои проблемы решают каждый сам..
Ну ладно с этим разобрались... просто безо всяких библиотек в лупе вставляем строчку ниже и все работает отлично.
Щас мучаю на будущее надо будет подключить два DHT22 датчика... туплю как это сделать.
В этой библиотеке просто прописать два пина не получается. Можешь помочь?
Щас мучаю на будущее надо будет подключить два DHT22 датчика... туплю как это сделать.
В этой библиотеке просто прописать два пина не получается. Можешь помочь?
так а зачем сразу 2 датчика на одном контролере?
да и в библиотеке не нужно прописывать 2 пина.
нужно для каждого пина инициализировать библиотеку.
типа
DHT22.attach(3);
DHT22.attach(4);
Один на улице, второй в помещении. Простые onewire темпертурные не подходят - нужны показания влажности и снаружи и внутри.
А как потом разделить чтение из разных датчиков?
void setup() { DHT22.attach(2); DHT22.attach(3); SerialUSB.begin(115200); SerialUSB.println("DHT22 TEST PROGRAM "); SerialUSB.print("LIBRARY VERSION: "); SerialUSB.println(DHT22LIB_VERSION); } void loop() { SerialUSB.println("\n"); int chk = DHT22.read(); SerialUSB.print("Read sensor: "); switch (chk) { case 0: SerialUSB.println("OK"); break; case -1: SerialUSB.println("Checksum error"); break; case -2: SerialUSB.println("Time out error"); break; default: SerialUSB.println("Unknown error"); break; } SerialUSB.print("Humidity (%): "); SerialUSB.println((float)DHT22.humidity, DEC); SerialUSB.print("Temperature (°C): "); SerialUSB.println((float)DHT22.temperature, DEC); SerialUSB.print("Temperature (°F): "); SerialUSB.println(DHT22.fahrenheit(), DEC); SerialUSB.print("Temperature (°K): "); SerialUSB.println(DHT22.kelvin(), DEC); SerialUSB.print("Dew Point (°C): "); SerialUSB.println(DHT22.dewPoint(), DEC); SerialUSB.print("Dew PointFast (°C): "); SerialUSB.println(DHT22.dewPointFast(), DEC); delay(2000); }Методом научного тыка допетрил...
#include <dht22.h> dht22 DHT22; void setup() { DHT22.attach(2); DHT22.attach(3); SerialUSB.begin(115200); } void loop() { WDT_Restart( WDT ); DHT22.read(1); SerialUSB.print("Humidity 1 (%): "); SerialUSB.println((float)DHT22.humidity, DEC); SerialUSB.print("Temperature 1 (°C): "); SerialUSB.println((float)DHT22.temperature, DEC); SerialUSB.print("Dew Point 1 (°C): "); SerialUSB.println(DHT22.dewPoint(), DEC); delay(2000); DHT22.read(2); SerialUSB.print("Humidity 2 (%): "); SerialUSB.println((float)DHT22.humidity, DEC); SerialUSB.print("Temperature 2 (°C): "); SerialUSB.println((float)DHT22.temperature, DEC); SerialUSB.print("Dew Point 2 (°C): "); SerialUSB.println(DHT22.dewPoint(), DEC); delay(2000); }Методом научного тыка допетрил...
мЫладец. :)
Поделитесь библиотекой для due
здравствуйте? @Anton Timkin. а можно целиком код с esp 01 реле и DHT 22. делаю умную теплицу с доступом через BLYNK.