Несколько dht11 на wemos d1 r1
Я пытаюсь подключить три отдельных DHT11 к моему Wemos d1 r1. У меня каждый датчик подключен к контакту питания, который включается и выключается, контакту датчика и общему заземлению. Вот мой код:
#include <DHTesp.h>
#include <ESP8266WiFi.h>
String apiKey = "xxxxxxxxxxxxxx";
const char* ssid = "xxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";
const char* server = "api.thingspeak.com";
DHTesp dht;
DHTesp dht2;
DHTesp dht3;
WiFiClient client;
void setup() {
pinMode(D6,OUTPUT);
pinMode(D8,OUTPUT);
pinMode(D1,OUTPUT);
Serial.begin(115200);
dht.setup(D5, DHTesp::DHT11);
dht2.setup(D7, DHTesp::DHT11);
dht3.setup(D2, DHTesp::DHT11);
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
digitalWrite(D6,HIGH);
}
void loop() {
digitalWrite(D6,HIGH);
delay(8000);
float t = dht.getTemperature();
float f = (t*1.8) + 32;
if (isnan(t))
{
Serial.println("Failed to read from DHT2 sensor!");
return;
}
Serial.print(", \"maintemp\": ");
Serial.print(f);
Serial.print("}\n");
digitalWrite(D6,LOW);
digitalWrite(D8,HIGH);
delay(8000);
float t2 = dht2.getTemperature();
float f2 = (t2*1.8) + 32;
if (isnan(t2))
{
Serial.println("Failed to read from DHT3 sensor!");
return;
}
Serial.print(", \"lowtemp\": ");
Serial.print(f2);
Serial.print("}\n");
digitalWrite(D6,LOW);
digitalWrite(D1,HIGH);
delay(8000);
float t3 = dht3.getTemperature();
float f3 = (t3*1.8) + 32;
if (isnan(t3))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print(", \"uptemp\": ");
Serial.print(f3);
Serial.print("}\n");
digitalWrite(D1,LOW);
delay(2000);
if (client.connect(server, 80)) {
String postStr = apiKey;
postStr += "&field3=";
postStr += String(f);
postStr += "&field4=";
postStr += String(f2);
postStr += "&field5=";
postStr += String(f3);
postStr += "\r\n\r\n\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(f);
Serial.println("Sending data to Thingspeak");
}
client.stop();
Serial.println("Waiting 20 secs");
// вещам требуется не менее 15-секундной задержки между обновлениями
// 20 секунд на всякий случай
delay(53700);
}
Как видите, я назначаю отдельный DHT для каждого контакта датчика и включаю и выключаю контакты питания для каждого датчика. Все они имеют общую основу.
Когда я запускаю код, первый датчик считывает температуру, а второй говорит: "Не удалось прочитать с датчика DHT3!".
Это не датчик, потому что, если я поменяю местами первый и второй датчик, первый всегда читает, а второй дает сбой. Если я уберу второй датчик, третий выйдет из строя. Я попытался подать питание на все контакты датчика в SetUP, но все равно работает только первый. Есть ли какой-то трюк, который я должен использовать здесь.
Я использую DHTESP.h, так как обычный DHT.h не работает с Wemos Pro Mini.
Кто-нибудь сталкивался с этим, чтобы дать мне некоторые рекомендации.
Спасибо
@user1114881, 👍-1
Обсуждение1 ответ
Возможно, вам придется создавать новый объект DHT при каждом включении питания. Я предполагаю, что датчик должен быть инициализирован Arduino, прежде чем он будет готов снимать показания, и когда вы выключаете и снова включаете питание, он теряет свою конфигурацию.
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Помогите использовать термистор с esp8266.
- DHT22 необходимо опустить/поднять ESP8266
- Запуск прерываний с помощью DHT-11
- Как выбрать датчик с использованием чипа 74HC138 на Wemos D1 Mini?
- Датчики температуры греются сами
- NodeMcu V3 и BMe280 -> Температура, влажность, давление: значение nan
Можете ли вы добавить печать
getStatusString
в свою ошибку? Например,если (иснан(т)) { Serial.print("Не удалось прочитать с датчика DHT2: статус"); Serial.println(dht2.getStatusString()); возвращаться; }
. Сделайте это для всех трех датчиков, затем опубликуйте вывод; он скажет вам, по крайней мере, какую ошибку он обнаруживает (тайм-аут? контрольная сумма?...), @frarugi87Можешь нарисовать схему? Какова общая измеренная подтяжка от линии передачи данных до линии +5 В?, @Maximilian Gerhardt