Arduino Firmata
Arduino mit Firmata
Für den Arduino gibt es ein StandardProtokoll Firmata.[[1]]. Mit der perl-firmata[6] ist das Protokoll in perl einfach nutzbar und mit dem Modul FRM in FHEM eingebunden. Damit ist es möglich mit nur geringen Arduino-kenntnissen (Bedienung der Arduino-IDE ist und elektronische Kenntnisse zum Anschluss von Sensoren sind natürlich erforderlich) Messwerte aus eigenen Schaltungen über einen Arduino in FHEM einzulesen. Die in der Arduino-IDE enthaltene StandardFirmata kommuniziert über USB. Ihre Weiterentwicklung (die ConfigurableFirmata) muss man noch separat herunterladen und damit die in der IDE enthaltene Firmata-library (komplett) ersetzen.
Arduino IDE
Zur Installation auf den Arduino wird natürlich erst mal die Arduino-IDE benötigt (http://arduino.cc/en/Guide/HomePage). Die aktuelle Version der IDE enthält auch die StandardFirmata Firmware fertig zum Flashen auf den Arduino. Diese findet man unter 'Datei'->'Beispiele'->'Firmata'->'StandardFirmata'. Einfach öffnen, unter 'Tools'->'Board' den eigenen Arduino auswählen und mit dem Upload-knopf (der Rechtspfeil im Kreis oben links) den geladenen Sketch compilieren und auf das Board hochladen. Falls man unter Windows Probleme hat, den Arduino über USB zu connecten, findet sich hier weitere Informatation: http://arduino.cc/en/Guide/Windows#toc2 Wenn man die ConfigurableFirmata installiert hat, findet sich diese genauso bei den Beispielen für Firmata.
Installation ConfigurableFirmata
Die ConfigurableFirmata ersetzt die vorhandene Firmata-library komplett. Die mitgelieferte Firmata befindet sich typischerweise:
Arduino 1.0.x: Mac OSX: /Applications/Arduino.app/Contents/Resources/Java/libraries/Firmata Windows: c:/Program\ Files/arduino-1.x/libraries/Firmata Linux: ~/arduino-1.x/libraries/Firmata Arduino 1.5.x: Mac OSX: /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/Firmata /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/sam/libraries/Firmata Windows: /Program\ Files/arduino-1.5.x/hardware/arduino/avr/libraries/Firmata /Program\ Files/arduino-1.5.x/hardware/arduino/sam/libraries/Firmata Linux: ~/arduino-1.5.x/hardware/arduino/avr/libraries/Firmata ~/arduino-1.5.x/hardware/arduino/sam/libraries/Firmata
Dieses Verzeichniss 'Firmata' also löschen oder umbenennen und die Configurable-firmata aus der zip-Datei an die gleiche Stelle (also in ein neues Verzeichniss 'Firmata') entpacken. Nachher muss sich alles wie vorher im Verzeichniss Firmata befinden. Also so:
<Arduino-Direktory>/libraries/Firmata/Firmata.h <Arduino-Direktory>/libraries/Firmata/Firmata.cpp <Arduino-Direktory>/libraries/Firmata/Boards.h <Arduino-Direktory>/libraries/Firmata/utility/...usw...
alternativ zur Zip-datei kann man die Configurable-Firmata natürlich auch direkt aus Github heraus clonen. Dazu im Verzeichniss <Arduino-Direktory>/libraries/ folgendes eingeben:
'git clone https://github.com/firmata/arduino.git Firmata'
anschließend ins von clone neu erstellte Verzeichnis wechseln und dort eingeben:
'git checkout configurable'
ConfigurableFirmata und Ethernet
Die Unterstützung für Ethernet ist mittlerweile in der Configurable-Firmata enthalten.
Im Sketch muss man unbedingt die IP-konfiguration anpassen, d.h. die IP-addresse und Port des FHEM-servers eintragen (ggf. auch eine neue mac-addresse). Falls der Speicher des Arduinos nicht reicht (insbesonders bei Verwendung eines ENC28J60-shields passt die Configurable-firmata nicht mehr mit allen Features auf einen Uno oder Nano) einfach die includes der nicht benötigten Features im sketch auskommentieren. (Wenn man Servo oder I2C-unterstützung weglassen möchte bitte vorher einmalig den sketch mit allen Features compilieren, sonst treten Fehler beim compilieren der library-klassen wg. fehlendem Include von Servo.h oder Wire.h) auf. Das gleiche gilt, wenn man in der IDE irgendwas ändert, das einen kompletten Neubuild des sketches triggert (was z.B. beim Wechsel des gewählten Boards passiert).
Getestet ist das ganze mit UNO R3 bzw. Mega 2560 + EthernetShield und zusätzlich mit UNO+Mega+Nano in Verbindung mit ENC28J60. Andere Arduinos als der Uno benötigen ggf. Anpassungen in der Setup/Reset Funktion.
Ein MEGA256 z.B. benutzt einen anderen Pin als SS (Slave select) zur Kommunikation mit dem Ethernetmodul. Man muss der Firmata im Setup mitteilen, welche Pins zu ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernetlibrary gibt. Das ist im Configurable.ino-sketch ab Zeile 231 vorbereitet und muss (wenn man etwas anderes als ein Standard-Ethernetshield am Uno verwendet) geeignet angepasst werden (Beim Mega muss man z.B. den Pin 10 ignorieren und Pin 53 als hardcodiert auf Output stellen). Das gleiche gilt, wenn man eine andere Hardware (z.B. mit ENC28J60 anstelle des WizNet W5100 des Ethernetshields) benutzen möchte welche einen anderen Pin als CS/SS benutzt.
Die für den ENC28J80 benötigte UIPEthernet-library findet sich hier.