Code:
/*
(C) 2020 R.Schick
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter http://beelogger.de
// Version 20.01.2020
// Name des WLAN-Zugangspunkts
const char Access_Point[] PROGMEM = "WLan_Name_SSID";
// Passwort des Zugangspunktes
const char AP_Passwort[] PROGMEM = "WLan_Passwort";
// Domainname zum Webserver mit beelogger-Skript, Bsp:"meineDomain.de";
const char serverName[] PROGMEM = "community.beelogger.de";
// GET mit Verzeichnis Webserver-Skript und das PHP Skript für den jeweiligen beelogger
// Bsp: "GET /mein_ordner/beelogger6/beelogger_log.php?"
// Achtung: Stringlänge muss zur Variable "parameter" in send_data_via_wlan() passen
// Anzahl Byte: 10 20 30 40 50
const char pfad[] PROGMEM = "GET /meinordner/beeloggerx/beelogger_log.php?";
// Passwort vom Webserver-Skript
const char Passwort[] PROGMEM = "Log"; // Log = Default
//----------------------------------------------------------------
// Konfiguration beelogger
//----------------------------------------------------------------
#define HX711_SCK A0 // HX711 S-Clock
#define Modul_CS 10 // Ethernet abschalten
#define Power_Pin 4 // Power On
//----------------------------------------------------------------
#define Seriell_Baudrate 9600
//----------------------------------------------------------------
// Konfiguration ESP-8266-01 WLAN Modul
//----------------------------------------------------------------
byte ESP_RX = 8;
byte ESP_TX = 9;
#define ESP_Baudrate 9600
#define ESP_RESET A2
#include <ESP_beelogger.h>
C_WLAN_ESP01 my_esp;
const char Str_Http[] PROGMEM = " HTTP/1.1\r\n";
const char Str_Con[] PROGMEM = "Connection: close\r\n\r\n";
//----------------------------------------------------------------
// Test-Messdaten (regulär kommen die Messdaten von den Sensoren)
float TempIn = 25.00;
float TempOut = 35.00;
float FeuchteIn = 40.00;
float FeuchteOut = 60.00;
float Licht = 50000.00;
long Gewicht = 25000;
float Batteriespannung = 3.70;
float Solarspannung = 1.70;
bool OK = true;
void setup() {
char parameter[80], data[64];
int Service = 0;
digitalWrite (HX711_SCK, HIGH); //HX711 aus
pinMode(HX711_SCK, OUTPUT);
digitalWrite(Modul_CS, HIGH); // Modul Ethernet usw. aus
pinMode(Modul_CS, OUTPUT);
digitalWrite(Power_Pin, HIGH); // Power an
pinMode(Power_Pin, OUTPUT);
digitalWrite(ESP_RESET, HIGH); // ESP8266 an
pinMode(ESP_RESET, OUTPUT);
Serial.begin(Seriell_Baudrate);
Serial.println(F("ESP 8266-01 Test Sketch 08.04.2020"));
Serial.flush();
delay(1000);
Serial.println(F("Abfrage Modul ... "));
if (my_esp.init(ESP_Baudrate)) {
Serial.println("i.O.");
my_esp.mode(); // Station Mode permanent
Serial.println();
Serial.println(F("ESP Firmware:"));
my_esp.firmware(); // firmware abfragen
Serial.println(my_esp.buffer);
Serial.println();
Serial.println(F("WLAN Information:"));
my_esp.signal(0);
strcpy_P(parameter, Access_Point);
my_esp.signal(parameter); // hole Signalstärke
strcpy(parameter, my_esp.buffer);
char cc = ',';
char *pos = strchr(parameter, cc); // Suche ','
if (pos) {
Service = atoi(pos + 1);
}
if ((Service > -10)) {
Serial.print(F("Signalstärke unklar: "));
}
if ((Service < -90)) {
Serial.print(F("Signal schwach: "));
}
if (Service) {
Serial.print(F("Signalstaerke: "));
}
Serial.print(Service);
Serial.println(F(" dB"));
Serial.println();
Serial.flush();
delay(500);
my_esp.send("AT+CWMODE_DEF=1");
delay(1000);
}
else {
OK = false;
Serial.println(F("Modul konnte nicht abgefragt werden"));
Serial.println(my_esp.buffer);
Serial.println();
ESP_Abschaltung();
}
if (OK) {
strcpy_P(parameter, Access_Point);
Serial.print(F("Verbinde zum WLAN: "));
Serial.print(parameter);
Serial.println(" ... ");
strcpy_P(data, AP_Passwort);
if (my_esp.join(parameter, data)) {
Serial.println(F("WLAN Verbindung OK"));
Serial.println();
Serial.println();
}
else {
OK = false;
Serial.println(F("Verbindungsfehler!"));
Serial.println();
ESP_Abschaltung();
}
}
if (OK) {
Serial.println(F("Verbinde mit Server ... "));
strcpy_P(parameter, serverName);
Serial.print(parameter);
if (my_esp.Connect(parameter)) {
Serial.println(F(" ... connect: OK"));
Serial.println();
}
else {
OK = false;
Serial.println(F(" connect fehlgeschlagen"));
Serial.println();
Serial.println(my_esp.buffer);
Serial.println();
ESP_Abschaltung();
}
}
#if 0
if (OK) {
unsigned long t;
char c = 'x';
Serial.println(F("Test beginnen j/n ?"));
Serial.println(F("Eingabe von 'j' und bestätigen mit 'Enter' startet den"));
Serial.println(F("Transfer der Testdaten"));
Serial.println();
t = millis();
do {
if (Serial.available() > 0) {
c = Serial.read();
Serial.print(c);
Serial.println();
break;
}
} while ((millis() - t) < 10000); // 10 sec Zeit
if (c == 'j') {
OK = true;
}
else {
ESP_Abschaltung();
OK = false;
}
}
#endif
}
void loop() {
char KonvertChar[15];
char data[80];
char parameter[64];
if (OK) {
long Check = round(TempIn + TempOut + FeuchteIn + FeuchteOut + Licht + Gewicht + Solarspannung + Batteriespannung);
if (my_esp.prep_send(300)) { // fiktive Länge, senden wird mit 0x00 gestartet
Serial.println(F("Uebertrage Daten zum Webserver ..."));
Serial.flush();
//"GET " + url + php + "?" + Daten + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
// Wichtig: der String darf von der url bis Ende der Daten keine Leerzeichen enthalten
strcpy_P(parameter, pfad);
Serial.println(parameter);
Serial.flush();
my_esp.send(parameter);
// erstelle Daten
my_esp.send("Passwort=");
strcpy_P(parameter, Passwort);
my_esp.send(parameter);
my_esp.send("&TempIn=");
dtostrf(TempIn, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&TempOut=");
dtostrf(TempOut, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&FeuchteIn=");
dtostrf(FeuchteIn, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&FeuchteOut=");
dtostrf(FeuchteOut, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&Licht=");
dtostrf(Licht, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&Gewicht=");
dtostrf(Gewicht, 1, 0, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&VBatt=");
dtostrf(Batteriespannung, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&VSolar=");
dtostrf(Solarspannung, 4, 2, KonvertChar);
my_esp.send(KonvertChar);
my_esp.send("&Check=");
dtostrf(Check, 6, 2, KonvertChar);
my_esp.send(KonvertChar);
// ende Daten
//
strcpy_P(parameter, Str_Http);
my_esp.send( parameter);
my_esp.send("Host: ");
strcpy_P(parameter, serverName);
my_esp.send( parameter);
my_esp.send("\r\n");
strcpy_P(parameter, Str_Con);
my_esp.send( parameter);
my_esp.send(0x00); // Startkommando senden
OK = false;
if (my_esp.sendCommand(0, 500, "SEND OK")) {
//Serial.println(F("SEND OK"));
}
if (my_esp.sendCommand(0, 2000, "200 OK")) {
//Serial.println(F("HTTP OK"));
if (my_esp.sendCommand(0, 5000, "ok *")) {
Serial.println(F("Quittung OK"));
OK = true;
// Empfangsbuffer auswerten
// Format Quittung aus beelogger-log.php
// echo "5ok*" = 5 Minuten
// echo "25ok*" = 25 Minuten
// echo "150ok*" = 150 Minuten -> 2,5 Stunden
int n = atoi(my_esp.buffer); // Konvertiere str in int
Serial.println();
if (n > 0) {
Serial.print("Intervallvorgabe vom Server: ");
Serial.print(n);
Serial.println(" Minuten ");
}
else {
Serial.print("Kein Intervall vom Server vorgegeben. ");
Serial.println(my_esp.buffer);
Serial.println();
Serial.println(n);
}
}
else {
Serial.println(F("Quittung Fehler!"));
Serial.println(my_esp.buffer);
OK = false;
}
}
if (my_esp.quit()) {
Serial.println(F("Restart OK"));
}
else {
OK = false;
}
Serial.flush();
delay(2000);
if (my_esp.init(ESP_Baudrate)) { // baud rate
Serial.println("...");
strcpy_P(parameter, Access_Point);
strcpy_P(data, AP_Passwort);
if (my_esp.join(parameter, data)) {
Serial.println("..");
strcpy_P(parameter, serverName);
if (my_esp.Connect(parameter))
Serial.println(".");
OK = true;
}
}
} // prep_send
if (OK) {
// Test-Messdaten um 1 erhöhen
TempIn++;
TempOut++;
TempOut++;
FeuchteIn++;
FeuchteOut++;
FeuchteOut++;
Licht++;
Gewicht++;
Batteriespannung++;
Solarspannung++;
if ((int)TempIn % 3) {
TempOut = TempOut - 3;
FeuchteIn = FeuchteIn - 2;
}
// Abschaltung nach 5 Datenübertragungen
Serial.println(TempIn);
if (TempIn >= 30.0) {
Serial.println(F("Test erfolgreich beendet"));
OK = false;
ESP_Abschaltung();
}
}
else {
Serial.println(F("Fehler im Test!"));
ESP_Abschaltung();
}
} // if OK
}
void ESP_Abschaltung() {
Serial.println(F("Verbindungen werden getrennt"));
Serial.println();
my_esp.disConnect();
my_esp.quit();
delay(100);
my_esp.end();
Serial.end();
}
Lesezeichen