Hallo Gemeinde,
ich benötige mal euer Schwarmwissen.
Folgendes:
Ich habe mir mit einem Wemos D1 mini, DHT22, Solarpanel, Laderegler und Lipo eine Wetterstation aufgebaut.
läuft mit diesem Code einwandfrei:
/************************( Importieren der genutzten Bibliotheken )************************/
#include "ThingSpeak.h"
#include "RunningMedian.h"
#include <ESP8266WiFi.h>
#include "DHT.h"
/********************( Definieren der Globale Variablen und Konstanten)********************/
float t; // Variable zum Speichern der Temperatur
float h; // Variable zum Speichern der Luftfeuchtigkeit
#define DHTPIN 4 // Hier die Pin Nummer eintragen wo der Sensor angeschlossen ist
#define DHTTYPE DHT22 // Hier wird definiert was für ein Sensor ausgelesen wird. In
DHT dht(DHTPIN, DHTTYPE); // unserem Beispiel möchten wir einen DHT11 auslesen, falls du
// ein DHT22 hast einfach DHT22 eintragen
unsigned long ThingspeakLastLogTime = 0;
unsigned long SensorenLetzteAktualisierung; // Hilfsvariable für Zeitmessung
int ThingspeakSampleTime = 30000; // Die schnellste Sample Time ist 15s ich empfehle
// 60s zu verwenden oder 300 Sekunden
int SensorenSampleTime = 1; // Zeit in s für Aktualisierung der
RunningMedian Mediant = RunningMedian(10);// Initialisieren von Median mit Anzahl Messwerten
RunningMedian Medianh = RunningMedian(10);
WiFiClient client;
int status = WL_IDLE_STATUS;
/**********************************(Thingspeak Eistellungen)*******************************/
unsigned long myChannelNumber = 123456; // Deine ThingSpeak Kanal Nummer
const char * myWriteAPIKey = "API-Key"; // Dein ThingSpeak API Key
/************************************(Wifi Einstellungen)**********************************/
char ssid[] = "SSID"; // Deine Wlan SSID (name)
char pass[] = "Key"; // Dein Wlan Passwort
/*******************************************(setup)****************************************/
void setup() {
WiFi.begin(ssid, pass); // Wlan Aktivieren und mit definiertem Netzwerk verbinden
ThingSpeak.begin(client); // ThingSpeak Client starten
Serial.begin(9600); // Serial Monitor starten
Serial.println("DHT22 Testprogramm");
dht.begin(); // DHT11 Library starten
}
/*************************************(Hauptprogramm)**************************************/
void loop() {
if (millis() - SensorenLetzteAktualisierung > (SensorenSampleTime*1000)) {
Mediant.add(dht.readTemperature()); // Messwert hinzufügen
t = Mediant.getAverage(); // Mittelwert auslesen
Medianh.add(dht.readHumidity()); // Messwert hinzufügen
h = Medianh.getAverage(); // Mittelwert auslesen
}
/*********************( Überprüfen ob alles richtig Ausgelesen wurde )*********************/
if (isnan(h) || isnan(t)) {
Serial.println("Fehler beim auslesen des Sensors!");
return;
}
// Nun senden wir die gemessenen Werte an den PC diese werden wir im Seriellem Monitor sehen
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\t"); // Tabulator
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.write('°'); // Schreiben des ° Zeichen
Serial.println("C");
SensorenLetzteAktualisierung=millis(); // Letzte Aktualisierung speichern
MesswerteSenden(); // Funktion zum Senden der Messwerte aufrufen
delay(2000);
}
/*********************(Funktion um Daten an Thingspeak zu senden)**************************/
void MesswerteSenden() {
if (millis() - ThingspeakLastLogTime > ThingspeakSampleTime) {
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
ThingspeakLastLogTime = millis();
}
}
Das ganze soll jetzt mit einem Battery Monitoring mit Spannungsteiler an A0 erweitert werden.
Die verkabelung usw sind klar. Nur der die Impletierung des neuen Codes gestaltet sich für mich als Hürde.
/*
* Wemos battery shield, measure Vbat
* add 100k between Vbat and ADC
* Voltage divider of 100k+220k over 100k
* gives 100/420k
* ergo 4.2V -> 1Volt
* Max input on A0=1Volt ->1023
* 4.2*(Raw/1023)=Vbat
*/
#include <ESP8266WiFi.h>
unsigned int raw=0;
float volt=0.0;
void setup() {
Serial.begin(115200);
Serial.println("ESP8266 in normal mode");
const char* ssid = "YourSSID";
const char* password = "YourPW";
const char* host = "api.thingspeak.com";
const char* writeAPIKey="YourAPIkey";
// put your setup code here, to run once:
pinMode(A0, INPUT);
raw = analogRead(A0);
volt=raw/1023.0;
volt=volt*4.2;
// Connect to WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
String v=String(volt);// change float into string
// make TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
return;
}
String url = "/update?key=";
url += writeAPIKey;
url += "&field3=";
url += String(volt);
url += "\r\n";
// Send request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
void loop() {
//all code is in the Setup
}
Diese 2 Codes müssten quasi zusammen ergänzt werden. Wie würde der fertige Code aussehen?
MfG
Pascal