Arduino mit OneWireFirmata: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
(Firmata-unterstützung für Ethernet und DS2482-Busmaster hinzugefügt)
Zeile 1: Zeile 1:
= OneWireFirmata =
= OneWireFirmata =
mit dem Modul 10_FRM.pm kann man einen Arduino als OneWire-Busmaster für das Modul 00_OWX.pm benutzen.
<p>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.
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.</p>
Die aktuelle Arduino-IDE bringt zwar schon eine Version der StandardFirmata mit, diese enthält aber noch keine Unterstützung für OneWire.
<p>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 [https://github.com/firmata/arduino/tree/configurable/examples/ConfigurableFirmata im 'configurable'-branch des Firmata repositories]. Den kompletten Branch kann man sich auch bequem [https://github.com/firmata/arduino/archive/configurable.zip als zip-Archiv herunterladen]</p>
Diese OneWire-unterstützung ist mittlerweile in den 'configurable'-branch von Firmata eingearbeitet. Diese könnt Ihr hier herunterladen: [https://github.com/firmata/arduino/archive/configurable.zip https://github.com/firmata/arduino/archive/configurable.zip]
<p>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.</p>
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.
<p>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 [https://github.com/ntruchsess/arduino_uip UIPEthernet-library]).</p>
<p>Alternativ kann man einen DS2482 als 1-Wire-Busmaster an den I2C-Bus des Arduino anschließen. Die nötige Firmata mit DS2482-Unterstützung [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata findet sich hier].</p>


= Arduino IDE =
= Arduino IDE =
Zeile 16: Zeile 17:


  <nowiki># definiere FRM als IO-Device - Baudrate 57600 ist default in der Standardfirmata
  <nowiki># definiere FRM als IO-Device - Baudrate 57600 ist default in der Standardfirmata
define Arduino FRM /dev/ttyUSB0@57600</nowiki>
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</nowiki>
 
siehe dazu auch [http://fhem.de/commandref.html#FRM die commendref]
= OWX =
= 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:
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:
Zeile 23: Zeile 29:
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.
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:
Unterstützung einen Arduino mit Ethernetshield oder EM28J60-modul über Ethernet und Firmata anzubinden ist in Arbeit&#160;:-)
<nowiki>define OWX 18</nowiki>
 
[[Kategorie:1-Wire]]
[[Kategorie:1-Wire]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]
[[Kategorie:Interface]]
[[Kategorie:Interface]]

Version vom 19. Oktober 2013, 21:52 Uhr

OneWireFirmata

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 Firmata mit DS2482-Unterstützung findet sich hier.

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