#include #include #include #include #include "WEBset.h" // Hier ist die HTML-Webseite als Array abgelegt #define ConLed 5 // LED zur Anzeige der Wlan-Verbindung #define LEDpin 2 // LED zum Blinken. Bei ESP-07 Pin 2. Bei ESP-01 Pin 1 #define DNS #define seriell // Einschalter für serielle Ausgabe IPAddress apIP(192, 168, 168, 30); // IP-Adresse für Setup #if defined DNS // Fuer Setupmodus #include const byte DNS_PORT = 53; DNSServer dnsServer; #endif ADC_MODE (ADC_VCC); // ADC an das Stromversorgung uint ADCKal34, ADCKal24; // Variablen für Kalibrationswerte int z = 0; //Aktuelle EEPROM-Adresse zum lesen String nachricht = "Zisterne"; String url = "AR1402;1"; int timout = 0; int wert; char ssid[32] = "myWlan"; char passwort[64] = "MyPassword"; char s[50]; char befehl[5]; int tc=0; int sFlag=0; int p; char c_inChar; String s_input; // In diesem String speichern wir dann unseren kompletten Text. String w; String batt; char host[20] = "192.168.4.1"; const int port=14207; ESP8266WebServer server; EspClass ESPm; HTTPClient http; #include "Setup.h" extern "C" { #include "user_interface.h" } void Fehlgeschlagen() { http.end(); #if defined seriell // Entweder Serielle Meldungen Serial.println("Verbindung zum Server fehlgeschlagen"); delay(100); #endif delay(100); } void setup() { char inser; pinMode(ConLed, OUTPUT); digitalWrite(ConLed, 0); EEPROM.begin(512); // EEPROM initialisieren mit 512 Byts //------------------------------------ Prüfen ob Tx und Rx verbunden sind ------------------------------- pinMode(1, OUTPUT); // Tx pinMode(3, INPUT_PULLUP); // Rx digitalWrite(1, 1); delayMicroseconds(2); if (!digitalRead(3))goto weiter; // Prüfen ob Tx und Rx verbunden sind digitalWrite(1, 0); delayMicroseconds(2); if (digitalRead(3))goto weiter; pinMode(LEDpin, OUTPUT); digitalWrite(LEDpin, 0); Einstellen(); // TxD ist mit RxD verbunden Setupmodus (Setup.h) weiter: #if defined seriell // Entweder Serielle Meldungen Serial.begin(115200); // oder #else // LED Anzeige pinMode(LEDpin, OUTPUT); // Vorbereiten der LED #endif //------------------------------- Einstellungen aus EEPROM einlesen ------------------------------------------- z = 0; LeseEeprom(ssid, sizeof(ssid)); if (ssid[0] == 255) // Wenn EEPROM leer ist dann: { for (int i = 0; i < 6; i++) EEPROM.write(i, '\0'); // mit "0" fullen EEPROM.commit(); // digitalWrite(LEDpin, 0); Einstellen(); // und in Setup modus wechseln } LeseEeprom(passwort, sizeof(passwort)); // Rest aus EEPROM einlesen LeseEepromStr(&url, 100); LeseEepromStr(&nachricht, 100); //---------------------------------- ADC - Kalibrationswerte einlesen ------------------------------------------- char *zeichen; zeichen = reinterpret_cast(&ADCKal34); *zeichen = EEPROM.read(240); zeichen++; *zeichen = EEPROM.read(241); zeichen = reinterpret_cast(&ADCKal24); *zeichen = EEPROM.read(242); zeichen++; *zeichen = EEPROM.read(243); if (ADCKal34 > 5000 || ADCKal34 < 2000)ADCKal34 = 3400; if (ADCKal24 > 5000 || ADCKal24 < 1500)ADCKal24 = 2400; //------------------------------------ ADC Wert korriegieren ------------------------------------------- uint ADCValue = 0; // Batteriespannung messen ADCValue = ESPm.getVcc(); unsigned int faktor = ADCKal34 - ADCKal24; int Korrekturwert = 2.4 * faktor - ADCKal24; float ADCfloat = float(ADCValue + Korrekturwert); ADCfloat = ADCfloat / faktor; if (ADCfloat<2.7) {nachricht="Batteriespannung<2.7V";} else {nachricht="Ok";} String Ubatt = String(ADCfloat, 2); batt=Ubatt; //------------------------------------ Im Station Modus mit Netzwerk verbinden ------------------------------------------- WiFi.mode(WIFI_STA); # if defined seriell // Serielle Ausgaben falls freigeschaltet Serial.println(); Serial.print("U Batt: "); Serial.println(Ubatt); Serial.print("Connecting to "); Serial.println (ssid); Serial.println (nachricht); #endif WiFi.begin(ssid, passwort); while (WiFi.status() != WL_CONNECTED) // Solange nicht verbunden versuche 6S zu verbinden { //----------------------------------------------- Timeout abgelaufen --------------------------------------- if (timout > 60) // Wenn Anmeldung nicht möglich { #if defined seriell Serial.print("Netzwerk nicht gefunden"); #endif delay(100); } // End timeout //------------------------------- Anzeige Während Verbindungsaufbaus ------------------------------------------------- timout++; #if defined seriell delay(500); Serial.print("."); #else // digitalWrite(LEDpin, 0); delay(50); // digitalWrite(LEDpin, 1); delay(50); #endif }//--------------------------------- Verbunden ------------------------------------------------------------------------- Serial.println("verbunden"); digitalWrite(ConLed, 1); } void send_msg(void){ uint8_t i=0; char s1[50]; char s2[10]; String o; o+=url; o+=befehl; o+=";"; o+=batt; o+=";"; o+="0.00"; o+=";"; o+="Zisterne"; WiFiClient client; if (!client.connect(host,port)) { Serial.println("Fehler bei der Verbindung"); } client.print(o); delay(10); client.flush(); client.stop(); } void loop() { while(Serial.available() > 0){ // So lange etwas empfangen wird, durchlaufe die Schleife. c_inChar = Serial.read(); // Speichere das empfangene Zeichen in der Variablen c_inChar. s_input.concat(c_inChar); // Füge das Zeichen an den String an, damit wir den kompletten Text erhalten. if (c_inChar == '\r') { // War das letzte Zeichen ein CR (Carriage Return)? strcpy(s,s_input.c_str()); } if (strstr(s,"AR1402Z")!=NULL) { p=s_input.indexOf(";"); if (p>0){w=s_input.substring(p+1);} wert=w.toInt(); strcpy(befehl,w.c_str()); send_msg(); s_input=""; } } }