ESP8266_Basic Library

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

Vorheriges Thema - Nächstes Thema

Rince

Ja und nein :)

Ja:
DHCP
Konnte mich an meinem Netzwerk anmelden (Meine Dusseligkeit sorgte erst dafür, dass sich der ESP mit meiner Verbindungsfreigabe am Handy gekoppelt hat, gleiches Netz, gleiches Passwort ;) => dann bekommt man logischerweise eine IP aus dem falschen Netz ;) )

MQTT
Hat sich connected => passt

UpdateServer
Habe ich noch nicht ausprobiert

Prinzipiell muss ich nur die kompilierte Datei (so ich sie finde) auf einen WebServer werfen und in der Konfiguration den Dateinamen eintragen, oder?


Ergo:
Alles von dir läuft perfekt soweit :)


Was nicht läuft:
Im Moment habe ich noch keinen Plan, was ich mit dem Framework anstellen muss :)
Ich bräuchte eine Art Kurzworkshop für Noobs, um mal auf das richtige Gleis zu kommen:

Meine Probleme gehen da los:
1. Wie Subscribe / Publishe ich ein Topic?
Fange ich da in meinem Programm an, oder modifiziere ich deine ESP8266_Basic_data.cpp ??? Oder muss / sollte ich es in eine Art myESP8266_Basic_data auslagern ???

Subscribe:
In der Schreibweise von der ESP8266_Basic_data.cpp etwa so:

¦-[2] User
    ¦-[20] UserNumber [1-6]
    +-[21] Time [1-12]
    +-[23] QRUploaded [true / false]
 



Publish

¦-[20] User
    ¦-[22] UserLocationRequest [UserNumber]



Ich brauch es nicht zwangsläufig im Webinterface, ich möchte nur abhängig davon was in der Payload steht Dinge tun...

Also bei UserNumber = 1 Servo1 auf [Time] setzen
Oder einen UserLocationRequest publishen, und bei einem [QRUploaded] = true das gerade übertragene Bild anzeigen

2. Wie bekomme ich auf den Webserver eine Datei (Bild) geschoben, welches auf den SPIFFs gespeichert wird (muss nicht per MQTT sein) ???

3. Wie greife ich mit SPIFFs auf eine Datei zu (ok, das könnte ich selber im ESP Forum nachlesen, nehme ich an) ;)


:)

Du siehst, es fehlt noch ziemlich an den Basics :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Pf@nne

ZitatErgo:
Alles von dir läuft perfekt soweit :)

Das freut mich doch erstmal...... 8)
Das Arbeiten muss natürlich ein wenig erläutert werden, frei nach dem Motto "was hat sich der Dichter wohl dabei gedacht!?".
Das habe ich leider zeitlich noch nicht geschafft, zumal ich selber noch nicht so ganz weiß, ob ESP_Basic eine Library oder vielleicht doch eher ein Template ist.
Momentan würde ich sagen, dass es sich hierbei um ein Template handelt, also das Framework selber als Basis dient und modifiziert wird.
Das habe ich jetzt schon bei zwei eigenen Projekten so gemacht, das hat auch sehr gut geklappt.

Da ich mit ProgrammerNotepad arbeite habe ich die ESP8266_Basic-Files im Library-Pfad abgelegt.
Diese können aber auch im Sketch-Pfad liegen, dann müsste man nur die #includes von <> auf "" ändern.

Kurzworkshop für Noobs   8)

MQTT-Topics definieren


Diese sind in der ESP8266_Basic_data.cpp zu definieren.
Hier können einfach die vorhandenen TopicTrees für subscribe und publish erweitert werden.
Wichtig ist hier die manuelle Anpassung der array[] indizes, diese müssen natürlich schlüssig sein.

