ESP8266 - Funkbox


Die Funkbox könnte man auch besser "Spielbox" nennen.
Sie erfüllt eigentlich keinen wirklichen Zweck, sie ist bisher Spielweise für alle möglichen Experimente rund um den ESP8266.
Basis ist ein ESp8266-12E mit 32MBit Flash, also 4MB. Davon stehen 1MB asl Programmflash zur Verfügung (das SDK will es so) und maximal 3MB als Filesystem SPIFFS.


Das Innenleben

Zuerst hat der ESP einen RFM12 bekommen, der die Sensordaten meiner Sensoren empfängt und als Webseite zur Verfügung stellt.
Die RFM-Geschichte ging besser als vermutet, meine uralten interruptgesteuerten C-Sourcen ließen sich problemlos an den ESP anpassen (nur die dierekten Portzugriffe von AVR auf pinMode()/digitalWrite()/digitalRead() vom Arduino umgestellt, die Interruptroutine mit attachInterrupt() eingehangen und es lief und gab die Daten per serieller an den PC aus.
Verblüffend einfach, ich hatte mehr Probleme erwartet.
Die RFM-Sachen sind in RFM12.h und RFM12.ino zu finden. Sie sind halbwegs portabel, allerdings direkt auf mein altes Protokoll der Sensoren zugeschnitten.

Beim Webserver ergab sich das Problem, daß ich keine lauffähige Version fand, die schon brauchbar Webserver spielte und das Filesystem für die Webseiten nutzte.
Letztlich endete es damit, daß ich mir meinen Webserver selber schrieb...

Der Webserver:
Die Dateien HTMLtools.h und HTMLtools.ino beinhalten den Weserver selbst.
Er stellt in einer Struktur die vom Client geschickten Parameter zur Verfügung und erwarten in einem replace-Array die zu sendenden Daten.
Eine Funktion useraction() muß entsrechend den Daten dieses Array anhand der Parameter bearbeiten und füllen.
Die Webseiten liegen als normales HTML im Filesystem, ählich wie bei PHP mit zum Einetzen von Werten werden hier Platzhalter in die Webseite geschrieben, zur Zeit ~a~ bis ~z~, also maximal 26 Werte.
Diese werden durch den jeweiligen Arrayinhalt vom Webserver erstezt und dann die Seite abgschickt.
Das hat sich für mich bisher so als sehr praktisch erwiesen.
Der Webserver kann bisher nur GET, POST werde ich noch einbauen. Es wird HTML 1.1 mit Angabe der richtigen Payload-Größe verwendet.
Unvollstä,ndige Requests, falscher Aufbau der Parameterliste, nicht vorhanden Seiten usw. werden abgefangen. Ohne Angabe einer Seite wird index.html geladen.
Als MIMI-Typen werden zur Zeit image/x-icon, text/css, application/javascript, image/jpg bearbeitet, alles andere wird als application/octet-stream zum Download angeboten, wenn die Datei vorhanden ist.

Als dieser Teil lief, fielen mir meine Energiemeßsteckdosen wieder ein.
Ich hatte die Energie3000 vor Jahren mal gekauft, sie senden ihre Daten per Funk an ein Handablesegrät. Das hat den Vorteil, daß man nicht irgendwo hinkrauchen muß, wenn man ablesen will.
Würde z.B. keine Sinn machen, jedesmal den Kühlschrank abzurücjken, um den Verbrauch oder die Laufzeit rauszufinden.
Zur Zeit hat die wohl nur noch Voelkner im Angebot, als "Sensor für Energiekosten-Messgerät Energycount 3000" für 9,99€, ein Superpreis, wie ich finde.
Die Genauigkeit ist auch bei kleinen Leistungen (1 Watt) und hohem Blindanteil mehr als aureichend genau.
Eine Suche im Netzt förderte eine einzige Software für einen AVR zutage, die mit dem Protokoll was anfangen konnte.
Netterweise mit einem RFM12B 868MHz und einem Mega328. Ein Teste zeigt: es geht!
Die Kodierung der Daten ist sehr komplex, der Ersteller dieser Software muß einen Nerv für sowas haben, ich hätte da kein Land gesehen.. Leider sind die RFM12-Routinen aus der Jeelabs-Bibliothek wohl mehr nach Versuch und Irrtum an die Energiedosen angepasst und etwas unübersichtlich.
Damit war die Entscheidung erstmal klar: ein Arduino ProMini mit dem RFM12B und die fertig aufbereiteten Energiedaten per serieller zum ESP geschickt.
Der darf die dann in die Webseite mit einbauen.


Das sieht dann zur Zeit so aus.

Inzwischen stand das Problem eines Gehäuses an, da die Komponenten doch anfingen einen Nutzen zu haben.
Ein noch vorhandenes Gehäuse bot sich an and ließ Platz für Erweiterungen.

Von der Display-Aufräumaktion lag noch ein Modul rum, das mit 2 8-stelligen HDSP2113S bestückt war.
Interessanterweise war es genau passend hoch für das Geäuse und nur 4mm zu breit.
Da an den Seiten nichts war wurde die Leiterplatte eben um je zwei Millimeter gekürzt und die Ecken etwas abgerundet.
Damit paßte es ins Gehäuse...
Eine Verwendung gab es zwar noch nicht, aber nur rumliegen sollte es auch nicht.

Fortsetzung folgt

Letzte Änderung am 27.02.2016