Температурная аномалия на BS18B20 + NodeMCU на Tingspeak
Температура время от времени падает с 59+C до -13C или до других случайных значений. Использованный скетч и информация с этого сайта: http://internetofthinking.blogspot.com/2016/02/upload-ds18b20-temperature-sensor-data.html
NodeMCU питается от зарядного устройства телефона 5v 1a через microUSB. Размещение резистора 4,7 кОм между проводом передачи данных и 3v3 мне не помогло.
Кто-нибудь знает, как решить эту проблему? Например, фильтровать результаты и передавать на сервер только те значения, которые отличаются не более чем на n * C, или что-то в этом роде?
Вот набросок
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define myPeriodic 15 //в сек | Thingspeak pub составляет 15 секунд
#define ONE_WIRE_BUS 2 // DS18B20 на выводе arduino 2 соответствует D4 на физической плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float prevTemp = 0;
const char* server = "api.thingspeak.com";
String apiKey ="-";
const char* MY_SSID = "-";
const char* MY_PWD = "-";
int sent = 0;
void setup() {
Serial.begin(115200);
connectWifi();
}
void loop() {
float temp;
//буфер символов[10];
DS18B20.requestTemperatures();
temp = DS18B20.getTempCByIndex(0)+5;
//String tempC = dtostrf(temp, 4, 1, buffer);//обрабатывается в sendTemp()
Serial.print(String(sent)+" Temperature: ");
Serial.println(temp);
//если (temp != prevTemp)
//{
//Отправить температуру (темп);
//prevTemp = температура;
//}
sendTeperatureTS(temp);
int count = myPeriodic;
while(count--)
delay(1000);
}
void connectWifi()
{
Serial.print("Connecting to "+*MY_SSID);
WiFi.begin(MY_SSID, MY_PWD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
Serial.println("");
}//конечное соединение
void sendTeperatureTS(float temp)
{
WiFiClient client;
if (client.connect(server, 80)) { // использовать ip 184.106.153.149 или api.thingspeak.com
Serial.println("WiFi Client connected ");
String postStr = apiKey;
postStr += "&field1=";
postStr += String(temp);
postStr += "\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");
client.print(postStr);
delay(1000);
}//завершить, если
sent++;
client.stop();
}//завершение отправки
@user60654, 👍1
Обсуждение2 ответа
Отбрасывание (потенциально) поддельных показаний может помочь в крайнем случае, но что-то происходит, чтобы вызвать эти поддельные показания. Вам было бы лучше найти и исправить это, чем искать обходной путь.
Это довольно стабильные устройства, и вы не должны видеть больше пары LSB (несколько 1/4 градуса Цельсия). Я склонен предложить звукосниматель шума на однопроводной шине, но поддельные образцы на вашей фотографии выглядят идентично. У меня есть паразитная однопроводная шина > 15 ', просто витая пара без экрана, и DS18b20 рядом с MCU, а другой - в конце. Я сглаживаю ввод, но не убираю всплески.
Проверяли ли вы CRC блокнота устройства между преобразованием и считыванием температуры? Как подключено ваше устройство (схема)? Находится ли он в паразитическом режиме?
Вы проверили CRC блокнота устройства
Идк, как это сделать.
Как подключено ваше устройство (схема)
Устройство подключено в обычном режиме, прямо как на этом рисунке
DS18b20 (водонепроницаемый) расположен на верхней части котла в специальном углублении для измерения температуры, здесь определенно нет никаких микроволновых печей, а температура не превышает 80 ° C. Я постараюсь сегодня на всякий случай сменить источник питания, а позже перевести датчик в паразитный режим.
- Невозможно извлечь основные данные с помощью ThingspeakHTTP.
- NodeMCU - Vin контакт как выход 5V?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разве в узле MCU v3 (LoLin) нет встроенного светодиода?
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
измерьте несколько раз ... игнорировать максимальные и минимальные показания, @jsotola