Topics::Topics(){

...
...
  sub.E1.item[3] = "user";
  sub.E2.item[3][0] = "public";
  sub.E3.item[3][0][0] = "name";
  sub.E3.item[3][0][1] = "userName";
  sub.E2.item[3][1] = "private";
  sub.E3.item[3][1][0] = "age";
  sub.E3.item[3][1][1] = "weight";

...
...

  pub.E1.item[3] = "Control";
  pub.E2.item[3][0] = "User";
  pub.E3.item[3][0][0] = "machDies";
  pub.E3.item[3][0][1] = "machDas";


Die maximale Tiefe der Trees ist in der ESP8266_Basic_data.h ggf. anzupassen.


//publish struct
  const int pub_e1 = 4; //define TreeDepht here!!!
  const int pub_e2 = 5;
  const int pub_e3 = 5;
  const int pub_e4 = 0;

...
...

//subscribe struct
  const int sub_e1 = 4; //define TreeDepht here!!!
  const int sub_e2 = 5;
  const int sub_e3 = 4;
  const int sub_e4 = 0;


Ein publish ist jetz denkbar einfach!

  bool pub(int e1, char* Payload);
  bool pub(int e1, int e2, char* Payload);
  bool pub(int e1, int e2, int e3, char* Payload);


Diese functions sind public, d.h. auch aus dem Sketch herraus kann jetz eines der definierten Topics "gepublisht" werden:

ESP8266_template.ino

#include "ESP8266_Basic.h"
ESP8266_Basic espClient;

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

  espClient.pub(3,0,1, "ValueData");    //  hier wird Topic <ESPDeviceName/Control/User/machDas "ValueData">  an den Broker gesendet.


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


Als subscribe ist das Topic <ESPDeviceName/#> fest vorgegeben, d.h. alle Topics die für diesen ESP sind kommen pauschal an und werden auch seriell angezeigt.
Um auf ein definiertes Topic zu reagieren muss das ankommende Topic erstmal auseinander genommen werden.

Definierte Topics können sehr einfach in der ESP8266_Basic.cpp abgefangen werden.


//===> incomming subscribe <---------------------------------------------------
void ESP8266_Basic::mqttBroker_Callback(char* topic, byte* payload, unsigned int length) {

...
...

  if (dissectResult.found){
    if (dissectResult.itemPath == "3/0/0"){   //  Hier wird nach dem definierten Topic <ESPDeviceName/user/public/name> gefiltert.
  if (strcmp(value, "Walter") == 0){     //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Walter war es!");
  }
  if (strcmp(value, "Klaus") == 0){      //  Hier kann bei Bedarf auch noch der Payload gefilter werden.
    Serial.println("Klaus war es!");
  }
}

  }


Jetzt wir klar, dass es mehr Sinn macht dies im Template zu machen, anderenfalls müssen alle Filterergebnisse als Callback in den Sketch geholt werden oder das "dissecten" im Sketch selber stattfinden.


SPIFFs FileUpload


Dazu gibt es hier ein Java-Tool
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip
Das Tool einfach in C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar entpacken und Arduino neu starten.
Unter Werkzeuge findet man jetzt "ESP8266 Sketch Data Upload"
Die zugehörige Beschreibung über das SPIFFs FS finde ich ganz gut.
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html

Damit können die Files im "/Sktech/data" DIR aus der ArduinioIDE herraus hochgeladen werden.


Zugriff auf SPIFFs Files


Momentan ist nur das Lesen/Schreiben von *.json-Files implementiert.
Es ist aber auch möglich andere Files zu nutzen, nur habe ich da momentan noch keinen Plan von..... :-)
Wenn du es raus hast, poste es doch einfach...... 8)


FirmwareUpload von *.bin Files über einen WEB-Server


Hierzu "einfach" den kompilierten *.bin Sketch-File auf den WEB-Server kopieren.
Bei mir liegen die *.bin-Files nach dem Kompilieren unter:

C:\Users\Pfanne\AppData\Local\Temp\build73b7b65d2a159c2828c1f5395d13bde9.tmp

Weil TEMP, wird das DIR erst beim Kompilieren angelegt.
Jetzt nur noch den Server auf der ConfigPage angeben und los......

Ganz wichtig!!!
Nach dem ersten seriellen Flashen unbeding ein RESET ausführen, entweder über den RESET-Eingang oder Wegnahme der Hilfsspannung.
Der Arduino-Core hat hier noch Probleme mit dem erste Start nach einem seriellen Flash.


Damit sollte man erstmal weiter kommen, falls nicht einfach kurz melden.


Probleme kann es noch geben wenn der Umfang der *.json-Files im Code geändert wird.
Da die Datei bereits existiert und das neue Feld nicht kennt, kann es dann zu Abstürzen kommen.
Das muss noch abgefangen werden, ist eben noch alpha...... ::)

Es müsste aber auch funktionieren, wenn man über das SPIFFs-Tool einfach die geänderte *.json uploadet.
Werde ich ma testen......


Gruß
Pf@nne
FHEM auf: DS415+ (Master), Raspberry Pi 2

Pf@nne

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

Rince

Respekt.
Danke :)

Das war vermutlich eine der ausführlicheren Antworten im fhem Forum ;)

Ich versuche später mal die 0.200 per Http upzudaten.

Dann werde ich mal versuchen zu Publishen und zu Subscriben.

Nochmal Danke schön :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

ZitatProbleme kann es noch geben wenn der Umfang der *.json-Files im Code geändert wird.
Schreibe doch in die Json Datei die Versionsnummer mit rein.
"Version":        "0.200",

Dann kannst du abfangen, ob Basic und Json Config zusammen passen.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Schon wieder ich...

