esp8266 ds18b20 пропадает связь
- Войдите на сайт для отправки комментариев
Чт, 09/01/2020 - 20:18
подключено 5 датчиков ds1820 провода витой пары медной 0,52 сечения в целом около 120 метров, проблема в том что при питание через усб и блок питание теряется связь, показывается темпертуру один датчик или два или три и постоянно прерывается, если подключить через повербанк то все нормально, если повербанк подключить в розетку и включить esp то все повторяется, в чем может быть проблема? подключено по этой схеме
код
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <BlynkSimpleEsp8266.h> #include <SimpleTimer.h> #include <OneWire.h> #include<DallasTemperature.h> #define BLYNK_PRINT Serial #define ONE_WIRE_BUS 2 const char* auth = ""; const char* ssid = ""; const char* pass = ""; const char* host = "esp8266-webupdate"; const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>"; SimpleTimer timer; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); ESP8266WebServer server(80); // Настройки float temp_limit[5][2] = { // Мин., Макс. температура каждого датчика {10, 20}, {10, 20}, {10, 20}, {10, 20}, {10, 20} }; #define notify_send 2 // Кол-во отправляемых уведомлений #define notify_interval 3000 // Интервал отправляемых уведомлений // Настройки float temp[5]; bool notify_send_flag[5]; byte notify_send_num[5]; unsigned long notify_send_time[5]; byte sensor_num; void setup(){ Serial.begin(115200); Blynk.begin(auth, ssid, pass); DS18B20.begin(); timer.setInterval(5000L, getSendData); Serial.println("Booting Sketch..."); WiFi.mode(WIFI_AP_STA); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() == WL_CONNECTED) { MDNS.begin(host); server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); server.on("/update", HTTP_POST, []() { server.sendHeader("Connection", "close"); server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); ESP.restart(); }, []() { HTTPUpload& upload = server.upload(); if (upload.status == UPLOAD_FILE_START) { Serial.setDebugOutput(true); WiFiUDP::stopAll(); Serial.printf("Update: %s\n", upload.filename.c_str()); uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; if (!Update.begin(maxSketchSpace)) { //start with max available size Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_WRITE) { if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_END) { if (Update.end(true)) { //true to set the size to the current progress Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); } else { Update.printError(Serial); } Serial.setDebugOutput(false); } yield(); }); server.begin(); MDNS.addService("http", "tcp", 80); Serial.printf("Ready! Open http://%s.local in your browser\n", host); } else { Serial.println("WiFi Failed"); } } void loop(){ timer.run(); Blynk.run(); server.handleClient(); MDNS.update(); if(sensor_num < 5){ if(temp[sensor_num] > temp_limit[sensor_num][1]){ if(!notify_send_flag[sensor_num]){ if(notify_send_num[sensor_num] < notify_send){ if(millis() - notify_send_time[sensor_num] > notify_interval){ Blynk.notify(String("Датчик N") + String(sensor_num + 1) + String(" выше ") + String(temp_limit[sensor_num][1]) + String(" C")); notify_send_num[sensor_num]++; notify_send_time[sensor_num] = millis(); } } else { notify_send_flag[sensor_num] = true; } } } else if(temp[sensor_num] < temp_limit[sensor_num][0] && temp[sensor_num] > 0){ if(!notify_send_flag[sensor_num]){ if(notify_send_num[sensor_num] < notify_send){ if(millis() - notify_send_time[sensor_num] > notify_interval){ Blynk.notify(String("Датчик N") + String(sensor_num + 1) + String(" ниже ") + String(temp_limit[sensor_num][0]) + String(" C")); notify_send_num[sensor_num]++; notify_send_time[sensor_num] = millis(); } } else { notify_send_flag[sensor_num] = true; } } } else { notify_send_flag[sensor_num] = false; notify_send_num[sensor_num] = 0; } sensor_num++; } else { sensor_num = 0; } } void getSendData(){ DS18B20.requestTemperatures(); temp[0] = DS18B20.getTempCByIndex(0); temp[1] = DS18B20.getTempCByIndex(1); temp[2] = DS18B20.getTempCByIndex(2); temp[3] = DS18B20.getTempCByIndex(3); temp[4] = DS18B20.getTempCByIndex(4); Serial.print("Temp_0: "); Serial.print(temp[0]); Serial.print(" oC "); Serial.print("Temp_1: "); Serial.print(temp[1]); Serial.println(" oC"); Serial.print("Temp_2: "); Serial.print(temp[2]); Serial.println(" oC"); Serial.print("Temp_3: "); Serial.print(temp[3]); Serial.println(" oC"); Serial.print("Temp_4: "); Serial.print(temp[4]); Serial.println(" oC"); Blynk.virtualWrite(11, temp[0]); Blynk.virtualWrite(12, temp[1]); Blynk.virtualWrite(13, temp[2]); Blynk.virtualWrite(14, temp[3]); Blynk.virtualWrite(15, temp[4]); }
3.3V на 120 метров? Даллас крут - ещё и датчики откликаются.
а как правильно запитать, подскажите)
а как правильно запитать, подскажите)
дело не в питании, поместите плату ближе к датчикам, чтоб длина проводов была хотя бы метров 30 максимум
а как правильно запитать, подскажите)
дело не в питании, поместите плату ближе к датчикам, чтоб длина проводов была хотя бы метров 30 максимум
расстояние между? если да, то расстояние между ними около 20м.
просто есть факт что с повербанка работает идеально
расстояние между? если да, то расстояние между ними около 20м.
нет, общая длина всей шины со всеми датчиками
расстояние между? если да, то расстояние между ними около 20м.
нет, общая длина всей шины со всеми датчиками
а как объясниться что от банка работает в том же месте нормально?)
какое максимальное расстояние по витой паре у датчиков ds18b20?
а как объясниться что от банка работает в том же месте нормально?)
Так и обьяснить, что при длинной линии связь с датчиками становится неустойчивой и проявляется это именно в том, что от малейших помех начинаются проблемы.
Возможно у вас БП плохой, не держит напряжение или дает наводки, найдите другой и попробуйте
а как объясниться что от банка работает в том же месте нормально?)
Так и обьяснить, что при длинной линии связь с датчиками становится неустойчивой и проявляется это именно в том, что от малейших помех начинаются проблемы.
Возможно у вас БП плохой, не держит напряжение или дает наводки, найдите другой и попробуйте
понял спасибо)