I2C-Server ist ein ESP8266 Wlan-Modul, der sich im Hausnetz anmeldet und als Webserver, mit I2C-Master Funktionalität, fungiert.
I2C-Server kann vom jedem Internetbrowser und jedem Internetfähigem gerät gesteuert werden.
Als bedienungsinterfase wird ein Internetbrowser mit einer Webseite benutzt.
Funktionalität der Webseite als Steuerungsinterface wird durch JavaScript und Ajax realisiert. Auch Datenvisualisierung wird mit gleichen Mitteln realisiert.
Die Aktualisierung der Messdaten kann im Sekundentackt erfolgen.
Um Steuerungsinterface auf eigene Bedürfnisse anzupassen werden HTML und JavaScript Kenntnisse benötigt. Die HTML-Datei des Steuerungsinterfaces kann Lokal auf dem Steuerungsrechner abgelegt werden, oder auf einem beliebigem Webserver. Und natürlich kann I2C-Server von eigenen Programmen gesteuert werden, die muss nur Möglichkeit haben als TCP -Webclient zu funktionieren.
Einfachste steuermöglichkeit ist über Adressleiste des Webbrowsers eine URL-Zeile mit GET Metod die Daten zu senden.
Beispiel: schreiben auf I2C-Adresse 64 ein Byte 129 (dezimal) „http://_IP-Adresse_/I2C.php?Adress=64&Daten=129; „
Lesen auf I2C-Adresse 65 ein Byte „ http://_IP-Adresse_/I2C.php?Adress=65&Bytes=1 „I2C-Server antwortet mit einer Webseite in text/plain Format mit einer Zahl.
Wenn mehreren Bytes gelesen werden, sind die Zahlen mit Semikolon getrennt.
Get -Parameter „Daten“ kann mehrere Bytes beinhalten „Daten=0;15;37;“ Hier werden 3 Bytes übertragen.
Beim Lesen der Get –Parameter „Bytes“ gibt an wie viel Bytes vom I2C-Slave gelesen werden soll.
Bit 0 in der I2C-Adresse entscheidet ob geschrieben oder gelesen wird. Gerade Zahlen-Schreiben, ungerade Zahlen- Lesen.
Um es schön darzustellen und die empfangene und zu sendende Daten aufzubereiten, kann JavaScript verwendet werden. Ein Beispiel und Quellcode der HTLM-Webseite mit dem JavaScript kann hier heruntergeladen werden.
Download BIN -Laden der Firmware mit einem Tool über serielle Schnittstelle.
(Kompiliert mit Arduino ver. 1.6.9, ESP8266 Bibliothek ver. 2.2.0)
Download Projekt -Sketch für Arduino, es wird Bibliothek Core for ESP8266 WiFi chip benötigt
/I2C.php – Schreiben oder lesen einzelne I2C Adresse
Lesen am Adresse 65 ein Byte /I2C.php?Adress=65&Bytes=1
Schreiben am Adresse 64 Dezimalwert 129 /I2C.php?Adress=64&Daten=129;
/Durchsuchen.php - Zeigt Adressen allen angeschlossenen I2C-Geräts.
/GetI2C.xml -Liest mehrere I2C-Slave Geräte aus und Bildet als Antwort ein XML-Dokument.
Get-Parametrname ist zu lesende I2C-Adresse Get-Parametrwert ist Anzahl zu lesenden Bytes. „/GetI2C.xml?65=1&167=3“ - Bedeutet lese 1 Byte von Adresse 65 und lese 3 Bytes von Adresse 167.
/SetI2C.php –Schreiben auf mehreren I2C-Adressen
/SetI2C.php?64=1;2;3;4;&166=0;20;30;40;50;&100=1;“ Schreibe auf Adresse 64 4 Bytes mit dem dezimalen Wert 1,2,3,4 und Schreibe auf Adresse 166 5 Bytes mit dem dezimalen Wert 0,20,30,40,50 und Schreibe auf Adresse 100 1 Byte mit dem dezimalen Wert 1.
/ADC.php - (Nur mei dem ESP-07 Module) List Spannungswert am Pin ADC mit dem internem ADC-Wandler. Messbereich 0..1V, Auflösung 10Bit (Zahlenwert 0…1023)
Bildung der I2C-Adressen
Zum schreiben(7-Bitadresse)*2
bei PCF8574 A0...A2 auf GND: Adresse binär"0100 000" dezimal 32, 32*2=64 dezimal
Zum Lesen(7-Bitadresse)*2+1
bei PCF8574 A0...A2 auf GND: Adresse binär"0100 000" dezimal 32, 32*2+1=65 dezimal
Das Schreiben auf dem I2C-Buss kann mit einem Passwort geschützt werden.
Wenn im Setupmodus ein Passwort angegeben wurde dann wird das Schereiben nur dann ausgeführt, wenn Get-Parameter „Passwort“ mit richtigem Passwort übertragen wurde.
Beispiel „http://_IP-Adresse_/I2C.php?Adress=64&Daten=129;&Passwort=598gfdhghgfd85„
Das Empfangen der Daten und das Senden der Befehle in regelmäßigen Abständen mittels HTML-Webseite möglich, ohne die Webseite neu zu laden.
Dies ermöglicht das Ajax-Objekt im JavaScript.
Einfachste Variante ist, das geladene Webseite in sekundentackt eine Anfrage zu den I2C-Server macht und das empfangene Daten anzeigt.
Rechts sehen Sie das Screenshot des Webinterface für LM75 (TCN75). Hier wurde als Anzeigeelement das HTML Canvas Gauges verwendet.
Bei Verwendung von mehreren Temperatursensoren kann man die Anzeigen kleiner darstellen lassen.
Download als ZIP ( HTML-Webseite und JavaScript-Datei).
Weiter folgen die einfachen Beispiele der Verarbeitung der Daten mit AJAX und JavaScript.
Alle Beispiele sind mit Kommentaren in Quelltext versehen.
Beispiel1
Nach dem Öffnen der Webseite wird Funktion start () ausgeführt. Die sendet eine Anfrage an I2C-Server. Dabei wird LM75 angesprochen unter Adresse 145 und es werden 2 Bytes gelesen.
Wenn Antwort des I2C-Servers angekommen ist, wird Funktion LesenAjax() ausgeführt. Da drin werden empfangene Daten im Form “25;1;“ bearbeitet. In einzelne Zahlen geschnitten und in Integer umgewandelt und angezeigt.
Zum ausprobieren nicht vergessen Variable "Url" anzupassen, Beziehungsweise Adresse des Temperatursensors.
Beispiel2
Das gleiche wie oben, jedoch Anfrage an I2C-Server wird in Sekundentakt ausgeführt und die Temperaturwerte neu angezeigt.
Das Befehl „setInterval(aktualisieren,1000);“ veranlasst das die Funktion „aktualisieren()“ jede Sekunde ausgeführt wird.
Beispiel3
Lesen und Schreiben einer PCF8574 IO Erweiterung mit I2C-Adresse 64 (A0, A1, A2 auf GND).
Zum ausprobieren nicht vergessen Variable Url anzupassen.
Im Funktion „Start()“ wird AJAX-Objekt gebildet.
Funktion „Schreiben()“ wird beim Click auf einer der Checkboxen ausgeführt.
In der For-Schleife werden alle 8 Checkboxen überprüft und ein Byte gebildet wobei checked=1 und unchecked=0 ist.
Danach wird dieses Byte durch den I2C-Server an PCF8574 gesendet.
Gerade I2C-Adresse heißt Schreiben Url+"I2C.php?Adress=64&Daten="+num+";" GET-Argument „Daten“ soll nach dem Zahl immer ein Semikolon haben. Der Semikolon dient als Trennzeichen wenn mehrere Bytes gesendet werden.
Funktion „Lesen()“ wird beim Click auf das Link „Lesen“ ausgeführt. Es wird Serveranfrage gebildet.
Ungerade I2C-Adresse heißt I2C-Lesen. Url+"I2C.php?Adress=65&Bytes=1 GET-Argument „Bytes“ gibt an wie viel Bytes gelesen werden.
Funktion LesenAjax() wird automatisch ausgeführt wenn eine Antwort vom Server kommt. Da wird empfangene Nachricht als Text in der Webseite als Serverantwort angezeigt.
Beispiel4
Lesen und Anzeigen von Spannungswerten vom „I2C - ANALOG-INPUT 5 Kanal 0-10V 10Bit“
I2C-Adresse 17 (alle Jumpern unten). Es werden 11 Bytes in Sekundentackt abgefragt, Integer-Variable gebildet, Spannungswert berechnet und angezeigt.
Codeschnipsel
Serverantwort aufbereiten:
Ein String ( Z.B.„1;45;5;“) zerschneiden: var StingArr=datenstr.split(";"); Damit erhalten wir Array aus Strings. StingArr[0], StingArr[1], StingArr[2] die beinhalten „1;“, „45;“, „5;“
Integer Wert aus dem String bilden: U1=parseInt(StingArr[1]); jetzt U1 hat Wert 45.
HTML-Elemente Ansprechen und ändern
document.getElementById('TemperaturAnzeige').innerHTML=“BlaBla“; Element mit ID „TemperaturAnzeige“ bekommt als Text „BlaBla“.
document.getElementsByTagName("input")[1].value=3; Erste Element „Input“ bekommt das Eigenschaft „value“ auf Wert 3 Gesetzt.
k=document.getElementsByTagName("input")[2].value; . Value Wert des zweiten Elements "input" wird in Variable „k“ gespeichert.
Nach dem betätigen den Batten „Übernehmen“, werden die Daten in Cookie gespeichert. Beim nächsten Aufruf der Webseite werden die Eingabefelder automatisch ausgefühlt.
Das Webinterface kann lokal oder auf beliebigem Server gespeichert sein.
Vor URL Eingabefeld befindet sich ein Kreis. Wenn das Webinterface eine Anfrage an I2C-Webserwer sendet, wird der Kreis rot. Wenn eine Antwort vom I2C-Webserwer empfangen wurde wird der Kreis wieder grau.
Blinken des Kreises in sekundentackt zeigt normale Kommunikation mit dem ESP8266.
Wenn der Kreis rot bleibt, dann bedeutet das, dass I2C-Server antwortet nicht.
Download ZIP Webseite ist geteilt in: HTML, CSS-Datei mit Styles, JS-Datei mit JavaScript und JavaScript der Anzeige bildet.
webmaster_x_esp8266-server.de |