ESP8266_Basic Library

Begonnen von Pf@nne, 05 März 2016, 00:31:57

Vorheriges Thema - Nächstes Thema

Pf@nne

Moin,

Mitlerweile gibt es viele sehr nützliche Librarys für den ESP8266. Damit beim Erstellen des eigenen Sketches nicht jedes mal von vorne begonnen werden muss, machte es Sinn alle Grundfunktionen des ESP8266 in einer Library zusammenzufassen.

Die ESP8266_Basic umfasst die folgenden Grundfunktionen:


  • FS-FileSystem zur Ablage der Konfiguration,
  • Accesspoint mit WEB-Interface zur Erstkonfiguration oder falls der WiFi-Connect nicht innerhalb von 10 Sekunden erfolgt,
  • WEB-Interface zum Ändern der aktuellen Konfiguration und zur Statusüberprüfung,
  • OTA-Flashen über WEB-Upload,
  • MQTT publish / subcribe dissector zum besseren handeln der Topics.

Der eigene Sketch wird so weitestgehend von den Grundfunktionen entlastet.

ESP8266_template.ino
#include <ESP8266_Basic.h>
ESP8266_Basic espClient;

void setup() {
  Serial.begin(115200);
  Serial.println("");
 
  espClient.start_WiFi_connections();
}

void loop() {
  espClient.handle_connections();
}


