Hallo zusammen,
ich habe Probleme damit einen Arduino über Ethernet mit FHEM zu verbinden.
Ziel:
Ich möchte mit FHEM einfach nur eine LED an einem Arduino schalten.
Bauteile:
Arduino Mega 2560 + EthernetShield
FHEM läuft auf einem RPi2
Bisher:
Arduino IDE 1.8.2 heruntergeladen und installiert
/Programmex86/Arduino/hardware/arduino/avr/libraries neuen Ordner Firmata erstellt und Configurable Firmata eingefügt
in der IDE die Configurable Firmata öffnen
Einstellungen am Code vornehmen:
(IP des Servers, Port , IP des Arduino auskommentieren da DHCP, MacAdresse)
Zitat#define NETWORK_FIRMATA
//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(192,168,178,29)
//replace with hostname of server you want to connect to, comment out if using 'remote_ip'
//#define remote_host "server.local"
//replace with the port that your server is listening on
#define remote_port 3030
//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp. Is ignored on Yun
//#define local_ip IPAddress(192,168,0,6)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac. Is ignored on Yun
const byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0x23, 0x57};
#endif
(Pinbelegung für MEGA250 und EthernetShield)
Zitat// Network Firmata communicates with Ethernet-shields over SPI. Therefor all
// SPI-pins must be set to IGNORE. Otherwise Firmata would break SPI-communication.
// add Pin 10 and configure pin 53 as output if using a MEGA with Ethernetshield.
// No need to ignore pin 10 on MEGA with ENC28J60, as here pin 53 should be connected to SS:
#ifdef NETWORK_FIRMATA
// ignore SPI and pin 4 that is SS for SD-Card on Ethernet-shield
for (byte i = 0; i < TOTAL_PINS; i++) {
if (IS_PIN_SPI(i)
|| 4 == i
|| 10==i //explicitly ignore pin 10 on MEGA as 53 is hardware-SS but Ethernet-shield uses pin 10 for SS
) {
Firmata.setPinMode(i, IGNORE);
}
}
pinMode(PIN_TO_DIGITAL(53), OUTPUT); configure hardware-SS as output on MEGA
pinMode(PIN_TO_DIGITAL(4), OUTPUT); // switch off SD-card bypassing Firmata
digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;
Sketch auf Board laden
in FHEM:
define Arduino FRM 3030 global
Problem:
Es besteht keine Verbindung zwischen Arduino und FHEM
FRM-Device steht auf listening
Frage:
Fehlt noch etwas, habe ich einfach nur einen Schritt vergessen oder übersprungen oder habe ich vllt falsche Einstellungen im Code vorgenommen?
Schonmal im Vorraus Vielen Dank
Hi,
woher weiß FHEM die IP-Adresse des Arduino?
Gruß,
Thorsten
Hi Thorsten,
so wie ich das verstehe wird das über "global" erreicht. Einmal wird das in folgendem Link beschrieben, zudem habe ich das in irgend einer Diskussion schonmal gelesen.
https://wiki.fhem.de/wiki/Arduino_Firmata (https://wiki.fhem.de/wiki/Arduino_Firmata)
Zitat'global' muss angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird.
Vielleicht habe ich das aber auch falsch verstanden oder das ist auf andere Fälle bezogen gewesen.
Hi,
achso, FHEM ist der Server.
Na dann ist doch erstmal alles wie erwartet, oder?
Laut Commandref sieht es so aus, als ob Du jetzt noch mindestens ein FRM_OUT-Device brauchst.
Gruß,
Thorsten
Hi,
ich habe anschließend "define LED FRM_OUT 13" abgesetzt und so eine FRM_OUT eingebunden. Dieses verbindet sich auch gleich mit dem FRM. Das Problem scheint zu sein, dass zwischen dem FRM und dem Arduino keine Verbindung entsteht.
Wenn ich z.B. in dem FRM_OUT auf "on" klicke dann sagt mir das " LED, Arduino is not connected at ./FHEM/10_FRM.pm line 606"
Tipp 1 : Nimm die Configurable Firmata V 2.06 , alles was neuer ist macht nur unnötige Probleme
Tipp 2 : Nimm zum testen nicht Pin 13 , wenn deine Verbindung steht wirst sehen das der fehlt weil es ein SPI Pin ist.
Internals:
CONNECTS 1
DEF 3030 global
DeviceName 3030
FD 27
NAME FRM_Keller
NOTIFYDEV global
NR 158
NTFY_ORDER 50-FRM_Keller
PORT 3030
STATE Initialized
TYPE FRM
analog_pins 14,15,16,17,18,19
analog_resolutions 14:10,15:10,16:10,17:10,18:10,19:10
encoder_pins 2,3
encoder_resolutions 2:28,3:28
firmware ConfigurableFirmata.ino
firmware_version V_2_06
input_pins 2,3,5,6,7,8,9,14,15,16,17,18,19
onewire_pins 2,3,5,6,7,8,9,14,15,16,17,18,19
output_pins 2,3,5,6,7,8,9,14,15,16,17,18,19
pwm_pins 3,5,6,9
pwm_resolutions 3:8,5:8,6:8,9:8
servo_pins 2,3,5,6,7,8,9
servo_resolutions 2:14,3:14,5:14,6:14,7:14,8:14,9:14
Socketdevice:
BUF
DeviceName 3030
FD 28
NAME FRM:192.168.0.180:2406
NR 401
SNAME FRM_Keller
SSL
STATE Connected
TEMPORARY 1
TYPE FRM
Attributes:
DbLogExclude .*
room IO_Dev
verbose 3
Wie bekomme ich denn die Version meiner Configurable Firmata herraus? Ist das die Version, die in der Datei Firmata.h erwähnt wird? Dann habe ich nämlich die Version 2.6.2 welche du doch meintest oder?
Tipp 3 : Gib mal in der Forensuche "Firmata 2.06" ein , du wirst sehen wie oft das hier schon ein Thema war.
Anleitung zum Download von 2.06 -> https://forum.fhem.de/index.php/topic,44525.msg386196.html#msg386196
Zitat von: dreche am 12 April 2017, 17:13:06
Dann habe ich nämlich die Version 2.6.2 welche du doch meintest oder?
2.6.2 ist nicht 2.06...
Tut mir leid wenn ich mich vllt etwas dumm anstelle aber wo steht in der configurable Firmata die Version?
in der Firmata.h, die drei Zalen sind auf drei Konstanten verteilt
Hatte in den letzten Tagen etwas wenig Zeit und bin leider immernoch nicht weiter gekommen.
Ich habe eine Firmata.h 2.0.13 gefunden. Mit dieser funktioniert allerdings meine configurable firmata nicht mehr.
Seid ihr euch denn da ziemlich sicher, dass es mit der Version zu tun hat? Ich hatte den Eindruck, dass es in den entsprechenden Diskussionen darum geht, dass irgendwelche Pins nicht angezeigt werden oder ähnliches. Ich bekomme aber noch nicht einmal eine Verbindung hin.
Dann backe doch erst einmal ganz kleine Brötchen wenn es mit dem Brotlaib nicht klappt.
D.h. vergiss Firmata und teste erst einmal deine Ethernet Hardware mit Hilfe der Demo Sketches und löse dich von DHCP und verwende fixe IPs. Wenn das alles klappt gehe zurück zu Conf Firmata und poste mal deinen kompletten .ino Sketch in Code Tags. Auch wenn die Verbindung zu FHEM selbst nicht klappt muss der Arduino zumindest anbingbar sein.
Hallo zusammen,
endlich eine erfreuliche Botschaft.
Ich habe gestern, genau wie Wzut heute meinte, nochmal neu und ganz klein angefangen und habe gerade eben endlich den Fehler gefunden.
Wahrscheinlich hättet ihr mich direkt drauf bringen können, hätte ich meine Hardwareangaben nocheinmal überprüft. Ich benutze nämlich kein EthernetShield sondern EthernetShield2, welches einen WiZ5500 besitzt. Dieses Shield funktioniert anscheinend nicht mit der Ethernet.h sondern nur mit Ethernet2.h.
Nachdem ich in Foren zu Arduino und Ethernetverbindungen rumgestöbert habe, bin ich auf den Fehler gestoßen. Anschließend war alles sehr einfach. Ethernet2.h runterladen, in den Libraries ordner kopieren und im Sketch eine 2 hinter Ethernet geschrieben. Fertig.
In FHEM funktionierte alles auf Anhieb. Die Version(2.6.2) macht zumindest fürs erste auch keine Probleme alle Pins werden angezeigt und auch PIN 13 steht zur Verfügung.
Vielen Dank für eure Hilfe