Arduino mit OneWireFirmata
OneWireFirmata (ConfigurableFirmata)
mit dem Modul 10_FRM.pm kann man einen Arduino als OneWire-Busmaster für das Modul 00_OWX.pm benutzen. Auf dem Arduino muss dazu eine erweiterte Version der Firmata-Firmware geladen werden. Unterstützt werden im prinzip alle Arduino-Versionen. Auf Arduinos mit nur 16kb RAM (MEGA168P) muss man die Zahl der eingebauten Features reduzieren, auf allen Arduinos mit mehr als 16kb Ram (MEGA328P aufwärts) läuft die Firmware unverändert.
Die aktuelle Arduino-IDE bringt zwar schon eine Version der StandardFirmata mit, diese enthält aber noch keine Unterstützung für OneWire. Diese findet man im 'configurable'-branch des Firmata repositories. Den kompletten Branch kann man sich auch bequem als zip-Archiv herunterladen
Wenn man die in dieser neuen Firmataversion eingebauten Features reduzieren möchte (weil man nur eine MEGA168P verwenden will und z.B. gar keine Servos ansteuern möchte), muss man nur im 'ConfigurableFirmata'-sketch die entsprechenden includes auskommentieren.
Die ConfigurableFirmata kommuniziert mit FHEM über den USB-anschluss oder Ethernet (sowohl original EthernetShield, 'Arduino Ethernet' als auch ENC28J60 basierte Boards werden unterstützt, letztere unter Verwendung der UIPEthernet-library).
Alternativ kann man einen DS2482 als 1-Wire-Busmaster an den I2C-Bus des Arduino anschließen. Die nötige ConfigurableFirmata mit DS2482-Unterstützung findet sich hier bzw kann man sich hier als zip herunterladen.
Arduino IDE
Zur Installation auf den Arduino wird natürlich erst mal die Arduino-IDE benötigt (http://arduino.cc/en/Guide/Libraries)) hat man das 'libraries' Verzeichnis seiner Arduino-ide-installation gefunden (unter Ubuntu z.B. unter /usr/share/arduino/libraries/), gibt es dort normalerweise schon ein Verzeichnis 'Firmata'. Falls nicht, muss dieses angelegt werden. Die in dem Verzeichniss befindlichen Dateien 'Firmata.h', 'Firmata.cpp' und 'Boards.h' müssen durch die im onewire-scheduler.zip-file enthaltenen Versionen ersetzt werden. Am besten kopiert man einfach den gesammten Inhalt des Ordners 'arduino-onewire_scheduler' in das 'libraries/Firmata'-Verzeichnis (mitsammt des Unterordners 'examples'. Macht man das so, dann findet man nach einem Neustart der IDE den OneWireFirmata-sketch unter 'Datei'->'Beispiele'->'Firmata'->'OneWireSchedulerFirmata'. (Natürlich kann man den Unterordner 'OneWireSchedulerFirmata' auch in sein Sketchbook Unterverzeichnis kopieren. Solange man das Verzeichnis nicht umbenennt (so dass es nicht mehr so wie die darin befindliche 'OneWireSchedulerFirmata.ino'-datei heißt, erkennt die Arduino-IDE das Verzeichnis als korrekten Sketch und man kann es unter 'Datei'->'Sketchbook'->'OneWireSchedulerFirmata' finden.
Naja - hat man es erst mal geschafft, dann muss man nur noch 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
FRM
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen (dazu bitte die aktuelle Development-version herunterladen (http://www.dhs-computertechnik.de/downloads/fhem-cvs.tgz) aus dem SVN auschecken oder per updatefhem aktualisieren).
# definiere FRM als IO-Device - Baudrate 57600 ist default in der Standardfirmata define Arduino FRM /dev/ttyUSB0@57600 # definiere FRM als IO-Device über Ethernet ('global' bindet an alle IP-Addressen des Servers) define Arduino FRM <port> global
siehe dazu auch die commendref
OWX
Ein im Anschluss daran definiertes FHEM und 1-Wire-device kann dann einfach einen der Arduino-pins als OneWireBusmaster nutzen. Das funktioniert an allen Pins, die digital-io unterstützen. Wenn man das FRM device schon definiert hat, findet man im laufenden FHEM unter den FRM-attributen einen Eintrag: 'onewire-pins', dieser listet alle Pins auf, die OneWire unterstützen:
define OWX <arduino-pin>
Nach dem definieren des OWX-Moduls fängt dieses selbsttätig an über den Arduino-pin nach OneWire-devices zu suchen und im Raum 'OWX' automatisch anzulegen.
Wenn man die DS2482-Firmata benutzt, dann findet man beim FRM-device unter 'onewire-pins' nur die I2C-Pins. Das sind z.B. bei einem Uno/Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:
define OWX 18