Zitat
Arduino: 1.6.8 (Windows 7), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Serial, 115200, 4M (3M SPIFFS)"

In file included from C:\Users\Andi\Documents\Arduino\libraries\ESP8266_Basic/ESP8266_Basic.h:53:0,

                 from C:\Users\Andi\Documents\Arduino\Sketche\ESP8266_template\ESP8266_template.ino:17:

C:\Users\Andi\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error "Please define I/O register types here"

#error "Please define I/O register types here"

  ^

exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).


Zuerst fehlte OneWire ibliotek. Habe eine gefunden und installiert


Dann fehlte eine DS Bibliothek:
Habe es mit dieser versucht:
https://github.com/milesburton/Arduino-Temperature-Control-Library


Was fehlt jetzt???
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Pf@nne

In der alpha V0.200 sind schon DS18B20 Routinen mit drin, schau mal in die ESP8266_Basic.h

//Sensoren
  //1Wire direct
  #include "OneWire.h"
  #include <DallasTemperature.h>


Ich glaube die kannst du auch über den Arduino LibraryManager installieren.
FHEM auf: DS415+ (Master), Raspberry Pi 2

Rince

#52
Danke, die hatte ich schon. Der Fehler der jetzt stört ist der:
Zitat
C:\Users\Andi\Documents\Arduino\libraries\OneWire/OneWire.h:108:2: error: #error "Please define I/O register types here"

Bin einstweilen wieder auf die 0.116 zurück

Übrigens hab ich nen Bug gefunden :)

Sort of:
Der Updatemechanismus akzeptiert keine Portangaben.

So funktioniert es:

UpdateServer
Server IP 192.168.5.21
FilePath /ESP8266_template.ino.bin



So nicht:

Server IP 192.168.5.21:8000



Noch ne Frage für Deppen:
Sag mal, das ganze Menü ist ja auf mit MQTT aufgebaut wenn ich das richtig sehe.

Könnte man dann mit MQTT-Spy eine Nachricht publishen, die den ESP zum Download und Update bringt?


Für den Fall, dass ich es noch nicht gesagt habe:
Vielen Dank für deine prompte Hilfe  :D
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

tiwo85

#53
Hallo,
Ich habe mich auch als hier ein. Erstmal riesen Respekt an Pfanne.
Mich interessiert, ob Holgi es geschafft hat die Library auf dem ESP-01 zum laufen zu kriegen.
Ich habe Arduino 1.6.7 sowie Esp package 2.1 und pubsub 2.6 als Protable "installiert" und die fehlenden Librarys über den Library Manager nach installiert.
Als Board habe ich General Esp Modul und als Speicher 1M(64kSpiffs)
Das Template würde einwandfrei kompiliert und hochgeladen. Nach dem Boot kommt Mounting FS, danach war's das. Entweder wdt Reset oder aber Fatal E.... Am laufenden Bande.


Gesendet von meinem D5803 mit Tapatalk

Pf@nne

#54
Zitat von: Rince am 01 April 2016, 13:05:43
Danke, die hatte ich schon. Der Fehler der jetzt stört ist der:

Komisch, mit der Arduino 1.67 und der ESP8266 V2.1.0 - rc2  läuft es bei mir durch.
Ich habe "meine" Libraries mal drann gehängt.

Zitat von: Rince am 01 April 2016, 13:05:43
Der Updatemechanismus akzeptiert keine Portangaben.
Stimmt, könnte man nachpflegen, momentan wir wohl von Port 80 ausgegangen.
Hab ich noch garnicht drüber nachgedacht......

Zitat von: Rince am 01 April 2016, 13:05:43
Sag mal, das ganze Menü ist ja auf mit MQTT aufgebaut wenn ich das richtig sehe.
Könnte man dann mit MQTT-Spy eine Nachricht publishen, die den ESP zum Download und Update bringt?

Logo, ist schon drinn.... musst du nur antoßen...
Machst du kukiluki....
 
  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";
  sub.E3.item[1][0][2] = "updateFirmware";        //  <------- publish DeviceName/Control/ESP8266/updateFirmware
  sub.E3.item[1][0][3] = "MeasureTime";

...
...
...

    if (dissectResult.itemPath == "1/0/2"){
  //UpdateFirmware()
  webServer.updateFirmware();
}


Das war ja Sinn der Übung....


Zitat von: tiwo85 am 01 April 2016, 13:36:10
Das Template würde einwandfrei kompiliert und hochgeladen. Nach dem Boot kommt Mounting FS, danach war's das. Entweder wdt Reset oder aber Fatal E.... Am laufenden Bande.

Hört sich an wie das Problem mit den unterschiedlichen Config-Files.
Lass mal beim Start das FS neu formatieren, dann werden die aktuellen Files neu angelegt.

