Code: Alles auswählen
[code]
#include <ESP8266WiFi.h> // Bibliothek fuers WLAN
#include <SPI.h> // Bibliothek fuers Display
#include <Wire.h> // Bibliothek fuers Display
#include <Adafruit_GFX.h> // Bibliothek fuers Display
#include <Adafruit_SSD1306.h> // Bibliothek fuers Display
#include <NewPing.h> // Bibliothek fuers Ultraschall
#define TRIGGER_PIN 14 // Ultraschall Trigger Pin ist D5
#define ECHO_PIN 12 // Ultraschall Echo Pin ist D6
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit der letzten Änderung vergangen sind
unsigned long interval = 30000; // Interval zwischen zwei Änderungen in Millisekunden
#define OLED_RESET LED_BUILTIN //fuers Display
Adafruit_SSD1306 display(OLED_RESET); //fuers Display
#define WIFI_SSID "XXXXXXXX"
#define WIFI_PASS "XXXXXXXXXXXX"
WiFiServer server(80); //WEB Server auf Port 80
byte HomematicIP[] = { 192, 168, 178, 36 }; // Homematic IP-Adresse
void setup() {
server.begin(); //Startet HTTP Server
Serial.begin(115200); //Startet Serielle Ausgabe
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Startet Display auf Adresse 0x3C
pinMode(16, OUTPUT); // LED ist an Pin D0
//WIFI Setup
WiFi.mode(WIFI_STA);
Serial.printf("Verbindungs zu %s wird aufgebaut ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(">");
delay(100);
}
Serial.println("");
Serial.printf("Verbunden! SSID: %s, IP Adresse: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
void loop() {
// Anzeige auf Display
display.clearDisplay();
display.setTextColor(WHITE); // Textfarbe setzen
display.setTextSize(1); // Text anzeigen
display.setCursor(0,0); // Textstartposition einstellen 0,0 bedeutet erstes Zeichen in erster Zeile
display.printf("IP: %s\n", WiFi.localIP().toString().c_str()); //Ausgabe IP auf Display
while (WiFi.status() != WL_CONNECTED) {
display.setTextSize(1); // Textgroesse setzen
display.setCursor(0,10); // Textstartposition einstellen
display.print("Keine WLAN Verbindung");
delay (5000);
}
display.setTextSize(1); // Textgroesse setzen
display.setCursor(0,10); // Textstartposition einstellen
display.print("WLAN Signal ");
display.print(WiFi.RSSI()); // gibt Signalstärke WiFi aus in db
display.print("db");
display.setTextSize(1); // Textgroesse setzen
display.setCursor(10,25); // Textstartposition einstellen
display.print("Abstand zum Deckel");
display.setTextSize(3); // Textgroesse setzen
display.setCursor(20,40); // Textstartposition einstellen
display.print(sonar.ping_cm()); // gibt Ultraschalldistanz aus in cm
display.print("cm");
display.display();
delay(500); //gibt an in welchem Zeitabstand in ms die Werte auf Diplay aktualisiert werden
// Alarm durch LED bei kleiner 50cm
if(sonar.ping_cm() <= 50) // ab welchem Wert blinkt LED
{
digitalWrite(16, HIGH); // schaltet LED ein, wenn if zutrifft
delay(1000); // 1 Sekunde warten
digitalWrite(16, LOW); // schaltet LED aus
delay(1000); // 1 Sekunde warten
}
else
{
digitalWrite(16, LOW); // schaltet LED aus, wenn if nicht zutrifft
}
delay(1000);
// WEB Abfrage
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
//Ausgabe auf Website
//client.print("WLAN Signalstaerke = ");
//client.print(WiFi.RSSI()); // gibt Signalstärke WiFi aus in db
//client.println("db"); //durch printLN wird eine neue Zeile gemacht
client.print("Distanz zum Tankdeckel vorne = ");
client.print(sonar.ping_cm()); // gibt Ultraschalldistanz aus in cm
client.print("cm");
client.println("<br />");
client.println("</html>");
break;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
//Abstandsmeldung an CCU
if (millis() - previousMillis > interval) { //wenn der oben angegebene Intervall abgelaufen ist, dann....
previousMillis = millis(); // aktuelle Zeit abspeichern
if (client.connect(HomematicIP,80)) { //wenn Verbindung zur CCU, dann.....
Serial.println("Daten an CCU2 senden - Verbindung zum Server..."); //Textausgabe auf Terminalfenster - durch "ln" wird am Ende ein Absatz gemacht/neue Zeile/Enter
Serial.print("sende Wert "); //Textausgabe auf Terminalfenster - ohne ln wird mit der nächsten Zeile (Sonarwert) weitergeschrieben
Serial.println(sonar.ping_cm()); //Textausgabe auf Terminalfenster
client.print("GET /config/xmlapi/statechange.cgi?ise_id=5656&new_value="); //Befehl zum CCU Systemvariable ändern mit Sonarwert aus nächster Zeile
client.print(sonar.ping_cm()); //ändert Wert in CCU Systemvariable 5656 auf Sonarwert
client.println(" HTTP/1.0");
client.println();
Serial.println("...erfolgreich gesendet!");
}
}
//else
//{
//Serial.println("nicht mit CCU2 Server verbunden");
//}
client.stop();
}
[/code]
Das ist der Code für meinen Ultraschallsensor. Ist wie gesagt wild zusammen kopiert (kann bestimmt einiges raus bzw anders) aaaaaaber....er funktioniert....halbwegs wenigstens
Wie gesagt, das Verrückte ist: Ich greife per Browser auf die Platine zu und er zeigt alle 5sek 106cm an. Wenn ich mir aber die Werte in der
CCU anschaue steht hier nur ab und zu mal 106cm. Meist eher 55cm, 66cm usw. Wenn ich den Laptop (das Ding ist im Keller) an der Platine zum Konfigurieren
dran habe und er dann auch seine Betriebsspannung über den Laptop bekommt, habe ich auch auf der CCU, im Serialmonitor und im Browser
die stabilen 106cm. Hatte ein extra Netzteil mit Mini Usb und ausreichend Leistung gekauft. Das hat auch ein ääähhhhh....wie heißt dat noch....
na kurz vorm Usb Stecker ist ein Zylinder (zum entstören?) im Kabel - ihr wisst schon was ich meine.
Verstehe wirklich nicht ganz warum das mit den Fehlmeldungen so ist, aber es muss ja was mit der Stromversorgung zu tun haben. Hatte nur
leider noch nicht so viel Zeit das näher zu untersuchen. Vielleicht sagt ja einer von Euch....ach...das hatte ich auch schon mal, das ist das und das