(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_WEB-IF.PNG)
(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_HTTP-Update.PNG)
(http://www.s6z.de/cms/images/content/test/Homeautomation/Hardware/ESP8266/ESP8266_Basic/ESP8266_Basic_FlowChart.png)

MQTT Topics

Topics::Topics()
{/* MQTT subcribe TopicTree struct !!define TreeDepht in .h!!!
[x] mqttDeviceName
¦
¦-[0] WiFiConfig
¦ ¦-[00] WEBserver
¦ ¦ ¦-[000] Username
¦ ¦ +-[001] Password
¦ ¦-[01] Accesspoint
¦ ¦ ¦-[010] SSID
¦ ¦ +-[011] Password
¦ ¦-[02] WiFi
¦ ¦ ¦-[020] SSID
¦ ¦ ¦-[021] Password
¦ ¦ +-[022] IP
¦ +-[03] MQTT
¦ ¦-[030] Server
¦ ¦-[031] Port
¦ +-[032] Status
¦
¦-[1] Control
¦ ¦-[10] ESP8266
¦ ¦ ¦-[100] Reboot
¦ ¦ +-[101] ShowConfig
*/
sub.E1.count = sub_e1;
sub.E2.count = sub_e2;
sub.E3.count = sub_e3;

sub.E1.item[0] = "WiFiConfig";
sub.E2.item[0][0] = "WEBserver";
sub.E3.item[0][0][0] = "Username";
sub.E3.item[0][0][1] = "Password";
sub.E2.item[0][1] = "Accesspoint";
sub.E3.item[0][1][0] = "SSID";
sub.E3.item[0][1][1] = "Password";
sub.E2.item[0][2] = "WiFi";
sub.E3.item[0][2][0] = "SSID";
sub.E3.item[0][2][1] = "Password";
sub.E3.item[0][2][2] = "IP";
sub.E2.item[0][3] = "MQTT";
sub.E3.item[0][3][0] = "Server";
sub.E3.item[0][3][1] = "Port";
sub.E3.item[0][3][2] = "Status";

sub.E1.item[1] = "Control";
sub.E2.item[1][0] = "ESP8266";
sub.E3.item[1][0][0] = "Reboot";
sub.E3.item[1][0][1] = "ShowConfig";



Durch die Struktirierung des TopicTrees können die ankommenden subscribes einfach wieder ausgefiltert werden.


if (dissectResult.found){
    if (dissectResult.itemPath == "1/0/0"){
      if (strcmp(value, "Reboot") == 0){
        ESP.reset();
      }
    }
    if (dissectResult.itemPath == "1/0/1"){
      pubConfig();
    }
  }



Aktuell ist das Ganze noch in der alphaPhase, läuft jedoch schon recht gut, daher habe ich es für erste Tests schon online gestellt.

https://github.com/Pfannex/ESP8266_Basic.git
http://www.s6z.de/cms/index.php/homeautomation-homecontrol/hardwareplattformen/esp8266/134-esp8266-basic-library

Noch was wichtiges:
Der ESP-Core hat Probleme mit einem ESP.reset() bzw. ESP.restart() nach dem seriellen Flashen.
Als work around muss direkt nach dem seriellen Flashen der ESP einmal über den Reset-Taster neu gstartet werden, dann läuft der Softwarereset nach dem Flashen über OTA oder dem Aufruf über das WEB-IF fehlerfrei durch. Manchmal muss der ESP aber auch noch durch Wegnahme der Versorgungsspannung resetet werden. Soll ein bekanntes Problem sein.... mal beobachten.



FHEM auf: DS415+ (Master), Raspberry Pi 2

Olly

#1
Hallo,

hört sich gut an und hat alles was man braucht.
Werde ich mir sicher mal anschauen, wenn ich mal wieder etwas Zeit habe. Momentan hab ich alles aus Einzelteilen zusammengebaut.

Gruß

   Olly

BananaPi 1GB;NetCSM 868MHz, miniCUL 433MHz, LaCrosseGateway, 2x SignalESP; FHEM 6.2

carlos

Hallo,
Nur zur Info, so etwas gibt es doch schon mit Espeasy: http://www.esp8266.nu/index.php/Main_Page.
Damit bin ich eigentlich sehr zufrieden und funktioniert auch mit MQTT zusammen mit FHEM sehr gut.
Gruß
Carlos
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Pf@nne

#3
Zitat von: carlos am 05 März 2016, 11:00:43
Hallo,
Nur zur Info, so etwas gibt es doch schon mit Espeasy: http://www.esp8266.nu/index.php/Main_Page.
Damit bin ich eigentlich sehr zufrieden und funktioniert auch mit MQTT zusammen mit FHEM sehr gut.
Gruß
Carlos

ESPEasy kenne ich, war mir aber ein wenig zu instabil, hat sich aber bestimmt geändert.
ESPEasy ist schon eher etwas fertiges um mal eben ein paar Sensoren ans Netz zu bringen.
Ich wollte aber eine Basis für meine eigenen Sketche haben um immer ein Grundgerüst im Hintergrund zu nutzen.

Z.B. möchte ich dieses für die Steuerung meines RefloOvens nutzen, dafür ist ESPEasy nicht ganz das richtige.
Auch für meinen AktSen soll dies die Basis werden.

Zudem wollte ich gerne auch mal was selber machen..... ;D

EDIT:
alpha V0.101 auf erster Seite hinzugefügt.
FHEM auf: DS415+ (Master), Raspberry Pi 2

Pf@nne

Für die MQTT-Anbindung wird noch der pubsubclient von Nick O'Leary benötigt.

Entweder hier downloaden und ins Library-Verzeichnis kopieren oder direkt im Arduino downloaden.
https://github.com/knolleary/pubsubclient

FHEM auf: DS415+ (Master), Raspberry Pi 2

Pf@nne

Noch was wichtiges:

Der ESP-Core hat Probleme mit einem ESP.reset() bzw. ESP.restart() nach dem seriellen Flashen.
Als work around muss direkt nach dem seriellen Flashen der ESP einmal über den Reset-Taster neu gstartet werden, dann läuft der Softwarereset nach dem Flashen über OTA oder dem Aufruf über das WEB-IF fehlerfrei durch.
FHEM auf: DS415+ (Master), Raspberry Pi 2

hexenmeister

Klingt sehr gut! Werde unbedingt ausprobieren!

er

Hallo pf@nne,

wollte deine Library zum Testen installieren. Bekomme aber in der arduino ide mit Sketch-Bibliothek-.ZIP-Bibliothek hinzufügen ... eine Fehlermeldung: "angegebener Ordner/ZIP-Datei enthält keine gültige Bibliothek". Muss ich dies anders machen?

Grüße Erich

Pf@nne

Moin er,

Den Ordner "ESP8266_Basic" kopierst du in dein Arduino Libraryverzeichnis, in der Regel:
C:\Users\DeinUserName\Documents\Arduino\libraries

Den Ordner "ESP8266_template" irgend wo hin wo deine Sketche lagern.....

Zusätzlich musst du noch die "pubsubclient"-Library installieren.

Dann sollte alles durchlaufen........
FHEM auf: DS415+ (Master), Raspberry Pi 2

er

Hallo p@nne,

so hat es funktioniert mit dem Einbinden der Dateien.
Beim compilieren bekomme ich jedoch ganz schön viele Fehlermeldungen.

Hast du da eine Idee wegen was?

Gruß Erich

Pf@nne

Die Fehlermeldung sagt, dass diverse Functions der ESP8266_Basic bereits deklariert wurden.
Nur warum?

Welche Arduino ESP8266-Board-Version nutzt du?

FHEM auf: DS415+ (Master), Raspberry Pi 2

Pf@nne

Nimm mal anstatt des "WeMos D1 R2 & mini" das "Generic ESP8266 Module"
FHEM auf: DS415+ (Master), Raspberry Pi 2

er

Hallo pf@nne,

habe meinen Fehler gefunden. Habe in das sketch-Verzeichnis den Inhalt vom Verzeichnis ESP8266_template kopiert. Da ist auch die Datei
ESP8266_BASIC.cpp darin. Diese führte zu den Fehlermeldungen. Datei gelöscht, schon läuft das Kompilieren durch.

Gruß Erich

Pf@nne

 :o .......

Läuft denn alles soweit, Accesspoint gefunden und neu konfiguriert?
Hast du denn schon einen MQTT-Broker laufen?

FHEM auf: DS415+ (Master), Raspberry Pi 2

er

Broker läuft auf einem Raspberry. Mit einem Nodemcu 0.9 transferiere ich Temperaturwerte von einem 18B20 ins fhem.
Kämpfe gerade mit einem gestern eingetroffenen WeMos D1 Mini. Melde mich bei Fortschritt.

Gruß Erich