Gosha_Ginzburg
Member
И снова доброго дня.
Есть мерялка термпературы воды на крыше в бойлере.
Длиииииинный провод метров на 15, 3х0.34.
Ещё до интеграции в дом на столе показывает температуру, реагирует, потом отвалился и стал показывать -127 - то есть отключился. Потом снова включился.
Тут много спорных моментов, на которые закрыл глаза, ибо вроде работает. Длинный провод, не экранированный, в коммуникационной шахте, работает от 5 вольт (соответсвенно и возвращает как бы 5 вольт), потому что это ESP-15F - нету там ног для 3.3В, а платки есть.
В целом меня это не сильно парит, скорее чисто эстетические претензии. Но вдруг, есть более элегантное решение, чем заменять значение предыдущим стоящим например.
Или действительно где-то есть баг, который на стенде работает, а дома нет.
Код прикладываю
Есть мерялка термпературы воды на крыше в бойлере.
Длиииииинный провод метров на 15, 3х0.34.
Ещё до интеграции в дом на столе показывает температуру, реагирует, потом отвалился и стал показывать -127 - то есть отключился. Потом снова включился.
Тут много спорных моментов, на которые закрыл глаза, ибо вроде работает. Длинный провод, не экранированный, в коммуникационной шахте, работает от 5 вольт (соответсвенно и возвращает как бы 5 вольт), потому что это ESP-15F - нету там ног для 3.3В, а платки есть.
В целом меня это не сильно парит, скорее чисто эстетические претензии. Но вдруг, есть более элегантное решение, чем заменять значение предыдущим стоящим например.
Или действительно где-то есть баг, который на стенде работает, а дома нет.
Код прикладываю
Код:
#include <AsyncElegantOTA.h>
#include <elegantWebpage.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <LittleFS.h>
#define WIFI_SSID "Mi MIX 2S"
#define WIFI_PASSWORD "987654321"
//#define WIFI_SSID "Gosha_SmartHome"
//#define WIFI_PASSWORD "MySmartHome"
const long utcOffsetInSeconds = 7200; // Define NTP Client to get time
WiFiEventHandler wifiConnectHandler, wifiDisconnectHandler;//, stationConnectedHandler;
const int oneWireBus = 4; //I04// GPIO where the DS18B20 is connected to
OneWire oneWire(oneWireBus); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor
DeviceAddress tempDeviceAddress;
float Temp_val; // переменная температуы
byte addr[8];
byte flagDallRead;
byte data[12]; //для температуры
int resolution = 10;
unsigned long lastTempRequest = 0;
int delayInMillis = 0;
float temperature = 0.0;
int idle = 0;
unsigned long previousMillis = 0; // will store last time LED was updated
unsigned long previous_timer = 0; //Timer_delay_storage
uint32_t currentTime, loopTime, previous_serial, prevTime_temp, start_Time;
float temperature_C;
String temperatureC_string = "";
unsigned long currentMillis;
AsyncWebServer server(80);
//-----------------------------------------------------------------------
//// Replaces placeholder with button section in your web page
String processor(const String& var){
if(var == "TEMPERATUREC"){ // Replaces placeholder with DS18B20 values
return temperatureC_string;
}
return String();
}
void WIFI_connect()
{
WiFi.mode(WIFI_STA);
wifi_station_set_hostname("Boiler_temp");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting to AP");
}
void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial.println("Connected to Wi-Fi sucessfully.");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("RRSI: "); Serial.println(WiFi.RSSI());
Serial.print("Hostname - "); Serial.println(WiFi.hostname());
}
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial.println("Disconnected from Wi-Fi");
WiFi.printDiag(Serial);
}
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
float temperature_measure()
{
if (millis() - lastTempRequest >= delayInMillis) // waited long enough??
{
temperature = sensors.getTempCByIndex(0);
sensors.setResolution(tempDeviceAddress, resolution);
sensors.requestTemperatures();
delayInMillis = 750 / (1 << (12 - resolution));
lastTempRequest = millis();
return temperature;
}
return temperature;
}
//String readDSTemperatureC() {
// if(temperature_C == -127.00) {
// Serial.println("Failed to read from DS18B20 sensor");
// return "--";
// } else {
// Serial.print("Temperature Celsius: ");
// Serial.println(temperature_C);
// }
// return String(temperature_C);
//}
void setup() {
Serial.begin(74880); //115200 Start the Serial Monitor
delay (100);
Serial.println("I`m alive");
if (!LittleFS.begin()) {
Serial.println("An Error has occurred while mounting LittleFS");
return;
}
sensors.begin(); // Start the DS18B20 sensor
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(tempDeviceAddress, resolution);
sensors.setWaitForConversion(false);
sensors.requestTemperatures();
delayInMillis = 750 / (1 << (12 - resolution));
lastTempRequest = millis();
WIFI_connect();
AsyncElegantOTA.begin(&server); //start OTA server
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
//-------------------- server addition -----------------------------
// Route for root / web page
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) { // send index_html page to client
request->send(LittleFS, "/index.html", String(), false, processor);
});
server.on("/temperature_C", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send_P(200, "text/plain", temperatureC_string.c_str());
});
server.onNotFound(notFound);
// Start server
server.begin();
}
void loop() {
currentMillis = millis();
temperature_C = temperature_measure();
// temperatureC_string = readDSTemperatureC();
temperatureC_string = String(temperature_C);
}