ESP8266 und Raspberry Pi Kommuniakation

  • Hallo zusammen,

    ich bin gerade an einem Hausautomatisierungsprojekt in dem ich einen zentralen Punkt habe, den RPi 2B, an dem alle Daten der Bus-Systeme etc. zusammenlaufen und in einer SQLite Datenbank gepeichert werden.

    Ich würde nun sehr gerne Nodes bauen mit ESP8266. Diese sollen aber die Werte an den Raspberry Pi schicken. Ich würde gerne für die ESP8266 eine eigene Firmware schreiben. Ich weiß nicht ob ich hier (http://nodemcu-build.com/index.php) richtig bin wenn ich das mit nodemcu machen will. Mit dem Arduino habe ich schon ESP8266 programmiert.

    Ist es also überhaupt möglich Daten direkt an den Pi zu senden? Das es an eine Website geht ist klar, aber an ein lokales Gerät?

    Würde mich über eine Antwort sehr freuen.

    Gruß aus dem Schwarzwald
    Florian

  • Hallo floflovaldo,

    genau das habe ich auch vor und schon ein paar Ideen dafür. leider nur erst mal Ideen, da mir momentan die Zeit dafür fehlt.

    ich denke, es würde ja beides gehen, entweder von den ESP8266 an den Pi senden (Webserver oder ??) oder jenen zum Abfragen der Messpunkte zu nutzen, was ja relativ einfach geht. Eine interessante Sache habe ich gefunden, vielleicht hilft die dir ja schon mal weiter: https://blog.silvertech.at/esp8266-arduin…ire-und-taster/

    Gruß aus der Tieflandsbucht, STF

  • Ich verwende eine selbst geschriebene "REST"-Schnittstelle:

    Auf dem RP läuft ein Webserver (Apache z.B.), der per http get oder http put einfach von überall aus den Netz "befragt" bzw. "beschickt" werden kann.
    Es wird im Webserver ein PHP-Script aufgerufen, dem die Werte/Kommandos per http-get mitgegeben werden.
    Dieses interpretiert die Parameter der Anfrage und führt auf dem Server entsprechende Aktionen aus...

    Beispiel (Lampensatz umschalten)

    Code
    http://192.168.178.16:8888/schaltelicht.php?lampe1=on&lampe2=off

    oder (Datenübermittlung eines Erdfeuchtefühlers)

    Code
    http://192.168.178.23/datalogger/upd_feuchte.php?espno=1&date=2015-08-13_14-22-01&feuchte=123456789&time=16:00:00


    Das kann man per Browser, wget oder curl absetzen aus dem lokalen Netz und/oder (wenn der Port (im oberen Bsp. 8888) per Portweiterleitung von aussen freigeschaltet ist) auch aus dem Internet.

    Da ich das php-Script selbst in der Hand habe, kann ich natürlich als http-Request dann auch nützliche Informationen zurück schicken.

    Das Ganze mache ich inzwischen für alle meine Remote-Sensors (sowohl Raspis als auch ESP8266 gestützte), um deren Daten in eine lokale MySQL-DB zu schreiben bzw. abzurufen...

    Nur mal so als Anregung...

    LG, das Zen
    Automatisch zusammengefügt:
    Addon (edit):
    Ich programmiere die ESP8266 per Arduino-IDE, da steht dann der gesamte Library-Zoo der Arduinos zur Verfügung.
    Automatisch zusammengefügt:
    Ach ja: (noch was vergessen..):
    Man kann auf diese Weise interssante Daten auch zu ThingsSpeak schicken:

    Code
    https://api.thingspeak.com/update?api_key=<deinkey>&field1=12345

    das Ergebnis (der Erdfeuchtefühler): https://thingspeak.com/channels/79695

    (Die Aussetzer kommen dadurch zustande, dass der Akkus nur ca. 60-80h durchhält... daran arbeite ich demnächst :D )
    sowas wie eine Solarversorgung...

  • Hi,

    Klar geht das. Auf dem Pi muss nur ein Dienst laufen der die Daten entgegennimmt.

    Ich hab sowas im Moment mit ArrestDB am laufen. Das funktioniert super.
    Wenn es dir(wie mir anfangs auch) wirklich nur um das entgegennehmen der Daten und speichern in der DB geht ist ArrestDB wirklich praktisch. Ich hab damit nur gute erfahrungen gemacht.

    Wenn du etwas mehr(fertigeres) haben möchtest schau dir unbedingt mal fhem oder eines der anderen Heimautomatisierungs Tools an. Das hast du dann auch gleich eine schöne Oberfläche über die sich die ganzen Sensoren verwalten lassen.

    Ich hab gestern mal angefangen mich ein bischen in fhem einzulesen und bin davon total begeistert. Es bieten sich gleich so viele (praktische) Möglichkeiten. Auch das integrieren einer meiner Sensoren hat auf anhieb geklappt. :)

    MQTT steht auch schon länger auf meiner TODO Liste. Das liest sich nämlich richtig interessant. :)

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (4. Februar 2016 um 22:46)

  • Hi,
    und ich schmeiss doch noch EMONCS in den Ring ( -> hier <- bzw. -> hier <- ). Da kannst Du die Daten per Web-API (also einfach per URL-Aufruf) eintragen ... und die Oberfläche hat auch was ;)
    btw: die haben ein eigenes "minimalst read/write" Image für den RPi und das Ganze ist intuitiv bedienbar ...

    Kommunikation über TCP/IP ... was willst Du mehr?

    //EDIT meint noch: das -> SHC <- von -> agent47 <- könntest Du Dir auch mal anschauen ;)

    cu,
    -ds-

  • Hallo Zentris,

    das war bei mir eigentlich auch ursprünglich so aber in vielen Foren zu den ESPs wurde das Ganze Arduino Zeug "in den Dreck gezogen" gescheit geht das nur so...
    Ich habe vor erstmal nur Nodes zu machen die Werte senden, also z.B. einen DS18S20 der die Werte alle 20 sek sendet.

    Ich möchte das ganze am Raspberry Pi nur empfangen, entweder in einem Python Code oder direkt in eine lokale SQLite Datenbank auf dem Pi.

    Hättest du da eine Idee bzw. den Arduino Code den du evtl. veröffentlichen könntest? Würde mich sehr interessieren wie ich das am besten machen könnte.

    Beste Grüße
    Florian


  • das war bei mir eigentlich auch ursprünglich so aber in vielen Foren zu den ESPs wurde das Ganze Arduino Zeug "in den Dreck gezogen" gescheit geht das nur so...
    Ich habe vor erstmal nur Nodes zu machen die Werte senden, also z.B. einen DS18S20 der die Werte alle 20 sek sendet.

    Ich möchte das ganze am Raspberry Pi nur empfangen, entweder in einem Python Code oder direkt in eine lokale SQLite Datenbank auf dem Pi.

    Hättest du da eine Idee bzw. den Arduino Code den du evtl. veröffentlichen könntest? Würde mich sehr interessieren wie ich das am besten machen könnte.

    Mal kurz OT bzgl. deines "Forum... in den Dreck gezogen":
    In diversen Foren treten bestimmte User sehr provokant/arogant und überheblich auf.
    Abwertendes Beurteilen bestimmter Techniken/Software/Tools oder Praktiken zeigen dann oft die geistige Unreife, die dem User trotz hoher technischen Kenntnisse innewohnt...
    Ich denke, das sollte man erkennen und (so mache ich das inzwischen) ignorieren (nur in sehr seltenen Fällen hab ich mir da mal einen Schlagabtausch geliefert, aber eigendlich ist mir da meine Lebenszeit zu schade...)
    Ich habe solches Verhalten u.A. im FHEM-Forum beobachten können, auch im mikrokontroller-Forum, aber nur vereinzelt und will damit NICHT das Forum verurteilen: die meisten User sind nett und hilfsbereit.

    (So wie hier im Rasberry Forum) :)

    Also: Eigene Meinung bilden, objektiv bleiben (es gibt 1000 + 1 Weg, um nach Rom zu kommen).
    </OT>

    Ich benutze die Arduino-IDE seit Jahren für die Arduinos, warum soll ich eine weitere IDE benutzen, wenn die ESP's sich daraus ebenfalls "becoden" lassen?
    Klar, der Overhead im Code ist enorm, aber mal ehrlich: Speicherplatzprobleme hatte ich im ESP noch nie im Gegensatz zu den Arduinos...

    Ich habe im Attachment eine Zip Datei angefügt (ja,ja, ein schwarzer Rappe...).
    Darin befinden sich 3 Files:

    • eine ino Datei:
      das ist der Code für den ESP8266-01 (WLAN-SSID, WLAN-Password und ThingSpeak-API-Key müssen individuell eingefügt werden)
    • ein sql Script:
      das dient dem Anlegen der Logger-Datenbank in einer MySQL DB (local user "datalogger" with password "datalogger")
    • ein php Script:
      Das ist das eigendliche "worker-script" des "REST"-Interfaces.
      Das muss in das HOME Verzeichnis (oder auch ein Verzeichnis deiner Wahl, dann muss der Aufruf des Scriptes diesen Pfad beinhalten) des Apache Webservers.


    Die Kommentare in den Dateien sind bunt gemischt deutsch und englisch, dass kommt davon, dass ich einfach drauf los tippe und je nachdem, wo der Sprachschalter gerade liegt ... :lol:

    Schau es dir so als Anregung an... vielleicht hast du Verbesserungen, die würden mich natürlich interessieren! :thumbs1:

    LG, das Zen

    [edit]: Der erwähnte Anhang ist im Post#10.... sry...

  • Hi,

    danke für die Ganzen Infos. Leider finde ich deine erwähnte ZIP nirgends. Liegt das irgendwie an mir oder ist da wirklich keine?
    Werde mich dann sobald ich sie gefunden habe damit auseinandersetzten :D

    Gruß Florian

  • hm, ich hab sie angehängt... ich probier es nochmal..

    [edit] ah ! jetzt.... der Fehler sitzt meist VOR der Tastatur :)

    [edit2]: das ino file in Zip-File ist unvollständig, bitte das aus dem nächsten Kommentar verwenden... :wallbash:

  • Ich nochmal:
    Mir ist gestern beim Anpassen des ESP Sketches ein Editierfehler passiert, so dass das ino File im der Zip Datei unvollständig ist... :@

    Hier nochmal das jetzt hoffendlich vollständige File. :D

    LG, das Zen

  • Hallo,

    leider bin ich mit dem Sketch ein bisschen überfordert. Zuerst einmal verwende ich die ESP8266-12E aber das ist ja erstmal egal.
    Mein Ziel ist es erstmal einen Temperaursensor an das Modul anzuschließen das eben alle 20 Sekunden den aktuellen Wert an den Pi schickt.

    Das mit dem Sensor ist kein Problem. Ich habe schon ein Sketch den ich auch auf den ESP8266 getestet habe der den Sensor eben alle 20 Sekunden ausliest und dann die Werte über die Serielle Schnittstelle ausgibt.

    Allerdings ist eben mein Problem des Senden per WLAN...und blick leider nur teilweise in den Sketch dadurch durch.

    Was bewirkt zum Beispiel die Libary "Arduino.h"?


    Gruß Florian


  • leider bin ich mit dem Sketch ein bisschen überfordert. Zuerst einmal verwende ich die ESP8266-12E aber das ist ja erstmal egal.


    jo, ist egal. Der ESP8266-01 hat nur 2 GPIOs, das schränkt ihn für universellere Dinge ein...


    Mein Ziel ist es erstmal einen Temperaursensor an das Modul anzuschließen das eben alle 20 Sekunden den aktuellen Wert an den Pi schickt.
    Das mit dem Sensor ist kein Problem. Ich habe schon ein Sketch den ich auch auf den ESP8266 getestet habe der den Sensor eben alle 20 Sekunden ausliest und dann die Werte über die Serielle Schnittstelle ausgibt.


    Da habe ich auch ein Sketch mit WLAN, allerdings noch nicht für meine Belange umgebaut, kommt in den nächsten Tagen, wenn die Hardware zuverlässig läuft...


    Allerdings ist eben mein Problem des Senden per WLAN...und blick leider nur teilweise in den Sketch dadurch durch.
    Was bewirkt zum Beispiel die Libary "Arduino.h"?

    Diese Lib bindet die wesentlichen Arduino-Grundfunktionen ein, kann man inzwischen vielleicht weglassen, ich hatte da Anfangs noch andere Sachen gemacht...

    Ich kann mal eine Version des Sketches erstellen, wo mehr informative Kommentare drin sind.

    Im Wesentlichen werden die folgenden Dinge gemacht:

    • WLAN AP gesucht und mit diesem verbunden
    • per NTP die aktelle Zeit/Datum geholt (wird nur jede Stunde gemacht, reicht völlig)
    • Den GPIO für Interrupts vorbereitet und gestartet für 1 sec: während dieser Zeit wird durch den angeschlossenen Erdfeuchtesensor ein Rechtecksignal von ca. 5-50kHz auf den GPIO gegeben. Die Interruptroutine zählt einen Counter hoch für jede aufsteigend Flanke
    • danach: Wert in einem Array merken, diese Messung 10x machen
    • danach: Mittelwert berechen (werde ich ggf. noch ändern in Median(5)-Mittelwert)
    • danach: Datum/Zeit/Wert per http zu meinem RasPi senden
    • danach: Wert zu ThingSpeak schicken
    • Pausezeit berechnen, Pausecounter auslösen ==> :angel:


    Sieht schlimmer aus, als es ist :lol:

    bis denne,
    das Zen

  • Hi,

    Danke für die ganzen Infos. Die Zeit würde ich auch gerne übermittelten mit Datum und natürlich den Wert.

    Aber brauche ich umbedingt diese Counter?

    Und ich meine die Mittelwertberechnung ist denk ich auch erst mal nicht notwendig.

    Und wozu benötigst du das Rechtechtsignal?

    Könnte ich das also weglassen?

    Gruß Florian

  • Dieser Counter ist für deinen Anwendungsfall nicht notwendig. Er dient nur als Zählvariable.

    Mein Anwendungsfall ist so:
    Ich habe Erdfeuchtemesser, welche die Kapazitätsänderung eines "in der (feuchten/trockenen) Erde steckenden Kondensators" ermittelt, indem die sich daraus ergebende Schwingfrequenzänderung ermittelt wird.
    Das Ausgangssignal dieses Erdfeuchtesensors ist ein Rechtecksignal.
    Der ESP8266 ist schnell genug, um mehrere 10kHz per Interrupt(-routine) zu zählen...
    Ich messe den "Trocken-/Feuchtzustand" und dann immer nach einer bestimmten Zeit (zur Zeit alle 10min (viel zu oft!), im der Daueranwendung wird das dann dynamisiert...)
    Die Mittelwertberechnung mache ich aus der Erfahrung heraus, dass Messungen vergleichbarer (manchmal auch genauer) werden, je öfter man kurz hintereinander misst und diese Messungen dann aufbereitet:
    Bildung des Median, um "Ausreißer" zu eliminieren, dann um den Median herum den Mittelwert bilden...

    Das brauchst du alles nicht.
    (Wobei: die Median-Mittelwertberechnung sollte man eigendlich immer machen...)
    Du benötigst nur den Teil, wo dein Messwert (Temperatur...) in die html-get Zeichenkette eingefügt und dann versendet wird...
    (und musst ggf. das php-Script entsprechend anpassen, ggf. auch die Datenbank, falls du andere/mehr Felder in der Tabelle benötigst...)

    Die Zeit wird beim Start des ESP von einem Internet (oder wenn du hast -lokalen-) NTP-Timeserver geholt und dann mit dem internen "Zeitcounter" (ein Zähler, die Millisekunden seit Einschalten des ESP's ausgibt) abgeglichen.
    Diese Zeit wird dann einfach draufgerechnet... nur alle Stunde (im Prinzip reicht es, einmal am Tag) wird die aktuelle Zeit erneut vom Zeitserver geholt und neu synchronisiert...

    Das sieht alles komplizierter aus, als es in Wirklichkeit ist :D, glaub mir... :thumbs1:

    das Zen

  • Schau dir doch mal das WiFIClientBasic oder WiFiClient Beispiel an das neben zig anderen Beispielen (beim installieren der ESP unterstützung) mitinstalliert wurde:
    File->Examples->ESP8266WiFi
    Da wird sehr schön, kurz und knapp gezeigt wie das mit dem senden der Daten funktioniert. :)

    DON'T PANIC!

  • Link: ESP8266WiFiMulti.h ...

    Mit deren Hilfe kann (soll..) man (automatisch?) zwischen mehreren (gespeicherten) WLAN APs umschalten können...
    Ansonsten "nur" eine Erweiterung ESP8266WiFi.h...

    Ich hab das mal probiert, hat allerdings nicht geklappt, angeblich, weil der ESP8266 die Signalstärke der APs nicht so ohne weiteres preis gibt...
    Wollte damit ein gewisses "Roaming" in der Wohnung erreichen (hab 2 APs wegen der Signal-Abdeckung).

    Ist erstmal als "Feature for future" zurückgestellt bei mir...

    das Zen

  • ZEN
    EO, EO. ... (Den Ohrwurm werd ich heut wohl nicht mehr los. :lol: )
    Ich würd es eher adaptiert nennen. ;)

    --


    ...
    Die Libaries habe ich von hier:
    https://github.com/esp8266/Arduino

    Allerdings gibt es dort nicht die ESP8266MultiWifi Libary. Für was ist die gut und brauche ich die überhaupt?
    ...

    Das hört sich so an als ob du einfach nach belieben Unterverzeichnis von hier: https://github.com/esp8266/Arduino/tree/master/libraries in das "libraries" Verzeichnis der Arduino IDE kopierts.
    Falls ja reicht das nicht. Da gehört noch eine ganze Menge mehr dazu.

    Am einfachsten lässt sich die ESP8266 Unterstützung (Mit allen Libraries, Beispielen, Tools und was sonst noch dazu gehört) über den "Boards Manger" installieren:
    https://github.com/esp8266/Arduin…-boards-manager
    Sind nur ein paar kurze Schritte. :thumbs1:

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (8. Februar 2016 um 00:07)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!