//My File
//===> read from MyFile <-------------------------------------------------
bool ESP8266_Basic::read_MyFile(){
  bool readOK = false;
  File MyFile;
  //clean FS, for testing
  //SPIFFS.format();            //   <---- das mal aktivieren und starten, danach wieder auskommentieren und wieder neu flashen.


oder die aktuellen Files manuell auf das FS-Laden:

SPIFFs FileUpload

Dazu gibt es hier ein Java-Tool
https://github.com/esp8266/arduino-esp8266fs-plugin/releases/download/0.1.3/ESP8266FS-0.1.3.zip
Das Tool einfach in C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar entpacken und Arduino neu starten.
Unter Werkzeuge findet man jetzt "ESP8266 Sketch Data Upload"
Die zugehörige Beschreibung über das SPIFFs FS finde ich ganz gut.
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html

Damit können die Files im "/Sktech/data" DIR aus der ArduinioIDE herraus hochgeladen werden.

Ich hab die FS-Files auch nochmal drann gehängt.


Ich hoffe, ihr bekommt das zum laufen....
Ist ja alles noch alpha, da ändert sich immer noch ne Menge.

Gruß
Pf@nne







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

tiwo85

Ich werde es mal versuchen.

Gehe ich richtig in der Annahme, das das Filesystem vom Flashen unberührt bleibt? Weil wenn ja, macht es Sinn, das FS zu formatieren. Ist nur noch die Frage offen, welche Einstellungen sollte man in der IDE verwenden, bezüglich FS? Gibt es festgelegte Spezifikationen für die Module oder kann man selber wählen? Frei nach dem Motto, mehr FS weniger Flashspeicher?

Gesendet von meinem D5803 mit Tapatalk


Rince

#56
Danke Pf@nne, werde mir das nochmal ansehen :)

Zur Zeit baue ich grade das Display ein.

Ein "Hello World" bekomme ich schon beim initialisieren.

Zitat
Gehe ich richtig in der Annahme, das das Filesystem vom Flashen unberührt bleibt? Weil wenn ja, macht es Sinn, das FS zu formatieren.
Ja. Neu flashen läßt das Filesystem am Leben. Es wird formatiert, wenn noch kein FS da ist. Pf@nne hat dir den Code gepostet, den du ändern musst, wenn du immer formatiert haben willst.

ZitatIst nur noch die Frage offen, welche Einstellungen sollte man in der IDE verwenden, bezüglich FS? Gibt es festgelegte Spezifikationen für die Module oder kann man selber wählen? Frei nach dem Motto, mehr FS weniger Flashspeicher?
Jein.
Du solltest eine Einstellung verwenden, die du auch hast.

Stelle es dir vor, als würdest du eine Festplatte in 2 Partitionen aufteilen:
1xBetriebssystem/Programme und 1xPartition für deine Daten

Wie viel du jetzt jeweils wovon brauchst, bleibt im wesentlichen dir überlassen.


Hier ist das aber ausführlich dokumentiert:
http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html

Allerdings weiß ich nicht, was passiert wenn du vorher 1MB / 3MB hattest, und dann 2 MB / 2MB nimmst. Soweit ich Pf@nnes Code gelesen habe, ist das Filesystem dann korrupt und wird neu formatiert.

Aber ich bin auch nur ein Blinder mit dem ESP bis jetz ;)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

tiwo85

Ich steh grad echt auf dem Schlauch.
Das mit dem FS habe ich verstanden.
Mit einem Esp01 bleib ich immer hängen. Nach dem ich jetzt am "Anfang" das FS formatiert habe, kam danach wieder "Fatal exception".
Nun lässt sich der ESP nicht mehr Flashen :-(

Gesendet von meinem D5803 mit Tapatalk


Rince

Das habe ich in der Arbeit auch mit einem ESP.

Zu Hause bis jetzt noch nicht.

Der augenscheinlichste Unterschied ist, dass mein ESP zu Hause an einem aktiven USB Hub hängt, der in der Arbeit hingegen nicht.


Könnte es ein Stromversorgungsproblem sein?



@Pf@nne
Habe das mit dem FS ausprobiert.
Merkwürdig.

Zuerst schien es, als würde er das ganze FS neu schreiben.
Dauert gefühlt eine Ewigkeit.

Dann macht er einen Reset

Anschließend waren aber die Einstellungen bis incl. WIFI noch da, alles abwärts war weg

Verstehe ich grade nicht.

Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

tiwo85

Ich habe das Problem heute früh schonmal gehabt, nachdem ich den ESP mit dem ESP flasher neu geflasht hatte, ging es wieder.

Gesendet von meinem D5803 mit Tapatalk