Arduino: Unterschied zwischen den Versionen

Aus FHEMWiki
KKeine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 76: Zeile 76:
[[Kategorie:Other_Components]]
[[Kategorie:Other_Components]]
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Kategorie:Interface]]
[[Kategorie:Interfaces]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]

Version vom 20. Januar 2014, 21:37 Uhr

Arduino zur Anbindung eigener Sensoren und Aktoren an FHEM nutzen

mit eigenem Arduino-Sketch

Mit Arduino-Boards lassen sich einfach und recht preisgünstig (ab ca. 15€ Stand Juli 2012) eigene Sensoren/Aktoren an FHEM anbinden.

Das Board lässt sich recht einfach programmieren um Sensorwerte zu verarbeiten und diese z.B. per Ethernet an FHEM zu senden oder abfragen zu lassen. Über zahlreiche Schnittstellen (Standard: RS232, TWI/1-Wire, SPI, PWM, analog/digital-I/O, I2C) mit den entsprechenden Software-Libraries kann auf viele gängige Sensoren zugegriffen werden. Über Erweiterungsboards ("Shields") können die Anschlussmöglichkeiten ausgebaut werden. Zudem ist der Anschluss von Parallel-/Seriell-/I2C-LCD-Displays und SD-Karten möglich.

Die Boards und eine Vielfalt an Sensoren/Aktoren sind über Online-Auktionen bzw. -Anbieter einfach zu bekommen. Kommunikation mit dem Arduino ist z.B. per Netzwerk/Ethernet, WLAN, 433/868MHz/2,4GHz-RF, Bluetooth, 1-Wire etc. möglich.

Arduino mit Ethernet Eine einfache und sehr kompakte Lösung ist der Arduino Nano mit Ethernet-Shield. Der Nano hat je 8 nutzbare Analog- und Digital Ein-/Ausgänge über die sich beispielsweise Temperatursensoren, Relais etc. ansprechen lassen.

Folgende Schritte sind zur Vorbereitung zu tun:

  1. Arduino (bzw. Klon) mit Ethernet-Shield (z.B. mit ENC28J60 Chip) und gewünschten Sensoren kaufen
  2. Arduino-IDE von der Arduino-Homepage (für Windows, Mac OS X und Linux vorhanden) herunterladen und installieren
  3. Falls ENC28J60-Ethernet-Shield verwendet wird: Ethernet-Library für ENC28J60 herunterladen und in Arduino-IDE-Installation hineinkopieren (z.B. von hier: [1], alternativ nach arduino+ENC28J60+library googeln). Eine Arduino-library für den ENC28J60, die richtige (persistente) TCP/IP-Verbindungen unterstützt und von der API her vollständig kompatibel zur original-Ethernetlibrary ist findet sich hier: UIPEthernet (arduino_uip)
  4. Folgenden Beispiel-Sketch mit Arduino-IDE öffnen Arduino_FHEM.ino [2]
  5. IP Adresse im Sketch passend zum eigenen Netzwerk ändern (steht im Sketch auf 192.168.2.44)
  6. Sketch auf Arduino laden
  7. Arduino mit 5V-USB-Netzteil ans Netzwerk anschliessen
  8. Verbindung testen indem in einem Webbrowser <arduino_ip_adresse>/?cmd=set_D5_ON [3] eingegeben wird (natürlich hier die im Sketch verwendete IP-Adresse angeben). Falls an Ausgang D5 eine Leuchtdiode o.ä. angeschlossen wurde sollte diese nun leuchten.
  9. Wenn das geklappt hat sollte sich der Ausgang auch aus der FHEM-Kommandozeile ausschalten lassen mit { GetHttpFile('192.168.2.44:80', '/?cmd=set_D5_OFF');; } -> natürlich wieder die im Sketch verwendete IP-Adresse verwenden.
  10. Letzter Schritt wäre eine Definition in die fhem.cfg einzutragen um auch entsprechende Buttons in der FHEM-Oberfläche zu haben, ggf. wieder die verwendete IP-Adresse statt arduino:80 verwenden (für die Buttons wurde das FS20-Modul verwendet):

Auszug aus der fhem.cfg

define arduinobutton FS20 55d1 00
attr arduinobutton room Arduino
define FileLog_arduinobutton FileLog /otp/fhem/log/arduinobuttonon-%Y.log arduinobutton
attr FileLog_arduinobutton room Arduino
define arduinoswitchon notify FS20_55d100:on { GetHttpFile("arduino:80","/?cmd=set_D5_ON")}
attr arduinoswitchon room Arduino
define arduinoswitchoff notify FS20_55d100:off { GetHttpFile("arduino:80","/?cmd=set_D5_OFF")}
attr arduinoswitchoff room Arduino
define weblink_arduinobutton weblink fileplot FileLog_arduinobutton:fs20:CURRENT
attr weblink_arduinobutton label "arduinobutton Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_arduinobutton room Arduino


Abfragen von Sensorwerten sind natürlich auch möglich, z.B. mit folgender Definition (Analog- und Digital-PINs werden alle fünf Minuten abgefragt und in Plots visualisiert):

Auszug aus der fhem.cfg

define arduinogetsensorvalues at +*00:05:00 {\ 
 my $val = GetHttpFile('arduino:80', '/?cmd=get_analog_values');;\ 
 fhem("trigger arduinogetsensorvalues $val");;\ 
}
attr arduinogetsensorvalues room Arduino
define FileLog_arduinogetsensorvalues FileLog /opt/fhem/log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*
attr FileLog_arduinogetsensorvalues room Arduino
define weblink_getsensorvalues weblink fileplot FileLog_arduinogetsensorvalues:arduino:CURRENT
attr weblink_getsensorvalues label "Arduino Sensorvalues Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_getsensorvalues room Arduino
define arduinogetsensorvaluesD at +*00:05:35 {\ 
 my $val = GetHttpFile('arduino:80', '/?cmd=get_digital_values');;\ 
 fhem("trigger arduinogetsensorvaluesD $val");;\ 
}
attr arduinogetsensorvaluesD room Arduino
define FileLog_arduinogetsensorvaluesD FileLog /opt/fhem/log/arduinogetsensorvaluesD-%Y.log arduinogetsensorvaluesD:.*
attr FileLog_arduinogetsensorvaluesD room Arduino
define weblink_getsensorvaluesD weblink fileplot FileLog_arduinogetsensorvaluesD:arduino:CURRENT
attr weblink_getsensorvaluesD label "Arduino Digital Values Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr weblink_getsensorvaluesD room Arduino


TODO: Kommunikation via RF + Bluetooth + WLAN

Fragen zum Thema bitte in das FHEM-Forum [4] posten.


Neben der hier beschriebenen Methode Arduinos an FHEM anzubinden gibt es noch die möglichkeit PanStamps über das SWAP Protokoll per RF an FHEM anzubinden. Eine Firmata über SWAP Implementierung ist gerade in Arbeit.

mit vorgefertigem Firmata-Sketch

Zur Anbindung des Arduinos mit dem Firmata-Protocol und vorgefertigtem Sketch siehe: Arduino_Firmata