Hitman46NL
New member
Hallo zusammen,
Hab 2 Fragen:
Meine 1. Frage
Habe seit letzter Woche ein Anemometer mit einem Wemos D1 mini pro und mqtt am laufen. Das funktioniert auch auch alles wundertbar kann das ueber einen Wemos D1 mqtt Client mit Display oder home Assistant sehen wenn draussen wind ist. Was mir aufgefallen ist wenn der wind unter 2,16 km/h liegt wird 0,00 km/h angezeigt. Das heisst es wird erst etwas angezeigt ueber 2,16 km/h.
meine Frage waere woran liegt das und laesst sich sowas aendern und wenn ja wie.
Meine 2. Frage waere wuerdet ihr ein Anemometer ueber Deep Sleep laufen lassen wuerde dann aber bedeuten, das in der deep sleep zeit keine daten von anemometer kommen bis er geweckt wird.Wollte das Anemometer ueber Lipro Akku 3,7V 1000mAh laufen lassen mit ladung ueber Solar.
Frage 1 Code
Hab 2 Fragen:
Meine 1. Frage
Habe seit letzter Woche ein Anemometer mit einem Wemos D1 mini pro und mqtt am laufen. Das funktioniert auch auch alles wundertbar kann das ueber einen Wemos D1 mqtt Client mit Display oder home Assistant sehen wenn draussen wind ist. Was mir aufgefallen ist wenn der wind unter 2,16 km/h liegt wird 0,00 km/h angezeigt. Das heisst es wird erst etwas angezeigt ueber 2,16 km/h.
meine Frage waere woran liegt das und laesst sich sowas aendern und wenn ja wie.
Meine 2. Frage waere wuerdet ihr ein Anemometer ueber Deep Sleep laufen lassen wuerde dann aber bedeuten, das in der deep sleep zeit keine daten von anemometer kommen bis er geweckt wird.Wollte das Anemometer ueber Lipro Akku 3,7V 1000mAh laufen lassen mit ladung ueber Solar.
Frage 1 Code
Code:
#include <ESP8266WiFi.h>
#include "settings.h"
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x26,20,4);
//LiquidCrystal_I2C lcd(0x27,20,4);
unsigned long next_timestamp = 0;
volatile unsigned long i = 0;
float wind = 0;
float last_wind = 0;
int count = 0;
volatile unsigned long last_micros;
long debouncing_time = 5; //in millis
int input_pin = 13;
char charBuffer[32];
WiFiClient espClient;
PubSubClient client(espClient);
void ICACHE_RAM_ATTR Interrupt()
{
if((long)(micros() - last_micros) >= debouncing_time * 1000) {
i++;
last_micros = micros();
}
}
void setup() {
lcd.init();
lcd.clear();
lcd.backlight();
Serial.begin(115200);
delay(10);
pinMode(input_pin, INPUT_PULLUP);//D7
// We start by connecting to a WiFi network
if(debugOutput){
Serial.println();
Serial.println();
Serial.print("Verbinde mit ");
lcd.setCursor(0, 0);
lcd.print("Verbinde mit ");
Serial.println(ssid);
lcd.setCursor(0, 1);
lcd.print(ssid);
}
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
int maxWait = 500;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if(debugOutput) Serial.print(".");
lcd.print(".");
if(maxWait <= 0)
ESP.restart();
maxWait--;
}
if(debugOutput){
delay(1000);
lcd.clear();
Serial.println("");
Serial.println("WiFi Verbunden");
lcd.print("WiFi connected");
delay(10);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
lcd.setCursor(0, 0);
lcd.print(ssid);
lcd.setCursor(0, 1);
lcd.print("IP address: ");
lcd.setCursor(0, 2);
lcd.print(WiFi.localIP());
lcd.setCursor(0, 3);
lcd.print("(c) 2022 by Th.Alex");
delay(100);
//
//lcd.clear();
}
delay(500);
// do_update();
client.setServer(mqtt_host, mqtt_port);
reconnect();
attachInterrupt(input_pin,Interrupt,RISING);
}
void loop()
{
if (millis() > next_timestamp )
{
detachInterrupt(input_pin);
count++;
float rps = i/number_reed; //computing rounds per second
if(i == 0)
wind = 0.0;
else
wind = 1.761 / (1 + rps) + 3.013 * rps;// found here: https://www.amazon.de/gp/customer-reviews/R3C68WVOLJ7ZTO/ref=cm_cr_getr_d_rvw_ttl?ie=UTF8&ASIN=B0018LBFG8 (in German)
if(last_wind - wind > 0.8 || last_wind - wind < -0.8 || count >= 10){
if(debugOutput){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Eltako Anemometer");
lcd.setCursor(0, 1);
lcd.print("--------------------");
Serial.print("Wind: ");
lcd.setCursor(0, 2);
lcd.print("Wind: ");
Serial.print(wind);
lcd.print(wind);
Serial.println(" km/h");
lcd.print(" km/h");
lcd.setCursor(0, 3);
lcd.print("(c) 2022 by Th.Alex");
}
String strBuffer;
strBuffer = String(wind);
strBuffer.toCharArray(charBuffer,10);
if (!client.publish(mqtt_topic_prefix, charBuffer, false))
{
ESP.restart();
delay(100);
}
count = 0;
}
i = 0;
last_wind = wind;
if(WiFi.status() != WL_CONNECTED) {
ESP.restart();
delay(100);
}
next_timestamp = millis()+1000; //intervall is 1s
attachInterrupt(input_pin,Interrupt,RISING);
}
yield();
}
void reconnect() {
int maxWait = 0;
while (!client.connected()) {
if(debugOutput) Serial.print("Attempting MQTT connection...");
if (client.connect(mqtt_id)) {
if(debugOutput) Serial.println("connected");
} else {
if(debugOutput){
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
}
delay(5000);
if(maxWait > 10)
ESP.restart();
maxWait++;
}
}
}