Jsem úplný začátečník a vymyslel jsem si projekt teploměru s Wemos D1 mini, oled displejem, led diodou, upozorňující na vysokou vlhkost s čídlem dht22.
Teploměr data odesílá pomocí mqtt na broker Mosquitto na serveru HomeAssistant. Tyto funkce fungují bez problémů.
Dále mám druhý teploměr venku, kde je pouze wemos d1 mini a čidlo ds18b20 a opět odesílá data na broker.
Kód jsem poslepoval z toho co jsem našel na internetu.
Problém mám se zobrazením venkovní teploty na displeji teploměru s displejem. V HomeAssistantu se venkovní teplota ukazuje a aktualizuje správně, ale na displeji s velkým zpožděním a nebo zůstává stále stejná (neaktualizuje se). Už dva týdny se snažím přijít na to, kde je chyba.
Snad jsem to popsal dost srozumitelně. Předem děkuji za případné rady.
Přikládám kód:
Kód: Vybrat vše
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <U8g2lib.h>
#include <DHT.h>
#define wifi_ssid "xxxxxx"
#define wifi_password "xxxxxx"
#define mqtt_server "192.168.1.104"
#define mqtt_client_id "teplomer_kuchyn"
#define mqtt_user "xxx"
#define mqtt_password "xxxxxx"
#define humidity_topic "sensor/h_kuchyn"
#define temperature_topic "sensor/t_kuchyn"
#define DHT_PIN 2 //D4
#define DHTTYPE DHT22
WiFiClient espClient;
PubSubClient client(espClient);
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
DHT dht(DHT_PIN, DHTTYPE);
const int LED = 13; //D7
void setup() {
Serial.begin(9600);
u8g2.begin();
dht.begin();
pinMode(LED, OUTPUT);
WiFi.begin(wifi_ssid, wifi_password);
Serial.println("Connecting to WiFi..");
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
yield();
}
Serial.println("Connected to the WiFi network");
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect(mqtt_client_id, mqtt_user, mqtt_password ))
{
Serial.println("connected to MQTT broker");
}
else
{
Serial.print("failed with state ");
Serial.print(client.state());
delay(500);
}
}
}
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
// the payload is a "byte-stream". Convert this to a printable String object
String message;
for (int i = 0; i < length; i++)
{
message += (char)payload[i];
}
Serial.println(message); // debug print on our Arduino console
float newTemp = dht.readTemperature();
float newHum = dht.readHumidity();
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvR12_tr);
u8g2.setCursor(1, 16);
u8g2.print("Teplota: ");
u8g2.setFont(u8g2_font_helvR14_tr);
u8g2.setCursor(65, 16);
u8g2.print(newTemp);
u8g2.setFont(u8g2_font_helvR10_tr);
u8g2.print("*C");
u8g2.setFont(u8g2_font_helvR12_tr);
u8g2.setCursor(1, 40);
u8g2.print("Vlhkost: ");
u8g2.setFont(u8g2_font_helvR14_tr);
u8g2.setCursor(65, 40);
u8g2.print(newHum);
u8g2.setFont(u8g2_font_helvR10_tr);
u8g2.print(" %");
u8g2.setFont(u8g2_font_helvR12_tr);
u8g2.setCursor(1, 64);
u8g2.print("Venku: ");
u8g2.setFont(u8g2_font_helvR14_tr);
u8g2.setCursor(65, 64);
u8g2.print(message);
u8g2.setFont(u8g2_font_helvR10_tr);
u8g2.print("*C");
}
while ( u8g2.nextPage() );
if(newHum>55.00){
digitalWrite(LED, HIGH);
}
else if(newHum<55.00){
digitalWrite(LED, LOW);
}
else if(newHum=55.00){
digitalWrite(LED, HIGH);
}
}
void loop() {
client.loop();
client.subscribe("sensor/t_venku");
float teplota = dht.readTemperature();
float vlhkost = dht.readHumidity();
if(vlhkost>55.00){
digitalWrite(LED, HIGH);
}
else if(vlhkost<55.00){
digitalWrite(LED, LOW);
}
else if(vlhkost=55.00){
digitalWrite(LED, HIGH);
}
client.publish(temperature_topic, String(teplota).c_str(), true);
client.publish(humidity_topic, String(vlhkost).c_str(), true);
delay(5000);
}