FHEM Forum

FHEM => Sonstiges => Thema gestartet von: CaptBlaubaer am 27 Oktober 2013, 00:44:58

Titel: Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 27 Oktober 2013, 00:44:58
Github für Windows funktioniert bei mir irgend wie nicht und bringt Fehler wenn ich nach der Anleitung aus https://github.com/firmata/arduino/tree/configurablevorgehe.

Gibt es eine IBM Lösung (Immer Besser Manuell) die aktuellen Dateien in Arduino 1.5.4b einzubinden und zum Laufen zu bringen?

Viele Grüße,
CaptBlaubaer (CBR)

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 27 Oktober 2013, 09:52:41
Nimm mal diesen Link:
https://github.com/firmata/arduino/archive/configurable.zip (https://github.com/firmata/arduino/archive/configurable.zip)

Der findet sich auf Github rechts unter der Https-clone-url. Der Button mit der Aufschrift 'Download ZIP'


Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 27 Oktober 2013, 11:29:26
Hallo Norbert,

das hatte ich auch schon versucht. Wenn ich die Datei als Library -> "Library hinzufügen" in Arduino einbinde verschwindet nur der Beispiele Eintrag für Firmata.

Anmerkung:
Die Beispiele verschwinden auch, wenn ich das Verzeichnis manuell ins library Verzeichnis kopiere und dann umbenenne. Auch das Anlegen eines src Ordners und verschieben von .h und .cpp Dateien ändern nichts.

Viele Grüße,
CaptBlaubaer (CBR)

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 27 Oktober 2013, 17:34:02
Hab die Seite dazu im Wiki mal etwas ausgearbeitet:
http://www.fhemwiki.de/wiki/Arduino#Installation_ConfigurableFirmata (http://www.fhemwiki.de/wiki/Arduino#Installation_ConfigurableFirmata)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 27 Oktober 2013, 19:09:13
Hallo Norbert,

danke für Deine Bemühungen.

Unter den von Dir angegebenen Verzeichnissen
Windows:
/Program\ Files/arduino-1.5.x/hardware/arduino/avr/libraries/Firmata
/Program\ Files/arduino-1.5.x/hardware/arduino/sam/libraries/Firmata

befindet sich bei mir auf dem Rechner nichts mit Firmata.

Die mit Arduino 1.5.4b mitgelieferte und funktionierende Firmata Version (2.3.6) und ihre Beispiele, liegt auf meinem Rechner auf
C:\Users\Arduino\Downloads\arduino-1.5.4\libraries\Firmata

Also:
/Program\ Files/arduino-1.5.x/arduino/libraries/Firmata

Sehr verwirrend das Ganze.

Viele Grüße,
CaptBlaubaer (CBR)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: det. am 27 Oktober 2013, 19:09:44
Hallo Norbert,
kannst Du bitte für DUMMIES die Einstellungen für die Kombination ENC28J80 + Nano etwas genauer erklären. Das Auskommentieren von i2c und servo bringt wie Du ja im WIKI schreibst Fehler, einmal mit allem compilieren geht, wenn man ein anderes Board einstellt - aber nach Zurückstellen auf den Nano compiliert das neu und die Fehler sind wieder da. Entschuldige meine Unwissenheit.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 27 Oktober 2013, 19:42:21
Hallo det.,

mich interessiert das auch, weil ich noch ein ENC28J80 Shield rumliegen habe. Aber ich würde mir wünschen, wenn das in einem anderen Thread behandelt würde.

Mir geht's hier um die Einbinden mit dem Standard Arduino Ethernet Shield.

Viele Grüße,
CaptBlaubaer (CBR)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 28 Oktober 2013, 00:11:43
Zitat von: det. am 27 Oktober 2013, 19:09:44
Hallo Norbert,
kannst Du bitte für DUMMIES die Einstellungen für die Kombination ENC28J80 + Nano etwas genauer erklären.
1. den ConfigurableFirmata sketch öffnen, anpassen (UIPEthernet.h durch entfernen des Kommentars aktivieren, Ethernet-config anpassen und die Features, die man nicht braucht auskommentieren). Anschließend als eigenen Sketch speichern.
2. den unveränderten ConfigurableFirmata-sketch (über 'Examples'->'Firmata') noch mal öffnen und compilieren. (Das kompiliert dann auch Servo.cpp usw...)
3. Jetzt kann man den angepassten Sketch (der z.B. Servo gar nicht braucht) compilieren, weil das compilierte Servofeature (aus Firmata/utilities) schon im tmp-Verzeichnis liegt.

Auf dem Nano wirds Speichermäßig recht eng. DNS und DHCP sind da nicht drin, wenn man mehr als nur Digital-IO machen will. Um das komplett rauszulassen (inklusive des UDP-codes aus der uip.c), muss man in der UIPEthernet/utilities/uip-conf.h das define UIP_CONF_UDP auf 0 setzen. Damit spart man ca. 5kb Flash.

Beim Standard-Ethernet-shield entfernt man die Kommentare bei 'spi.h' und 'Ethernet.h'. Da ist es speichermäßig entspannter (den tcp-stack erledigt da ja die Hardware)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 28 Oktober 2013, 00:18:56
Zitat von: CaptBlaubaer am 27 Oktober 2013, 19:09:13
Die mit Arduino 1.5.4b mitgelieferte und funktionierende Firmata Version (2.3.6) und ihre Beispiele, liegt auf meinem Rechner auf
C:\Users\Arduino\Downloads\arduino-1.5.4\libraries\Firmata
das Arduino-basis Verzeichnis kannst Du bei der Installation vermutlich frei wählen? Ich hab kein Windows um das nachzuvollziehen, ich hab die vorgenannten Verzeichisse aus der Firmata-readme kopiert.

Naja - jedenfalls muss das Verzeichniss, in dem die mitgelieferte Firmata (Version 2.3.6) liegt ersetzt werden. Egal wohin Du das installiert hast. Dann taucht die ConfigurableFirmata nach einem Neustart der IDE unter den Firmata-Beispielen auf.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 28 Oktober 2013, 01:22:22
Hallo Norbert,

wie ich schon geschrieben habe funktioniert das auch nicht
ZitatAnmerkung:
Die Beispiele verschwinden auch, wenn ich das Verzeichnis manuell ins library Verzeichnis kopiere und dann umbenenne. Auch das Anlegen eines src Ordners und verschieben von .h und .cpp Dateien ändern nichts.

Wenn ich nach einem Neustart von Arduino versuche die Library einzubinden kommrn folgende Fehlermeldungen:
ZitatArduino: 1.5.4 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK"
Invalid library found in C:\Users\Arduino\Downloads\arduino-1.5.4\libraries\Firmata: Invalid file '.gitignore'.
Invalid library found in C:\Users\john\Documents\Arduino\libraries\Firmata: Missing 'src' folder

Ich vermute mal das ist auch der Grund weshalb die Beispiele nicht angezeigt werden.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 28 Oktober 2013, 09:39:39
Ich hab grade mal einen Windows-rechner zur Verfügung um das nach der Arduino-IDE-1.5:-Library-specification (https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification) zu testen.
also Firmata.h, Firmata.cpp, Boards.h und das utility-verzeichnis nach:
<arduino-1.5.4-installation>\libraries\Firmata\src
und die library.properties nach <arduino-1.5.4-installation>\libraries\Firmata\

Dann werden die Firmata-examples gefunden, allerdings gibt es beim compilieren einen Fehler, weil die 1.5.4er IDE offenbar nicht mehr impliziet das 'utility' vor die Pfade stellt. Nimm einfach die 1.0.5er IDE bis dafür eine saubere Lösung da ist, da passt die Verzeichnissstruktur (einfach alles ins 'Firmata'-library-verzeichnis).

Und lösche dein zweites 'Firmata'-Verzeichnis im Users-Zweig - zwei mal die gleiche Library wird die IDE vermutlich durcheinanderbringen.

Das Thema 'Firmat und 1.5.x library-Format' wird übrigens hier auf Github getrackt: https://github.com/firmata/arduino/issues/56 (https://github.com/firmata/arduino/issues/56) Es wäre sinnvoller das da weiterzudiskutieren, damit die anderen Firmata-entwickler (insbesonders Jeff Hoeffs, der grade bei solchen grundsätzlichen Themen den Hut auf hat) mit eingebunden sind. Ich kann mich darum (also das 1.5.xer Library-format) im Moment nicht vernünftig kümmern - zu viele andere Baustellen.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 29 Oktober 2013, 17:35:56
Kaum macht man etwas richtig, schon geht's!  :o

Zitat von: ntruchsess am 28 Oktober 2013, 09:39:39
Nimm einfach die 1.0.5er IDE bis dafür eine saubere Lösung da ist, da passt die Verzeichnissstruktur (einfach alles ins 'Firmata'-library-verzeichnis).


Norbert, vielen Dank für Deine Mühen.

Mit der Aduino 1.0.5 ging es auf Anhieb.  Für mich genügt das zum Spielen bis auf Weiteres.

Ich lasse den Thread noch offen, bis das mit der 1.5.4 geklärt ist.
Für meine weiteren Fragen (ja, jetzt kommt's dicke) mach ich einen neuen Thread auf.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 03 November 2013, 15:43:40
Hallo,

ich habe gestern und heute auch sehr viel Zeit damit verbracht, das "arduino_configurable_unified_ethernetclient" in die Arduino IDE zu integrieren (Windows 7, IDE 1.5.4 Neuinstallation). Ich habe mit zwei grundlegenden Fehlern gekämpft:

1. Beim Einbinden in den Pfad "C:\Program Files\Arduino\Libraries" war das Verzeichnis in der IDE unter Beispiele nicht sichtbar
2. Bei Aufrufen aus einem anderen Pfad kam beim Compilieren Unmenge an Fehlern.

Die Lösung war ganz einfach, nur sehr schwer zu finden.

1. kompletter Inhalt des Verzeichnisses "C:\Program Files\Arduino\Libraries\Firmata" löschen
2. Einfügen aller Dateien aus dem ZIP-File ""arduino_configurable_unified_ethernetclient.zip" in das Verzeichnis "..\Firmata"
3. Löschen der Datei "library.properties" im Verzeichnis "..\Firmata" -> Damit war das Verzeichnis in der IDE unter "Beispiele" sichtbar.

Vom Syntax her ist die Datei in Ordnung. Ich habe auch versucht, die Dateien nach der neuen Verzeichnisstruktur zu "verteilen". Brachte alles nichts, der Pfad war unter Beispiele erst sichtbar, nachdem ich die Datei gelöscht habe.

Wenn man dann das Beispiel "ConfigurableFirmata" daraus öffnet und compiliert gibt es dabei auch keine Fehler mehr.

Mit dem UIPEthernet wird der Sketch wesentlich kleiner (Sketch uses 22.930 bytes) als mit dem"Standard" Ethernet (Sketch uses 30.256 Bytes). Kann das jemand bestätigen?
[..edit..]
Die Größe des Sketches mit dem UIPEthernet stimmt nicht. Nach Aufbau der Hardware und erneutem Compilieren kommt immer (Sketch uses 40.916 Bytes) heraus.
[..]
Getestet habe ich die Sketche noch nicht (muss erst die Hardware noch zusammenstecken). Die Dateien aus "arduino_uip_master.zip" habe ich logischerweise auch unter "..\Arduino\Libraries" eingebunden

Gibt es eine einfache Möglichkeit, die Sketche über Ethernet zu testen, ohne FHEM? Ich habe bisher nur Perl (und andere) Scripte für USB Verbindungen gefunden.

MfG Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 03 November 2013, 20:10:23
Hallo,

nach Aufbau der Hardware (Nano und ENC28J60 Shield) habe ich versucht, den Sketch so zu compilieren, das er auf das Board passt.

1. Aktion
-- Original ConfigurableFirmata mit Anpassung der Netzwerksetttings
-- UIPEthernet/utilities/uip-conf.h das define UIP_CONF_UDP auf 0 setzen
-> beim Compilieren tritt dann folgender Fehler auf:
ZitatArduino: 1.5.4 (Windows 7), Board: "Arduino Nano, ATmega328"

C:\Program Files\Arduino\libraries\UIP_Ethernet\utility\uip.c: In function 'uip_process':
C:\Program Files\Arduino\libraries\UIP_Ethernet\utility\uip.c:915: error: label 'udp_input' used but not defined
-> Da komme ich nicht weiter.  Hat da jemand die Lösung?

2. Aktion
-- Original ConfigurableFirmata mit Anpassung der Netzwerksetttings
-> Compilieren läuft durch aber mit dem Fehler:
ZitatSketch uses 40.916 bytes (133%) of program storage space. Maximum is 30.720 bytes.
-> kopierter ConfigurableFirmata mit Auskommentieren von AnalogInput, AnalogOutput, Servo und Stepper. Laut Norbert sollte diese Reihenfolge so funktionieren, leider kommt dabei der Fehler
ZitatIn file included from C:\Program Files\Arduino\libraries\Firmata\utility\ServoFirmata.cpp:19:
C:\Program Files\Arduino\libraries\Firmata\utility/ServoFirmata.h:36: error: ISO C++ forbids declaration of 'Servo' with no type
C:\Program Files\Arduino\libraries\Firmata\utility/ServoFirmata.h:36: error: expected ';' before '*' token
zwischen den beiden Compilerläufen habe ich nichts an der IDE gemacht.
-> Auch hier komme ich nach verschiedenen Test nicht weiter. Hat da jemand die Lösung?

MitAnalogIn/Output und Stepper auszukommentieren wird der Sketch nicht klein genug. Bei FirmataExt und FirmataScheduler bin ich mir nicht sicher, ob die beiden Module benötigt werden. I2C auskommentieren ist dasselbe Problem wie bei Servo.

Da bleibt mir erstmal nichts anders übrig als die Hardware mit dem WIZ5100 aufzubauen. Ich hoffe es finden sich noch Lösungen für die ENC28J60 Umgebung.

MfG Achim

PS.: Ich möchte über 1-Wire die Zähler und In/Output Boards im Keller über einen Arduino mit dem RPi in der Wohnung verbinden. Ich bekomme leide keine 1-Wire Leitung in den Keller.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 04 November 2013, 09:58:11
1. setze auch UIP_CONF_BROADCAST auf 0 (habe ich bei meinem letzen Commit in die uip-conf.h mit reingenommen, braucht es um UDP-broadcast-packete zu empfangen - wird leider mit UIP_CONF_UDP nicht automatisch mit auskommentiert, das werde ich aber anpassen)

2. Öffne das ConfigurableFirmata example in einem 2. IDE-fenster und compiliere es einmal unverändert mit allen Features. Bis zum nächsten Neustart der IDE oder zum Wechsel des ausgewählten Boards kannst Du den abgestrippten ConfigurableFirmata-sketch compilieren.

FirmataExt wird für FRM benötigt, FirmataScheduler nicht.

Du kannst ruhig die ConfigurableFirmata aus dem configurable-branch (https://github.com/firmata/arduino/archive/configurable.zip) nehmen, der EthernetClient ist da schon reingemerged. Der configurable_ethernet_client-branch ist mit dem merge obsolet, den habe ich grade gelöscht.

- Norbert

Edit: link korrigiert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 04 November 2013, 10:22:20
Zitat von: Achim am 03 November 2013, 15:43:40
Gibt es eine einfache Möglichkeit, die Sketche über Ethernet zu testen, ohne FHEM? Ich habe bisher nur Perl (und andere) Scripte für USB Verbindungen gefunden.
im ethernet-branch (https://github.com/ntruchsess/perl-firmata/tree/ethernet) der perl-firmata findest Du ein perl-script (https://github.com/ntruchsess/perl-firmata/blob/ethernet/examples/example-tcpserver.pl) zum Testen. Dazu musst Du natürlich den ganzen perl-firmata ethernet-branch nehmen, die 'native' Ethernet-unterstützung habe ich noch nicht ins Release übernommen.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 06 November 2013, 08:56:45
Hallo Norbert,

mit
Zitat#define UIP_CONF_UDP 0 und
#define UIP_CONF_BROADCAST 0
ist der Fehler beim compilieren ohne UDP weg.

Das Problem mit dem Fehler
ZitatIn file included from C:\Program Files\Arduino\libraries\Firmata\utility\ServoFirmata.cpp:19:
C:\Program Files\Arduino\libraries\Firmata\utility/ServoFirmata.h:36: error: ISO C++ forbids declaration of 'Servo' with no type
C:\Program Files\Arduino\libraries\Firmata\utility/ServoFirmata.h:36: error: expected ';' before '*' token
habe ich weiterhin. Ich habe zwei IDEs parrallel offen, in der ersten compiliere ich den Originalsketch (mit den Netzwerkanpassungen). Dabei kommt "nur" der Fehler
ZitatBinäre Sketchgröße: 36.232 Bytes (von einem Maximum von 30.720 Bytes)
processing.app.debug.RunnerException: Sketch zu groß
Danach gleich im zweiten Fenster den geänderten Sketch
Zitat//#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;
Funktioniert diese Vorgehensweise vielleicht unter Windows nicht? Ich habe dies mit der IDE Version 1.0.5 und 1.5.4 getestet.  Ich habe auch vor einem gesamten Testdurchlauf das Temp-Verzeichnis komplett gelöscht. Immer dasselbe Resultat.

Muss ich da vielleicht in den Voreinstellungen der IDE in der preferences.txt etwas konfigurieren, das vom Installationsstandard abweicht?

MFG Achim Unger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 08 November 2013, 19:20:34
Hallo Norbert,

ich habe den Fehler gefunden.
Zitat2. Öffne das ConfigurableFirmata example in einem 2. IDE-fenster und compiliere es einmal unverändert mit allen Features
Ich habe bei dem Originalsketch immer die Netzwerkanpassungen gemacht. Dadurch war der Sketch logischerweise immer zu groß und die IDE hat wohl daher die anderen Module auch als nicht korrekt compiliert gesetzt. Ohne Änderungen wird zwar kein Netzwerkadapter in den Sketch eingebunden aber wohl die anderen Module korrekt compiliert und auch im TEMP auch so gekennzeichnet. Man (ich) sollte wirklich die Anweisungen genau lesen und auch so ausführen wie es beschrieben ist :)...

Vielen Dank für deine Hilfe und vor allem für deine Module (und die damit verbundene Arbeit und Zeit ) die du allen zur Verfügung stellst.

MfG Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 17 November 2013, 18:56:53
Hallo Norbert,

ich komme mit der Anbindung nicht weiter. Die definierten Ein/Ausgänge reagieren nicht.

Meine Umgebung:
Arduino Nano mit Ethernet Shield (ENC28J60)
mit ConfigurableFirmata Sketch -> meine Anpassungen://#include <SPI.h>
//#include <Ethernet.h>
#include <UIPEthernet.h>
#define remote_ip IPAddress(192,168,178,42)
//#define remote_host "server.local"
#define local_ip IPAddress(192,168,178,50)


RPi
fhem.cfgdefine Arduino FRM 3030 global
attrib Arduino loglevel 1
attrib Arduino model nano
# -> dieses Attribut habe ich im Sourcecode von FRM.PM gefunden.

define D8 FRM_IN 8
attrib D8 internal-pullup on

define D9 FRM_OUT 9

Im Logfile steht "nur"
Zitat2013.11.17 12:06:13 3: querying Firmata Firmware Version
2013.11.17 12:06:13 3: Firmata Firmware Version: w9+?W? V_87_08

Wenn ich FHEM herunterfahre und mit example-tcpserver.pl teste bekomme ich beim ersten Aufruf des Scriptes:
Zitatexample-tcpserver.pl
waiting for firmata-client to connect...
waiting for firmata-client to connect...
>f0,79,f7
>f0,79,f7
beim zweiten und jedem weiteren Aufruf
Zitatwaiting for firmata-client to connect...
>f0,79,f7
<f0,79,57,08,17,00,2f,00,75,01,39,01,00,00,57,00,08,00,15,01,f7
    < START_SYSEX
    < DATA_SYSEX
    < END_SYSEX
Use of uninitialized value $buf in split at ../lib/Device/Firmata/IO/NetIO.pm line 167.
>
^C

Die grundsätzliche Kommunikation funktioniert aus meiner Sicht.

In der oberen SYSEX Meldung finde ich zwar die Version 87_08 (57 08), die beiden Zahlen aber nicht in den Sourcecodes. In Firmata.h habe ich nur#define FIRMATA_MAJOR_VERSION   2 // for non-compatible changes
#define FIRMATA_MINOR_VERSION   5 // for backwards compatible changes
gefunden.

Meine C und Perl Kenntnisse sind leider nicht so gut, das ich hier jetzt ohne Hilfe weiterkomme. Ich weiss nicht mehr weiter wo ich mit der Fehlersuche ansetzen soll. Vielleicht kannst du mir einen Tipp geben.

MfG Achim

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 17 November 2013, 21:52:32
der vermurkste Version-string deutet darauf hin, dass der Ram-speicher des Arduinos zu klein ist und deshalb der Versionstring überschrieben wurde. Ist das ein Nano mit ATMega328 oder dem 168? Kommentiere erst mal alle Features außer DigitalInput/DigitalOutputFirmata und FirmataExt aus um den Rambedarf zu minimieren.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: mago0211 am 21 November 2013, 23:10:01
Hallo,
erstmal Danke für deine Mühen in deiner Freizeit  :D

Ich steh irgendwie aufm Schlauch. Ich bekomme einfach keine Ethernet Verbindung zusammen also das sich der Arduino im Heimnetzwerk anmeldet.

//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(192,168,1,123)


Bedeutet hier muss ich die IP des FHEM Server (läuft auf einem Raspi) eintragen ?

//replace with the port that your server is listening on
#define remote_port 3030

Das ist dann der Port über den der Arduino erreichbar ist?

//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp
#define local_ip IPAddress(192,168,1,130)

Ist das dann die Adresse des Arduino im Heimnetz?

Sorry ich muss jetzt echt blöd fragen ich steh total auf dem Schlauch  :-[
muss ich die Subnetzmaske und den Standardgateway nirgens eintagen?

Weil mit den oben genannten Einstellungen meldet er sich nicht im Heimnetzwerk an.

Sonstige Einstellungen
//#include <SPI.h>
//#include <Ethernet.h>
#include <UIPEthernet.h>

//#define remote_host "server.local"


Ach ja bevor ich es vergesse ich verwende einen Nano mit Ethernet Shield

Vielen Dank fürs Lesen  :)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 21 November 2013, 23:38:06
Zitat von: mago0211 am 21 November 2013, 23:10:01
//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(192,168,1,123)


Bedeutet hier muss ich die IP des FHEM Server (läuft auf einem Raspi) eintragen ?
ja

Zitat von: mago0211 am 21 November 2013, 23:10:01
//replace with the port that your server is listening on
#define remote_port 3030

Das ist dann der Port über den der Arduino erreichbar ist?
nein, das ist der Port, den man per 'define xyz FRM this.is.my.ip <port> global' konfiguriert. FRM öffnet hier einen Server-listen-socket und wartet, dass sich der Arduino (als Client) verbindet

Zitat von: mago0211 am 21 November 2013, 23:10:01
//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp
#define local_ip IPAddress(192,168,1,130)

Ist das dann die Adresse des Arduino im Heimnetz?
ja

Zitat von: mago0211 am 21 November 2013, 23:10:01
muss ich die Subnetzmaske und den Standardgateway nirgens eintagen?

Subnetzmaske und Standardgateway sind optional. Gibt man nix an, dann wird ein 8-bit Subnetz (255.255.255.0) und Gateway auf (x.y.z.1) gesetzt. Falls Du die Werte explizit setzen willst, dann kannst Du die Zeile 179 anpassen. Die Signaturen der anderen Ethernet.begin(...)-methoden findest Du in der UIPEthernet.h

Zitat von: mago0211 am 21 November 2013, 23:10:01
//#include <SPI.h>
//#include <Ethernet.h>
#include <UIPEthernet.h>

Ach ja bevor ich es vergesse ich verwende einen Nano mit Ethernet Shield
sieht eigentlch gut aus, vorrausgesetzt das Nano-ethernet-shield hat CS auf PIN 10 (so wie meines ;-) ). Falls nicht, kannst Du den Wert für CS in der Enc28J60Network.h passend setzen.

Viel Erfolg,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: mago0211 am 22 November 2013, 20:09:25
Hallo ntruchsess,
erstmal Danke für die super schnelle Antwort.

leider komme ich immer noch nicht zurecht. :'(

Übrigens ist mir heute aufgefallen das ich einen Fehler im meinem vorherigen Post habe. :'(
Ich habe keinen Arduino Nano sondern einen UNO  ::)

Ich bekomme einfach keine Netzwerkverbindung zu meinem Heimnetz hin. Und ich denke so lange ich das nicht hinbekomme und der Arduino nicht anpingbar ist  brauch ich in FHEM gar nicht weiter machen. :-\

Also ich habe mal versucht den Gateway und das Subnet manuell einzustellen
dazu habe ich der ConfigurableFirmata.ino ab Zeile 175 wie folgt geändert

/*==============================================================================
* SETUP()
*============================================================================*/

byte dns[] = {192, 168, 1, 1};
byte gateway[] = {192, 168, 1, 1};
byte subnet[] = {255, 255, 255, 0};
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef local_ip
  Ethernet.begin(mac,local_ip,dns,gateway,subnet);  //start ethernet
#else
  Ethernet.begin((uint8_t*)mac); //start ethernet using dhcp
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);


Die Anweisungen dazu habe ich von der Arduino HP http://arduino.cc/de/Reference/EthernetBegin (http://arduino.cc/de/Reference/EthernetBegin)

Wo liegt mein Fehler ich komme einfach nicht weiter :(
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 22 November 2013, 22:18:43
die Addressen für dns, gateway und subnet entsprechen den defaults, die die Ethernet-Lib wählen würde (schaded so aber natürlich nix).

Was hast Du denn für ein Ethernet-shield? Ein originales oder eines mit ENC28J60? Laufen andere Sketches (z.B. Webserver aus den Ethernet-beispielen) damit? (Ich habe eines, bei dem hat der Stecker vom ICSP nicht richtig verbunden, weil zu kurz - das ging dann auf meinem Mega, aber nicht am Uno (bis ich den ICSP-Stecker etwas verlängert angelötet habe)).

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: CaptBlaubaer am 22 November 2013, 23:11:38
HI,

@mago0211:
Hast Du Dein Ethernetshield mal mit den mitgelieferten Beispielen (DHCP)ChatServer aus der Ethernet  Library und einem Telnet Client getestet?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 24 November 2013, 15:35:21
Hallo Norbert,

ich habe jetzt die Verbindung mit Firmata mit dem Arduino Nano und Ethernet Shield (ENC28J60) am Laufen. In den Sketch habe ich die Digitalen In/Out und das One-Wire Modul eingebunden. OWTEMP mit DS18B20 und OWCOUNT mit dem alternativen DS2423 lassen sich auslesen und darstellen. Das Problem beim Auskommentieren von "Servo" und "I2C" war, das trotzdem die Definitionen
#include <Wire.h>
#include <Servo.h>
bleiben mussten, da sonst beim Compilieren Fehler auftraten. Langsam lerne ich dazu.

Dann habe ich das ganze mit einem UNO und einem W5100 Board versucht. Nur die Definitionen für die Ethernetkarte im Sketch und das Board in der der IDE gewechselt. Die Digitalen In/Out funktionieren, Ebenso die DS18B20 am 1-Wire Bus. Nur beim Auslesen der Counter  bekomme ich folgende Fehlermeldung
ZitatOWCOUNT: Could not get values from device OWX_Count1, reason: invalid data length, 3 instead of 45 bytes in three stepsinvalid CRC
Der Fehlercode taucht in einem anderen Thread auf, dort schreibst du allerdings, das es mit einer neuen Version von OWCOUNT behoben wäre. Ich habe die aktuellsten Module mit Update geladen, keine Module separate irgendwoher installiert. Da es mit dem Nano funktioniert, ist das ein Timingproblem beim Uno?

MfG Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: mago0211 am 25 November 2013, 17:22:32
Danke ntruchsess und Blaubaer für eure Antworten.

Entschuldigung das ich nicht sofort geantwortet habe aber ich war am WE im Stress.   :(

Zitat von: ntruchsess am 22 November 2013, 22:18:43
Was hast Du denn für ein Ethernet-shield? Ein originales oder eines mit ENC28J60?

Ich habe das Original Shield http://arduino.cc/en/Main/ArduinoEthernetShield (http://arduino.cc/en/Main/ArduinoEthernetShield) .

Zitat von: CaptBlaubaer am 22 November 2013, 23:11:38
Hast Du Dein Ethernetshield mal mit den mitgelieferten Beispielen (DHCP)ChatServer aus der Ethernet  Library und einem Telnet Client getestet?
Zitat von: ntruchsess am 22 November 2013, 22:18:43
Laufen andere Sketches (z.B. Webserver aus den Ethernet-beispielen) damit?

Ich habe das mal ausprobiert und es ging nicht. Ich hab dann Arduino IDE neu installiert, scheinbar hat sich bei der Installation oder danach irgendwas verwurschtelt. Auf jeden Fall habe ich nach der neu Installation den WebServer und den ChatServer zum laufen gebracht ohne Probleme!
Jetzt habe ich aber ein anderes Problem:
Jetzt ist der ConfigurableFirmata Sketch zu groß für den UNO. 41.032 Bytes (von einem Maximum von 32.256)
Danach hab ich wie von dir beschrieben die Servo.h und Wire.h auskommentiert.

//#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
#include <utility/ServoFirmata.h>
ServoFirmata servo;

//#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/I2CFirmata.h>
I2CFirmata i2c;


Leider Passt er immer noch nicht drauf!?

Grüße

Markus
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 28 November 2013, 14:44:23
äh, hast Du vieleicht 'UIPEthernet.h' drin oder nur 'Ethernet.h'? Für das original-Ethernet-shield brauchst Du die Ethernet.h (die Ethernet-library ist fast 10kb kleiner als UIPEthernet, letzteres braucht man nur für die ENC28J60-shields).

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: mago0211 am 30 November 2013, 19:48:31
Ja das hatte ich tatsächlich falsch eingestellt. Ich habe mit der UIPEthernet.h rum gespielt weil es Anfangs mit der Ethernet.h nicht klappte jetzt habe ich aber festgestellt das ich beim ersten Versuch die SPI.h vergessen hatte  ::) :'( .

Ok jetzt ein anderes Problem  :-[ .

Verbindung zum Fhem Server bzw. zum Arduino steht. Nur sind die Schaltvorgänge falsch herum also wenn ich in Fhem ON drücke geht z.b. Pin 5 auf Off, und in Fhem OFF ist auf dem Arduino ON.
Woran könnte das liegen

Grüße Markus
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 Dezember 2013, 10:23:54
Zitat von: mago0211 am 30 November 2013, 19:48:31...wenn ich in Fhem ON drücke geht z.b. Pin 5 auf Off, und in Fhem OFF ist auf dem Arduino ON.

was hast Du denn angeschlossen? Manche Relaisboards z.B. werden 'active Low' also durch Verbinden mit Masse 'angeschaltet', da ist die Schaltlogic dann umgekehrt.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: mago0211 am 01 Dezember 2013, 20:20:56
Zitat von: ntruchsess am 01 Dezember 2013, 10:23:54
was hast Du denn angeschlossen? Manche Relaisboards z.B. werden 'active Low' also durch Verbinden mit Masse 'angeschaltet', da ist die Schaltlogic dann umgekehrt.

- Norbert

Ich habe ein 4 Kanal Relais Board von SainSmart dran. Kann mann die Schaltlogik irgendwie umdrehen?

Vielen Dank

Grüße
Markus
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 Dezember 2013, 21:13:25
Ich kann bei nächster Gelegenheit ein Attribut ins FRM_OUT einbauen, mit dem man die Semantik umdreht. Am Board wirst Du nicht ohne weiteres viel ändern können außer einen invertierenden Treiber vorzuschalten.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ThomasL am 03 Dezember 2013, 08:51:49
Zitat von: ntruchsess am 01 Dezember 2013, 21:13:25
Ich kann bei nächster Gelegenheit ein Attribut ins FRM_OUT einbauen, mit dem man die Semantik umdreht. Am Board wirst Du nicht ohne weiteres viel ändern können außer einen invertierenden Treiber vorzuschalten.

- Norbert

Hallo Norbert,

da bi nich auch sehr dran interessiert!

Danke
Thomas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Brater am 28 Januar 2014, 10:06:10
Das könnte ich auch gut gebrauchen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 28 Januar 2014, 13:30:36
Damit das im Alltagsgeschäft nicht wieder untergeht, hab mir grade mal einen Merker dafür (https://github.com/ntruchsess/fhem-mirror/issues/1) auf Github angelegt.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 29 Januar 2014, 22:28:02
Zitat von: Achim am 24 November 2013, 15:35:21
#include <Wire.h>
#include <Servo.h>
bleiben mussten, da sonst beim Compilieren Fehler auftraten. Langsam lerne ich dazu.


Das brachte mich auch ans Ziel. (Arduino Nano und Ethernetshield mit ENJ......

@Norbert, ich vermute das FirmataExt und/oder FirmataScheduler notwendig sind damit das ganze funktioniert. Die hab ich aber einfach fröhlich auskommentiert. Vielleicht macht es Sinn dort in den Quelltext zu schreiben das die notwendig sind. Und vielleicht ist es auch Sinnvoll bei Wire.h und Servo.h hinzuschreiben das man das so auskommentieren kann. Vielleicht auch im Wikipediaeintrag?

Auf jedenfall vielen Dank für das Modul und den Sketch und die Library. Jetzt will ich mal schauen ob ich damit meinen Gaszähler "auslesen" kann. Ein Reddkontakt dran und jetzt muss ich nur noch FHEM überreden das alles hinzubekommen.... puh
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 30 Januar 2014, 12:06:11
Zitat von: strauch am 29 Januar 2014, 22:28:02ich vermute das FirmataExt und/oder FirmataScheduler notwendig sind
FirmataScheduler ist nicht notwendig, FirmataExt schon.

Zitat von: strauch am 29 Januar 2014, 22:28:02Ein Reedkontakt dran und jetzt muss ich nur noch FHEM überreden das alles hinzubekommen.... puh
Denk dran, Du musst den Reedkontakt hardwareseitig (Stichwort 'Tiefpass' oder 'R/C-Glied') entprellen, damit Du pro echten Impuls nicht mehrere in FRM_IN zählst.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 30 Januar 2014, 12:31:32
Danke für den Hinweis, lese ich mich mal ein. Bisher klappt das zählen auch noch nicht besonders gut, ich muss den Reedkontakt noch besser anbringen, bei meinen manuellen Versuchen mit einem Magnet hats sehr gut geklappt, aber da war ich auch nicht sonderlich schnell, so das ich entprellen müsste.

Gäb es nicht auch die Möglichkeit zu entprellen mit der Bounce Biblothek oder sprengt das die Sketchgröße total?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 30 Januar 2014, 15:37:14
klar könnte man das im Sketch debouncen. Es muss nur jemand Zeit dafür haben, das einzubauen. Am besten indem man eine entprellte Version der DigitalInputFirmata schreibt, mit der man die originale im ConfigurableFirmata-sketch ersetzt. Dann müsste das Firmata-Protokoll und damit auch die perl-firmata überhaupt nicht erweitert werden.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 31 Januar 2014, 12:01:32
Hallo,
zuerst vielen Dank für die Entwicklung dieser Firmware.

Leider bekomme ich Firmata nicht zum laufen, es wird keine Verbindung mit FHEM hergestellt.
Board ist ein Nano mit ENC28J60, der Chatserver funktioniert wenn ich die UIPEthernet verwende, auch FHEM reagiert wenn ich per Telnet auf Port 3030 anfrage, netstat meldet ebenfalls "LISTEN" für diesen Port.

Gibt es in der configurableFirmata eine Ethernet-Einstellung die sich vom ChatServer unterscheidet? Habe in Zeile 231 das ignore für SPI entdeckt, daran liegt es aber auch nicht.
Kompilieren läuft ohne Probleme nach der vorherigen Anleitung, UDP habe ich momentan noch aktiv, Größe ist damit bei 29.886 Bytes.

Oder kann man sich mit dem Arduino verbinden um zu sehen ob er überhaupt was macht?

Gruß,
Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 Januar 2014, 12:15:12
Hi Andreas,

ich hatte auch Schwierigkeiten, schau dir mal meine Konfiguration an, mein Problem war das ich
#include <utility/FirmataExt.h>
FirmataExt firmataExt;

auskommentiert hatte

http://forum.fhem.de/index.php/topic,19480.0.html

Danach ging es dann

Grüße

strauch
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 31 Januar 2014, 12:53:44
Danke für den Hinweis,

FirmataExt und FirmataScheduler sind aber noch drin, UDP habe ich jetzt mal rausgenommen, ändert sich jedoch nichts.

Allerdings taucht bei mir wenn ich"version" eingebe die 10_FRM nicht auf, wird die erst geladen wenn der Arduino verbunden ist?

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 Januar 2014, 13:03:59
Mach mal ein update check und schau ob sie dabei steht.

Wenn ja führ mal ein update durch.

Gesendet von meinem Nexus 4 mit Tapatalk
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 31 Januar 2014, 14:11:54
Hmm,
daran liegt es auch nicht, Update hatte ich bereits heute morgen schon gemacht, die Module wurden auch alle aktualisiert
Habe das ganze auch schon auf zwei verschiedenen Nano- sowie ENC28-Boards versucht, brachte keine Änderung.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 Januar 2014, 14:23:20
Im FHEM Ordner in fhem Ordner liegt sie auch nicht? Wenn ja mach mal ein restart, ansonsten würde ich folgendes Probieren:

einmal ein Zwangsupdate:
update force

Dann vielleicht testweise nur die eine Datei:
update 10_frm.pm

Ansonsten von hier herunterladen und manuell in das Verzeichnis fhem packen:
http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/10_FRM.pm
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 31 Januar 2014, 14:51:45
Das Modul liegt in /FHEM, habe aber sicherheitshalber nochmal ein Update davon durchgeführt, bringt keine Änderung.
Werde FHEM nochmal auf einer neuen SD-Karte aufsetzen und schauen ob sich etwas ändert.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 01 Februar 2014, 12:15:42
Ok,
peinlicher Fehler, das USB-Kabel war wohl nicht das Beste, programmieren ging komischerweise, für Firmata reichte dann aber die Spannung nicht mehr.

Jetzt habe ich aber ebenfalls ein Problem mit dem RAM, nur mit DigitalI/O und FirmataExt funktioniert es, nehme ich noch 1Wire dazu passt der Versionstring im log nicht mehr, für 1Wire war das Board aber eigentlich gedacht. UDP ist bereits deaktiviert, gibt es noch etwas was man rauswerfen könnte?

Ansonsten muss ich mir doch einen größeren Arduino oder den W5100 kaufen.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 Februar 2014, 19:46:31
was hast Du denn für einen Nano? Die Nano-clones gibt es sowohl mit ATmega168p und ATmega328p. Auf letzteren solle Digital+Analog+FirmataExt+OneWire+UIPEthernet eigentlich draufpassen, auf den 168p-basierten natürlich nicht.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 02 Februar 2014, 10:20:12
Hallo,

ist ein Nano mit 328P, bin inzwischen aber schon weiter. Die 1.5.5 IDE zeigt ja schön den RAM-Verbrauch an, habe nun 189 Bytes frei nachdem ich in der uipethernet-conf.h folgendes eingetragen habe:
#define UIP_CONF_UDP             0
#define UIP_CONF_BROADCAST       0
#define UIP_CONF_UDP_CONNS       0
#define UIP_UDP_NUMPACKETS       0

damit taucht er in FHEM auf, Digital I/O funktioniert auch, mit nur UDP und Broadcast auf Null waren 71 Bytes frei und der RAM wurde überschrieben.

Allerdings bekomme ich nun beim Reset des Arduino einen "unhandled sysex command" Fehler und OWX meldet "
error initializing: unsupported mode '7' for pin '8'".

Eine Idee woran das liegen könnte?

Danke,
Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 02 Februar 2014, 13:01:03
oh, danke für den Hinweis mit dem Speicherverbrauch und UIP_CONF_UDP. Hab grade einen Fix in Master und Arduino_1.5.5-Branch committed, der dafür sorgt, dass UIP_CONF_UDP reicht um den Ram-verbrauch für UDP mit abzustellen. (Du musst jetzt nicht zwingend updaten, der Fix ist gleichwertig dazu die Werte für UDP_CONNS und UDP_NUMPACKETS auf 0 zu setzen).

Mode 7 steht für OneWire. Hast Du die vieleicht in der ConfigurableFirmata mit auskommentiert?

Du kannst den Ram-bedarf noch verringern, wenn Du in der uipethernet-conf.h die UIP_CONF_MAX_CONNECTIONS verringerst. Firmata macht ja grundsätzlich nur eine einzelne Verbindung zum FHEM auf da sollte im Prinzip der Wert 1 reichen. Mit UIP_SOCKET_NUMPACKETS kann man im Prinzip auch spielen. Welcher Wert hier minimal nötig ist, hängt aber stark davon ab, wie sich die Gegenstelle verhält, das müsste man ausprobieren.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 02 Februar 2014, 13:52:32
Super,
jetzt läuft´s. OneWire war nicht auskommentiert, aber der RAM war wohl immer noch zu klein. Habe jetzt noch die NUMPACKETS auf 3 und MAX_CONNECTIONS auf 2 gesetzt, damit sind 660 Bytes frei und alles tut wie es soll.

Da jetzt alles läuft werd ich wohl ne Platine entwerfen die Nano und ENC aufnimmt und passende Klemmen für OneWire sowie I/Os und evtl. PWR-Supply bereitstellt.
Besteht an sowas denn Interesse? Hatte auch schon überlegt eine mit Mega328 und ENC komplett selbst zu designen, ist preislich aber nicht wirklich interessant.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 02 Februar 2014, 15:13:37
Zitat von: sackCfix am 02 Februar 2014, 13:52:32Da jetzt alles läuft werd ich wohl ne Platine entwerfen die Nano und ENC aufnimmt und passende Klemmen für OneWire sowie I/Os und evtl. PWR-Supply bereitstellt.
Das fände ich cool. Willst Du den ENC plus Beschaltung und Netzwerkinterface direkt auf der Platine unterbringen?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 02 Februar 2014, 17:50:47
Hmm,
werde wohl eher auf die fertigen Module zurückgreifen, bei Bestellung in China kostete das letzte mal eines 2€, da lohnt sich selbermachen nicht.
Was für Anschlüsse sollte man denn vorsehen, OneWire über Klemmen, ADC und Digital I/O auch? Oder gleich Relais/MosFETS?

Muss wohl mal n bisschen überlegen.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 09 Februar 2014, 15:22:18
So,

habe mal eine Platine entworfen, warte noch auf die Bauteile, dann werde ich sie vorstellen.

Wollte den Arduino jetzt mal im Dauerbetrieb testen, allerdings friert er nach ein paar Stunden ein, erst ein Reset der Versorgungsspannung startet ihn wieder.
Bei jedem neuen anmelden an FHEM zeigt er außerdem ein "unhandled sysex command", könnte dass damit zusammenhängen und auf einen vollaufenden Speicher hindeuten?
Die IDE zeigt mir beim kompilieren 660 Bytes frei an, hat den schon jemand ähnliche Erfahrungen mit NANO+ENC gemacht oder verwenden alle andere Boards?

Achja, auch FHEM scheint mit Firmata ein Problem zu haben und hängt sich auf, habe testweise schon die OWX_async(normal, refactoring und nothread) ausprobiert, scheint keinen Unterschied zu machen.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: det. am 09 Februar 2014, 16:03:16
ja, sorry, aus genannten Gründen füllt das Zeug bei mir eine Zigarrenkiste und hängt nicht mehr am Server. Das tut mir Leid für Norberts großartige Arbeit und hilft Dir auch nicht wirklich weiter, aber zaghafte Versuche in den vergangenen 2 Woche führten bei mir zu genau den Ergebnissen wie bei Dir - Resultat - ab in die Kiste. Meine Zeit ist allerdings auch sehr knapp und weggeworfen sind die Sachen ja damit nicht.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 10 Februar 2014, 00:11:33
Zitat von: sackCfix am 09 Februar 2014, 15:22:18
Wollte den Arduino jetzt mal im Dauerbetrieb testen, allerdings friert er nach ein paar Stunden ein, erst ein Reset der Versorgungsspannung startet ihn wieder.
kannst du mal mit der UIPEthernet-Version 1.03 testen? https://github.com/ntruchsess/arduino_uip/releases/tag/UIPEthernet_v1.03

Nach der Version habe ich am Memory-handling größer was umgebaut (benutzt kein dynamisch allociertes Ram mehr), was eigentlich die Stabilität verbessern sollte. Ich würde gerne ausschließen, dass mit dem Umbau die Stabilität schlechter geworden ist.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 10 Februar 2014, 10:39:09
Also bei mir funktioniert es "Problemlos" einzig mein FHEM zickt herum, ich muss ihn neustarten, dann muss ich auch 1x den Arduino abziehen und neustarten, sonst kontaktiert der mein FHEM nicht mehr. Ich weiß das ich mit der Version 1.52 Probleme hatte überhaupt zu kompilieren. Ich meine ich hab aktuell die Version 1.05
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 10 Februar 2014, 16:57:30
Ok,

habe jetzt mal Version 1.03 genommen, mal schauen ob es damit besser läuft.

@strauch: Welche Hardware verwendest du denn, ebenfalls Nano+ENC?

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 10 Februar 2014, 17:20:09
Hallo,

ich bin auch gerade dabei, mit der Lösung Firmata, Nano und ENC mein FHEM zu erweitern. "Kurzzeitig" funktioniert die Anbindung. Längere Tests habe ich noch nicht gemacht. Ich bin gerade am Zusammenlöten der Ein/Ausgangsschaltungen.

Welche Firmata Module habt ihr in den Sketch kompiliert? Ich habe das Release
ZitatUIPEthernet_v1.52 - Arduino 1.5.5 and DUE Support
verwendet. Im Sketch ist 1-Wire und Analog/Digital In/Out. Vielleicht sind die Abstürze auch nur bedingt durch die Zusammenstellung verschiedener Firmatamodule.

Ich komme auf nur etwas knapp über 300 Byte freien Speicher

Viele Grüße
Achim


Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 10 Februar 2014, 17:56:58
Ich hab grade einen Bug im UIPEthernet gefunden und behoben (https://github.com/ntruchsess/arduino_uip/commit/027171ee990ee8a54e40a102f56cdf17897e45a0), der dazu geführt hat, dass die UIPEthernet-Versionen neuer als 1.03 sich beim reconnecten aufhängen konnten. Die Empfehlung für Version 1.03 ist damit wohl obsolet.
Ist im aktuellen master (https://github.com/ntruchsess/arduino_uip/archive/master.zip) und Arduino_1.5.5 (https://github.com/ntruchsess/arduino_uip/archive/Arduino_1.5.5.zip) branch enthalten. Neues Release kommt auch bald, muss noch ein Issue im UDP finden (sollte für Firmata nicht von Belang sein).

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 10 Februar 2014, 23:05:18
Zitat von: sackCfix am 10 Februar 2014, 16:57:30
Ok,

habe jetzt mal Version 1.03 genommen, mal schauen ob es damit besser läuft.

@strauch: Welche Hardware verwendest du denn, ebenfalls Nano+ENC?

Andreas

Ja Nano und Enc. Hab aber version 1.01 mal schauen ob ich auf 1.55 wechsel. @Nobert: Dürfte die besser beim reconnecten sein? Wobei als ich heute mein raspberrypi mit neuer Stromversorgung versehen habe, klappte auch die Verbindung nach dem einstecken.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 10 Februar 2014, 23:48:36
Zitat von: strauch am 10 Februar 2014, 23:05:18mal schauen ob ich auf 1.55 wechsel. @Nobert: Dürfte die besser beim reconnecten sein?
Ja, ich denke schon. Gegenüber der Version 1.01 ist u.a. dieser Fix in der UIPClient.connected() (https://github.com/ntruchsess/arduino_uip/commit/e12a4f6939b057b213089db05c863b62c9dd07e2)-methode reingekommen, der direkten Einfluss auf den Reconnect hat.

Arduino_1.5.5 ist übrigens keine Versionsangabe der Library, sondern der Name des betreffenden Branches. Bezieht sich auf die Version der Arduino-IDE, für die dieser Branch da ist ;-)
Aktuell verbirgt sich darin Version 1.52+ein paar Fixes.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 11 Februar 2014, 16:41:14
Hmm,
1.03 hat´s auch nicht gebracht, dann teste ich mal die neue Version. Die Kommunikation mit dem Arduino scheint FHEM abzuschiessen, ist mir eben erst im Log aufgefallen. Solange die Verbindung da ist:

2014.02.11 08:29:57 5: Triggering BMP085 (4 changes)
2014.02.11 08:29:57 5: Notify loop for BMP085 T: 31.1 P: 936.7 P-NN: 1007.3
2014.02.11 08:29:57 4: eventTypes: I2C_BMP180 BMP085 T: 31.1 P: 936.7 P-NN: 1007.3 -> T: .* P: .* P-NN: .*
2014.02.11 08:29:57 4: eventTypes: I2C_BMP180 BMP085 temperature: 31.1 -> temperature: .*
2014.02.11 08:29:57 4: eventTypes: I2C_BMP180 BMP085 pressure: 936.7 -> pressure: .*
2014.02.11 08:29:57 4: eventTypes: I2C_BMP180 BMP085 pressure-nn: 1007.3 -> pressure-nn: .*
2014.02.11 08:29:59 5: >f0,73,01,08,f7
2014.02.11 08:29:59 5: SW: ?s?
2014.02.11 08:29:59 5: >f0,73,24,08,28,1e,19,2c,53,00,00,00,64,09,01,f7
2014.02.11 08:29:59 5: SW: ?s$(,Sd ?
2014.02.11 08:29:59 5: >f0,73,01,08,f7
2014.02.11 08:29:59 5: SW: ?s?
2014.02.11 08:29:59 5: >f0,73,2c,08,28,1e,19,2c,53,00,00,00,64,13,00,50,2b,40,2f,f7
2014.02.11 08:29:59 5: SW: ?s,(,SdP+@/?
2014.02.11 08:29:59 5: <f0,73,43,08,3a,05,7c,03,30,49,51,3f,7f,03,40,70,00,f7
2014.02.11 08:30:00 5: Triggering Temp2 (2 changes)
2014.02.11 08:30:00 5: Notify loop for Temp2 temperature: 7.9375
2014.02.11 08:30:00 4: eventTypes: OWTHERM Temp2 temperature: 7.9375 -> temperature: .*
2014.02.11 08:30:00 4: eventTypes: OWTHERM Temp2 T:  7.94 °C ? -> T:  .* °C ?


Sobald der Arduino nicht mehr erreichbar ist:
2014.02.11 08:49:57 5: Triggering BMP085 (4 changes)
2014.02.11 08:49:57 5: Notify loop for BMP085 T: 31.5 P: 936.7 P-NN: 1007.3
2014.02.11 08:49:57 4: eventTypes: I2C_BMP180 BMP085 T: 31.5 P: 936.7 P-NN: 1007.3 -> T: .* P: .* P-NN: .*
2014.02.11 08:49:57 4: eventTypes: I2C_BMP180 BMP085 temperature: 31.5 -> temperature: .*
2014.02.11 08:49:57 4: eventTypes: I2C_BMP180 BMP085 pressure: 936.7 -> pressure: .*
2014.02.11 08:49:57 4: eventTypes: I2C_BMP180 BMP085 pressure-nn: 1007.3 -> pressure-nn: .*
2014.02.11 13:46:22 1: Including fhem.cfg


Bin momentan bei der normalen OWX-Version, meine aber bei der async und nothread war es genau das gleiche Verhalten. Ich teste mal und überwache den Arduino jetzt mal per Dauermessung am Logicanalyzer, dann weiß ich wenigstens den genauen Zeitpunkt wann er aussteigt.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 11 Februar 2014, 17:38:28
hast Du auch irgendwo die Ausgabe des perl-prozesses selbst (zur Not von der Kommandozeile aus starten und diese offen lassen...)? Im Log steht ja nur, was geloggt werden soll, aber normalerweise nix, wenn FHEM abstürzt (das schreibt perl nach stdout).

Hab gestern und heute endlich mal 2 schön länger gesuchte Fehler im UIPEthernet gefixed:
1. sporadische Hänger nach wiederholtem client.close()
2. Fehlerhafte ARP-packete beim ersten Versenden von UDP.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 11 Februar 2014, 18:36:46
Nein,
leider noch nicht, leite stdout und stderr jetzt aber in eine Datei um damit ich beim nächsten mal mehr weiß.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 12 Februar 2014, 18:05:09
Ok,
hier mal der Auszug aus stdout:
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_OWCOUNT.pm line 1107.
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_OWCOUNT.pm line 1110.
Use of uninitialized value in concatenation (.) or string at ./FHEM/21_OWCOUNT.pm line 1111.
Use of uninitialized value $text in concatenation (.) or string at fhem.pl line 660.
Argument "" isn't numeric in sprintf at ./FHEM/21_OWCOUNT.pm line 550.
Argument "" isn't numeric in sprintf at ./FHEM/21_OWCOUNT.pm line 550.
Can't call method "packet_onewire_request" on an undefined value at FHEM/lib/Device/Firmata/Platform.pm line 744.


Dabei sind die letzten 3 Zeilen vor dem Fehler entstanden, die anderen beim ersten aufrufen von OWX.


Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 17 Februar 2014, 15:24:27
So,
die Version 1.5.5 der UIPEthernet scheint stabil zu laufen, nach einem Neustart von FHEM meldet sich der Arduino recht schnell wieder, hat sich seit 5 Tagen auch nicht mehr aufgehängt.
Allerdings habe ich immer noch das Problem Can't call method "packet_onewire_request" on an undefined value at FHEM/lib/Device/Firmata/Platform.pm line 744., FHEM stürzt mir deswegen fast täglich ab, versteh nur nicht was im an Value nicht passt.

Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: sackCfix am 19 Februar 2014, 18:18:26
Hier mal noch wie man stdout und stderr in eine Datei umleitet:
sudo service fhem start &> log.txt

Falls man auch noch Datum/Uhrzeit will:
sudo service fhem start &> >( while read line; do echo "$(date): $(line)"; done > log.txt)

Achja, mein Problem mit FHEM liegt klar an OWCOUNT, folgende Fehler habe ich:
-Use of uninitialized value in concatenation (.) or string at ./FHEM/21_OWCOUNT.pm line 1108
-Argument "" isn't numeric in sprintf at ./FHEM/21_OWCOUNT.pm line 550.
-Illegal division by zero at ./FHEM/21_OWCOUNT.pm line 490.


Andreas
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 19 Februar 2014, 20:14:00
Danke für die Info das kann ich gut gebrauchen

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Olly am 21 Februar 2014, 10:39:41
Hallo,

ich Teste zur Zeit auch einen Arduino mit Firmata. Zum Einsatz kommt bei mir ein Uno R3 mit Wiznet W5100 basierendem Ethernet-Shield.
Zuerst habe ich etwas mit 1-Wire getestet, aber da wurde FHEM auf meinem Raspberry zu undefinierten Zeiten beendet, meist klappte aber schon die Kommunikation mit dem Arduino nicht. Das mag vielleicht auch daran gelegen haben, dass ich ganz normal OWX verwendet habe und nicht die spezielle non-blocking Methode.
Aktuell habe ich einen LM335Z (Temperatursensor) an einem analogen Pin des Arduino. Was mir hier jetzt auffällt ist, dass ich im Sekunden-Takt die AD-Werte des Pins übermittelt bekomme. Kann man das Zeitintervall irgendwo konfigurieren, oder wird vom Arduino immer dann gesendet, wenn sich der gelesene Wert ändert??
Der gelesene Wert scheint mir auch zu hoch zu sein (entspricht ca. 30°C), was durch eine Eigenerwärmung durch das ständige Lesen des AD-Wertes zustande kommen könnte.

Weiterhin erhalte ich im FHEM-Log immer mal wieder die Meldung, dass das Firmata-Device disconnected und auf ein "reappear" gewartet wird, was dann auch geschieht. Ist das normal, oder gibt's hier auch noch ein Problem? Für Ethernet mit W5100 brauche ich ja nicht den UIPEthernet zu verwenden, richtig?

Hoffe ihr könnt mir ein wenig weiter helfen.

Gruß

     Olly
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 21 Februar 2014, 10:55:32
Zitat von: Olly am 21 Februar 2014, 10:39:41
Aktuell habe ich einen LM335Z (Temperatursensor) an einem analogen Pin des Arduino. Was mir hier jetzt auffällt ist, dass ich im Sekunden-Takt die AD-Werte des Pins übermittelt bekomme. Kann man das Zeitintervall irgendwo konfigurieren, oder wird vom Arduino immer dann gesendet, wenn sich der gelesene Wert ändert??

Du kannst FHEM sagen, das er nur alle X Sekunden auslesen soll z.B:
attr xx_Temperatur event-min-interval .*:540

.* heißt in dem Fall alle Werte und 540 sind die Sekunden (also alle 9min).
statt .* kannst du auch besstime Readings oder States angeben, dann wird alles andere immer ausgelesen und nur dieser eine Wert alle 9min.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: fhainz am 21 Februar 2014, 19:35:54
Hallo!

Ich schaffe es einfach nicht meine Arduino Mega per Lan in FHEM einzubinden. Via USB klappt alles wunderbar.
Wenn ich in meinen Router schaue wird der arduino mit der zugewiesenen ip als verbunden angeführt aber in fhem steht immer disconnected.
Ethernet Shield hab ich dieses hier (http://www.amazon.de/gp/product/B009N826DY/ref=oh_details_o00_s00_i00?ie=UTF8&psc=1)

Sketch:
/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/

/*
  Copyright (C) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
  Copyright (C) 2010-2011 Paul Stoffregen.  All rights reserved.
  Copyright (C) 2009 Shigeru Kobayashi.  All rights reserved.
  Copyright (C) 2009-2013 Jeff Hoefs.  All rights reserved.
  Copyright (C) 2013 Norbert Truchsess. All rights reserved.
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  See file LICENSE.txt for further informations on licensing terms.

  formatted using the GNU C formatting and indenting
*/


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

#include <SPI.h>
#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

//#include <UIPEthernet.h>

#if defined ethernet_h || defined UIPETHERNET_H
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#define NETWORK_FIRMATA
//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(10,0,0,40)
//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
#define local_ip IPAddress(10,0,0,56)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac
const byte mac[] = {0x90,0xA2,0xDA,0x0D,0x07,0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
#include <utility/ServoFirmata.h>
ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/I2CFirmata.h>
I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

#include <utility/StepperFirmata.h>
StepperFirmata stepper;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

#include <utility/FirmataScheduler.h>
FirmataScheduler scheduler;


// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif

#if defined AnalogInputFirmata_h || defined I2CFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif

// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
EthernetClient client;
#if defined remote_ip && !defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,remote_ip,NULL,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),remote_ip,NULL,remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,IPAddress(0,0,0,0),remote_host,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),IPAddress(0,0,0,0),remote_host,remote_port);
#endif
#endif
#endif

/*==============================================================================
* FUNCTIONS
*============================================================================*/

void systemResetCallback()
{
  // initialize a defalt state

  // pins with analog capability default to analog input
  // otherwise, pins default to digital output
  for (byte i=0; i < TOTAL_PINS; i++) {
    if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
      // turns off pullup, configures everything
      Firmata.setPinMode(i, ANALOG);
#endif
    } else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
      // sets the output to 0, configures portConfigInputs
      Firmata.setPinMode(i, OUTPUT);
#endif
    }
  }

#ifdef FirmataExt_h
  firmataExt.reset();
#endif
}

/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef local_ip
  Ethernet.begin((uint8_t*)mac,local_ip);  //start ethernet
#else
  Ethernet.begin((uint8_t*)mac); //start ethernet using dhcp
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);

#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
  /* analogWriteCallback is declared in AnalogWrite.h */
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif

  #ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
  firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
  firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
  firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
  firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
  firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
  firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
  firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
  firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
  firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
  firmataExt.addFeature(scheduler);
#endif
#endif
  /* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  // 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;

  // start up Network Firmata:
  Firmata.begin(stream);
#else
  // start up the default Firmata using Serial interface:
  Firmata.begin(57600);
#endif
  systemResetCallback();  // reset to default config
}

/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
  /* DIGITALREAD - as fast as possible, check for changes and output them to the
   * stream buffer using Firmata.write()  */
  digitalInput.report();
#endif

  /* STREAMREAD - processing incoming messagse as soon as possible, while still
   * checking digital inputs.  */
  while(Firmata.available()) {
    Firmata.processInput();
#ifdef FirmataScheduler_h
    if (!Firmata.isParsingMessage()) {
      goto runtasks;
    }
  }
  if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
  }

  /* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
   * 60 bytes. use a timer to sending an event character every 4 ms to
   * trigger the buffer to dump. */

#ifdef FirmataReporting_h
  if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    analogInput.report();
#endif
#ifdef I2CFirmata_h
    // report i2c data for all device with read continuous mode enabled
    i2c.report();
#endif
  }
#endif
#ifdef StepperFirmata_h
  stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip
  if (Ethernet.maintain())
    {
      stream.maintain(Ethernet.localIP());
    }
#endif
}


FHEM:
define FIRMATA FRM 10.0.0.56 3030 global
attr FIRMATA sampling-interval 1000
attr FIRMATA verbose 3


Die im Sketch angegebenen Server IP stimmt und in beiden Dateien steht der gleich port aber Verbindung kommt leider keine zustande.

Hat jemand eine Idee?

Grüße
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Olly am 21 Februar 2014, 19:55:22
Hallo fhainz,

ich glaube deine Firmata Definition ist nicht richtig, die Angabe der IP-Adresse ist zu viel. Ich habe das so definiert:


define FIRMATA FRM 3030 global


Gruß

      Olly
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: fhainz am 21 Februar 2014, 19:58:28
Danke!!
Das hab ich anscheinend übersehen. Nun funktionierst :)

Grüße
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 26 Februar 2014, 08:04:54
Zitat von: ntruchsess am 10 Februar 2014, 23:48:36
Ja, ich denke schon. Gegenüber der Version 1.01 ist u.a. dieser Fix in der UIPClient.connected() (https://github.com/ntruchsess/arduino_uip/commit/e12a4f6939b057b213089db05c863b62c9dd07e2)-methode reingekommen, der direkten Einfluss auf den Reconnect hat.

Hi Norbert,

Ich hab die neue Version vor ein paar Tagen in mein Arduino eingespielt und seit dem verbindet er sich auch direkt wieder wenn ich viel eingespielt habe.

Danke

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 26 Februar 2014, 18:35:50
Zitat von: ntruchsess am 01 Dezember 2013, 21:13:25Ich kann bei nächster Gelegenheit ein Attribut ins FRM_OUT einbauen, mit dem man die Semantik umdreht. Am Board wirst Du nicht ohne weiteres viel ändern können außer einen invertierenden Treiber vorzuschalten.

ich habe in FRM_IN und FRM_OUT ein neues Attribut 'activeLow' eingebaut (https://github.com/ntruchsess/fhem-mirror/commit/63ea88447d8b90a50dc12c7b0e8a9f66399d566d), das genau dieses tut.

Der Patch ist ins fhem-SVN committed.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 26 Februar 2014, 18:42:51
Zitat von: strauch am 21 Februar 2014, 10:55:32Du kannst FHEM sagen, das er nur alle X Sekunden auslesen soll z.B:
attr xx_Temperatur event-min-interval .*:540

FRM hat dafür das Attribut 'sampling-interval' (http://fhem.de/commandref.html#FRM).

Das hat den Vorteil, dass nicht unnötig viel Daten über die Leitung geschickt werden, die FRM alle empfangen und prozessieren muss, bevor FHEM sie wieder verwirft. 'sampling-interval' ist aber nur global für alle Analog-Pins des Arduinos gemeinsam zu setzen. Wenn man unterschiedliche Intervalle für die Pins benötigt, muss man 'sampling-interval' auf den kleinsten benötigten Wert setzen und die anderen Pins mit 'event-min-interval' passend reduzieren. Natürlich mit der Einschränkung, dass die events nur bei einem Vielfachen des sampling-intervals getriggert werden können, weil zwischendurch ja keine Firmata-messages eintreffen.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 03 März 2014, 18:42:48
Hallo,

ich habe jetzt (endlich) meinen Versuchsaufbau am Laufen. Seit 2 Tagen läuft bei mir ein Arduino Nano mit einem ENC28J60 Shield, Firmata mit IN/OUT und 1-Wire. Angeschlossen sind Relais und Eingangsschaltungen für 24V/220V und momentan 1 DS18B20 und der alternative DS2423 Counter für meinen Gaszähler.

Der Arduino Sketch ist mit dem UIP Ver. 1.55 kompiliert. Reconnectprobleme beim Aufbau durch Ein/Ausschalten und Netzwerkleitung ziehen gab es nicht. Auf dem RPi auf der Konsole bekomme ich nur ab und zu die Fehlermeldung
ZitatArgument "" isn't numeric in subtraction (-) at ./FHEM/21_OWCOUNT.pm line 445.
Die FHEM Module sind mit Update auf dem Stand von gestern.

Auch wenn dies vielleicht niemand interessiert, aber die meisten Beiträge sind doch nur Probleme und da will ich auch mal eine positive Rückmeldung schreiben.

Viele Grüße
Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 03 März 2014, 18:56:42
Hallo,

schon wieder ich  :(

jetzt habe ich mir doch mal die Zeile vom Fehler angesehen (443-445):
      #-- only if attribute value mode=daily, take the midnight value from memory
      if( $daily == 1){
        $vval = int( (($hash->{owg_val}->[$i] + $offset)*$factor - $hash->{owg_midnight}->[$i])*10000+0.5)/10000;

Ich habe daily konfiguriert und den Fehler
ZitatArgument "" isn't numeric in subtraction (-) at ./FHEM/21_OWCOUNT.pm line 445.
habe ich "nur" bei der Inbetriebnahme gesehen (danach habe ich die Konsole geschlossen). Kann es evtl. sein, das die Variable {owg_midnight} so lange keinen Wert hat, bis einmal Mitternacht war und deswegen der Fehler auftaucht?

Viele Grüße
Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Wzut am 03 März 2014, 19:35:36
@Achim , http://forum.fhem.de/index.php/topic,18662.0.html ab Post #33 :)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Lorenz am 14 März 2014, 19:27:31
Hallo zusammen,

ich habe den Nano mit Firmata seit Gestern mit dem Ethernetshield ENC28J60 eingebunden (vorher über USB am Raspi).

Testweise habe ich nur Folgendes in fhem.cfg:

define hwr_Arduino FRM 3030 global
attr hwr_Arduino room HWR
define hwr_Gaszaehler_Reedkontakt FRM_IN 3
attr hwr_Gaszaehler_Reedkontakt IODev hwr_Arduino
attr hwr_Gaszaehler_Reedkontakt event-on-change-reading .*
attr hwr_Gaszaehler_Reedkontakt internal-pullup on
attr hwr_Gaszaehler_Reedkontakt room HWR
attr hwr_Gaszaehler_Reedkontakt stateFormat reading


Nach einem Restart erhalte ich folgende Einträge im logfile:
2014.03.14 18:47:48 4: Connection accepted from FRM:192.168.178.90:1036
2014.03.14 18:47:48 5: >ff
2014.03.14 18:47:48 5: SW: �
2014.03.14 18:47:51 3: querying Firmata Firmware Version
2014.03.14 18:47:51 5: >f0,79,f7
2014.03.14 18:47:51 5: SW: �y�
2014.03.14 18:47:51 5: <f0,79,02,05,43,00,6f,00,6e,00,66,00,69,00,67,00,75,00,72,00,61,00,62,00,6c,00,65,00,46,00,69,00,72,00,6d,00,61,00,74,00,61,00,74,00,65,00,73,00,74,00,2e,00,69,00,6e,00,6f,00,f7
2014.03.14 18:47:51 3: Firmata Firmware Version: ConfigurableFirmatatest.ino V_2_05
2014.03.14 18:47:51 5: >f0,69,f7
2014.03.14 18:47:51 5: SW: �i�
2014.03.14 18:47:51 5: >f0,6b,f7
2014.03.14 18:47:51 5: SW: �k�
2014.03.14 18:47:51 5: <f0,71,55,00,6e,00,68,00,61,00,6e,00,64,00,6c,00,65,00,64,00,20,00,73,00,79,00,73,00,65,00,78,00,20,00,63,00,6f,00,6d,00,6d,00,61,00,6e,00,64,00,f7,f0,6c,7f,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,7f,7f,7f,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,00,01,01,01,07,01,7f,7f,7f,f7
2014.03.14 18:47:51 3: received String_data: Unhandled sysex command
2014.03.14 18:47:51 5: Triggering FRM:192.168.178.90:1036 (1 changes)
2014.03.14 18:47:51 5: Notify loop for FRM:192.168.178.90:1036 error: Unhandled sysex command
2014.03.14 18:47:53 5: >f0,7a,68,07,f7
2014.03.14 18:47:53 5: SW: �zh�
2014.03.14 18:47:53 5: >f4,03,00
2014.03.14 18:47:53 5: SW: �
2014.03.14 18:47:53 5: >d0,01
2014.03.14 18:47:53 5: SW: �
2014.03.14 18:47:53 5: >90,08,00
2014.03.14 18:47:53 5: SW: �
2014.03.14 18:47:53 5: >d0,01
2014.03.14 18:47:53 5: SW: �


Das unhandled sysex command kann ich nicht nachvollziehen. Kann da jemand helfen?

Alle notwendigen Files habe ich gestern aus github aktualisiert.

Gestern blieb der Arduino listening, nach dem heutigen Update von FRM kommt Initialized.

Die In-Funktion vom FRM funktionierte aber und funktioniert auch jetzt. 1-wire habe ich noch nicht getestet. Fhem läuft stabil.

Allerdings bleibt der Arduinio auch Initialized, wenn das LAN abgetrennt ist.

Das Handling von Pin 4 und 10 habe ich bislang nicht verändert. Muss ich beim Nano da etwas tun ?

Viele Grüße

Lorenz
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 14 März 2014, 23:31:30
Zitat von: Lorenz Gruschka am 14 März 2014, 19:27:31
Allerdings bleibt der Arduinio auch Initialized, wenn das LAN abgetrennt ist.

Das ist aktuell so, wenn nichts über die Leitung geht wird ein stilles Verschwinden des Arduinos erst mal nicht bemerkt. In diesem Thread (http://forum.fhem.de/index.php/topic,21022.0.html) habe ich ein paar Worte zur Grundsätzlchen Problematik geschrieben. Man müste (auch wenn eigentlich nix ansteht) regelmäßig ein Kommando mit definierter Antwort absetzen um zu bemerken, dass der Arduino garade nicht erreichbar ist.

Zitat von: Lorenz Gruschka am 14 März 2014, 19:27:31
Das Handling von Pin 4 und 10 habe ich bislang nicht verändert. Muss ich beim Nano da etwas tun ?
Pin 4 braucht keine Sonderbehandlung beim Nano (da hängt beim Standard-ethernet-shield CS des SD-kartenlesers dran). Wenn Du CS an Pin 10 angeschlossen hast, braucht außer der per 'IS_PIN_SPI()' ausgeschlossenen Pins nichts berücksichtigt werden.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: woody am 31 März 2014, 20:50:23
Hallo,
ich hab da ein Problem.
Habe auf meinem Arduino die aktuelle configurable_firmata drauf. IP des Raspi auf dem Fhem läuft 192.168.0.19, Port 3040, eigene IP
des Arduino 192.168.0.25.
Ich bekomme keine Kommunikation mit dem Arduino hin. Ich kann ihn nicht pingen. Raff net wodran es noch liegen kann. Kabel hab ich auch schon getauscht. Kann es an der firmata liegen? Habe im seriellen Monitor komische Zeichen, oder ist das normal? 
" ùðy ConfigurableFirmata.ino ÷"

Die fhem.cfg sieht so aus:

#Firmata
define Arduino FRM 3040 global
attr Arduino room Arduino
#
define A1 FRM_AD 15
attr A1 IODev Arduino
attr A1 event-min-interval 1
attr A1 room Arduino
attr A1 stateFormat reading
attr A1 verbose 5
#
define RGB FRM_RGB 3 5 6
attr RGB IODev Arduino
attr RGB room Arduino
attr RGB webCmd rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:toggle:on:off

define LCD1 FRM_LCD I2C 16 2 63
attr LCD1 IODev Arduino
attr LCD1 autoBreak on
attr LCD1 autoClear on
attr LCD1 room Arduino
attr LCD1 stateFormat text

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 März 2014, 20:54:38
Poste bitte auch mal den Sketch vom Arduino.

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: woody am 31 März 2014, 20:59:41
Hallo Strauch,
anbei die ino.........

viele Grüße
woody

/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/

/*
  Copyright (C) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
  Copyright (C) 2010-2011 Paul Stoffregen.  All rights reserved.
  Copyright (C) 2009 Shigeru Kobayashi.  All rights reserved.
  Copyright (C) 2009-2013 Jeff Hoefs.  All rights reserved.
  Copyright (C) 2013 Norbert Truchsess. All rights reserved.
  Copyright (C) 2014 Nicolas Panel. All rights reserved.
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  See file LICENSE.txt for further informations on licensing terms.

  formatted using the GNU C formatting and indenting
*/


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

//#include <SPI.h>
//#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

//#include <UIPEthernet.h>

#if defined ethernet_h || defined UIPETHERNET_H
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#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,0,19)
//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 3040
//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp
#define local_ip IPAddress(192,168,0,25)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac
const byte mac[] = {0x90,0xA2,0xDA,0x0D,0x07,0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

//#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/I2CFirmata.h>
I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;

//#include <utility/FirmataExt.h>
//FirmataExt firmataExt;

//#include <utility/FirmataScheduler.h>
//FirmataScheduler scheduler;

//#include <utility/EncoderFirmata.h>
//EncoderFirmata encoder;


// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif

#if defined AnalogInputFirmata_h || defined I2CFirmata_h || defined EncoderFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif

// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
EthernetClient client;
#if defined remote_ip && !defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,remote_ip,NULL,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),remote_ip,NULL,remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,IPAddress(0,0,0,0),remote_host,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),IPAddress(0,0,0,0),remote_host,remote_port);
#endif
#endif
#endif

/*==============================================================================
* FUNCTIONS
*============================================================================*/

void systemResetCallback()
{
  // initialize a defalt state

  // pins with analog capability default to analog input
  // otherwise, pins default to digital output
  for (byte i=0; i < TOTAL_PINS; i++) {
    if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
      // turns off pullup, configures everything
      Firmata.setPinMode(i, ANALOG);
#endif
    } else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
      // sets the output to 0, configures portConfigInputs
      Firmata.setPinMode(i, OUTPUT);
#endif
    }
  }

#ifdef FirmataExt_h
  firmataExt.reset();
#endif
}

/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef local_ip
  Ethernet.begin((uint8_t*)mac,local_ip);  //start ethernet
#else
  Ethernet.begin((uint8_t*)mac); //start ethernet using dhcp
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);

#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
  /* analogWriteCallback is declared in AnalogWrite.h */
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif

  #ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
  firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
  firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
  firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
  firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
  firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
  firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
  firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
  firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
  firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
  firmataExt.addFeature(scheduler);
#endif
#ifdef EncoderFirmata_h
  firmataExt.addFeature(encoder);
#endif
#endif
  /* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  // 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;

  // start up Network Firmata:
  Firmata.begin(stream);
#else
  // start up the default Firmata using Serial interface:
  Firmata.begin(57600);
#endif
  systemResetCallback();  // reset to default config
}

/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
  /* DIGITALREAD - as fast as possible, check for changes and output them to the
   * stream buffer using Firmata.write()  */
  digitalInput.report();
#endif

  /* STREAMREAD - processing incoming messagse as soon as possible, while still
   * checking digital inputs.  */
  while(Firmata.available()) {
    Firmata.processInput();
#ifdef FirmataScheduler_h
    if (!Firmata.isParsingMessage()) {
      goto runtasks;
    }
  }
  if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
  }

  /* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
   * 60 bytes. use a timer to sending an event character every 4 ms to
   * trigger the buffer to dump. */

#ifdef FirmataReporting_h
  if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    analogInput.report();
#endif
#ifdef I2CFirmata_h
    // report i2c data for all device with read continuous mode enabled
    i2c.report();
#endif
#ifdef EncoderFirmata_h
    // report encoders positions if reporting enabled.
    encoder.report();
#endif
  }
#endif
#ifdef StepperFirmata_h
  stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip
  if (Ethernet.maintain())
    {
      stream.maintain(Ethernet.localIP());
    }
#endif
}

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Lorenz am 31 März 2014, 21:09:34
Man muss die passende lib für Ethernet einbinden - d.h den Kommentar beim include deaktivieren


Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 März 2014, 21:09:47
Du hast die Ethernet Librarys noch aus kommentiert je nachdem was für ein Shield du hast musst eines aus kommentieren.

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 31 März 2014, 21:10:27
Misst ist iOS doch schneller als Android ;-)

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Lorenz am 31 März 2014, 21:11:33
war aber knapp
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: woody am 31 März 2014, 21:25:56
Danke für die sich überschlagenden Antworten... ;)

Ich hab das auch bemerkt, wer lesen kann ist klar im Vorteil,
allerdings wenn ich das auskommentiere für spi und etherner , dann kommt eine Fehlermeldung im sketch " Firmata begin (stream) ;  > Stream was not declared in this scope

Ich habe vor der Veränderung erstmal kompilieren lassen, danach ip usw angepasst und dann kommt der Fehler.
Habe das ganze Firmata verzeichniss gelöscht und neu eingefügt aus dem aktuellen Branch.
Trotzdem der Fehler.

>:(

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 31 März 2014, 21:33:42
Compilierst du mit der Arduino-IDE? Stream gehört ja zum Arduino-core, das sollte eigentlich nicht fehlen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: woody am 01 April 2014, 06:33:35
Guten Morgen,
Ja ich benutze die IDE 1.05 R2. Ganz normal installiert. Muss die Ethernet.h im Verzeichnisse
.von firmata stehen oder wird die über Pfade gezogen? Vielleicht ist es ja die falsche.
Wi kann ich das feststellen?

Fragen über Fragen.

Viele Grüße Woody
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 01 April 2014, 11:01:11
Die Firmata Library muss in den Library Ordner, dort wo auch die Sketche liegen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 April 2014, 12:10:39
Die ConfigurableFirmata-library muss die mit der IDE ausgelieferte Firmata-version ersetzen (https://github.com/firmata/arduino/tree/configurable#updating-firmata-in-the-arduino-ide). Einfach in den libraries-folder bei den Sketches packen führt daszu, dass die Library 2 mal installiert ist.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 April 2014, 12:16:17
Zitat von: woody am 01 April 2014, 06:33:35Muss die Ethernet.h im Verzeichnisse von firmata stehen oder wird die über Pfade gezogen?
nein, die Ethernet.h ist Bestandteil der IDE (im libraries-folder der IDE, Directory 'Ethernet').
Zitat von: woody am 01 April 2014, 06:33:35Wi kann ich das feststellen?
In den Einstellungen der IDE kannst Du 'Ausführliche Ausgabe anzeigen während [X] Compilierung' anstellen, dann siehst Du welche Verzeichnisse die IDE in den Compilevorgang einbindet. Die IDE 1.0.x kopiert alles zum Compilieren in einen temp-folder, wenn da mal was drinliegt, was aktuell nicht reingehört, dann kann das zu Compililierfehlern führen - in diesem Fall reicht es das Board in den IDE-settings (Unter 'Tools') zu wechseln, 1x compilieren und wieder zum richtigen Board zurückzustellen. Bei jedem Wechsel des Boards werden alle Library-dateien neu ins temp-Verzeichnis kopiert.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: woody am 02 April 2014, 08:37:09
Hallo Ihr lieben Helferlein........
der Fehler mit dem stream lässt sich reproduzieren ,wenn in der .ino

#define remote_ip IPAddress(192,168,0,17)
//replace with hostname of server you want to connect to, comment out if using 'remote_ip'
//#define remote_host "server.local"

die IP eingetragen ist, aber der hostname nicht auskommentiert ist.

Vielen Dank an alle....

Hab noch ne kleine Frage:
Wie kann ich den Analogwerten 0-5V  z.B. 0-6000 Liter zuordnen. Gibts da ein tutorial wo sowas zusammnegefasst steht? 

VG
Woody
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 02 April 2014, 13:35:57
das ist kein Fehler, das ist so gewollt: wenn Du sowohl remote_host, als auch remote_ip configuriert hast ist nicht mehr eindeutig definiert, wie der Arduino eigentlich verbinden soll. Die Meldung die dann kommt, ist eigentlich unzweideutig:

ConfigurableFirmata.ino:126:2: error: #error "cannot define both remote_ip and remote_host at the same time!"
ConfigurableFirmata.ino: In function 'void setup()':
ConfigurableFirmata:253: error: 'stream' was not declared in this scope


Man muss sie nur komplett lesen oder ersatzweise komplett posten, nicht nur die letzte Zeile
Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 12 August 2014, 20:19:48
Hallo zusammen,

ich bekomme das ENC28J60 auf meinem mega nicht zum laufen er sagt firmata inizialized und
FRM:192.168.1.116:1028 Connected
Aber: Unhandled sysex command

Wenn ich einen Ausgang schlten möchte kommt nur Firmata_11 no IODev assigned at ./FHEM/10_FRM.pm line 591.
Habe alles auf neustem Stand stabile stromversorgeung ip ist pingbar dieverse arduino sketchvarianten durchprobiert alles ohne Erfolg.
Ich weis nichtmehr wo ich suchen soll, Hardware habe ich durchgemessen.
Kann mir jemand einen Tip geben?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 13 August 2014, 17:46:45
Zitat von: matthias soll am 12 August 2014, 20:19:48
Aber: Unhandled sysex command

Schau noch mal in Deinen Sketch: Für FRM_IN dürfen FirmataExt und FirmataReporting in der ConfigurableFirmata nicht auskommentiert sein.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 13 August 2014, 17:59:19
Hallo Norbert,
danke für deine Hilfe, ist aber nichts auskmmentiert.
Nur Stepper,Servo und analog in und out sind auskommentiert.
Wollte das sketch auch schon auf meinem uno testen habe es aber aus platzgründen nich kompilieren können. :-[
Soll ich eher beim sketch suchen oder kann es auch an fhem liegen?
Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 13 August 2014, 18:10:00
Unhandled SysexCommand sagt schon mal unzweideutig, dass die Netzwerkverbindung zum Arduino bidirektional funktioniert.
No IODev Assigned wäre typischerweise ein FHEM-seitiges Konfigurationsproblem.

Poste mal die Internals vom FRM und FRM_IN device.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 13 August 2014, 18:33:37
ok mir war grade aufgefallen dass ich pinmode nicht für den mega angepasst hatte, das hat aber auch nichts geändert.
Hier die Internals:

FIRMATA Initialized
CONNECTS 1
DEF    3030 global
DeviceName 3030
FD 4
NAME FIRMATA
NOTIFYDEV global
NR 44
NTFY_ORDER 50-FIRMATA
PORT 3030
STATE Initialized
TYPE FRM
firmware ConfigurableFirmata.ino
firmware_version V_2_06


FRM:192.168.1.116:1030 Connected
Internals
BUF   
DeviceName 3030
FD 12
NAME FRM:192.168.1.116:1030
NR 380
SNAME FIRMATA
STATE Connected
TEMPORARY 1
TYPE FRM

Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 13 August 2014, 20:05:33
hallo,
irgendwas ist mit den sketch oder der hardware falsch.
Ich habe jetzt meinen UNO mit 5100 shield sofort zum laufen gebracht.
Jetzt zeigt er mir alle pins an,
aber trotzdem: Unhandled sysex command und Firmata_13 no IODev assigned at ./FHEM/10_FRM.pm line 591.
Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 15 August 2014, 13:02:33
UIPEthernet braucht deutlich mehr Speicher, daher kann man auf einem Uno nicht alle Features gleichzeitig nutzen (z.B. geht I2C und 1Wire nicht zusammen, der Uno stürzt dann ab).

Steht das define des Firmata_13 denn nach dem FRM-device in der fhem.cfg oder davor? Hast Du das IODev-attribut schon mal manuell hinzugefügt?

(Übrigens, wenn Du möchtest, dass Dir jemand zielgerichtet hilft, dann braucht der alle(!) Informationen. Also den Sketch, so wie Du Ihn benutzt, genaue Versionsangabe oder Angabe des commits der UIPEthernet-lib und der ConfigurableFirmata, SVN-revision vom FHEM (bzw. aller beteiligter Files) und die komplette relevante Konfiguration (d.h. eine minimale fhem.cfg mit der das beschriebene Problem nachzuvollziehen ist. Ohne diese Information kann man am anderen Ende des Forums auch nur raten)

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 17 August 2014, 17:10:27
Hallo Norbert,
DANKE!!!
Jetzt habe ich es geschafft, ich habe das Sketch nur minimal angepasst (nur IP´s und Pin eingestellt und sonst nichts geändert).
Platz ist auf dem Mega ja genug.
Und in meiner fhem.cfg das attribut FIRMATA gestezt.

define FIRMATA FRM 3030 [global]

define Firmata_13 FRM_OUT 13
attr Firmata_13 IODev FIRMATA

Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: fetzz am 22 August 2014, 22:04:10
Hallo Zusammen.

Ich verzweifel gerade daran meinen Arduino Nano clone mit einem ENC28J60 Ethernet shield ans laufen zu bekommen.

Was bisher geschah...
Setup:
- IDE 1.0.5.-r2
- Arduino Nano clone v3 (Dieses hier... (http://www.ebay.com/itm/New-Pro-Mini-atmega328-5V-16M-Replace-ATmega128-Arduino-Compatible-Nano-/200957063666?pt=LH_DefaultDomain_0&hash=item2ec9f971f2))
- ENC28J60 Ethernet shield (Dieses hier.. (http://www.ebay.com/itm/ENC28J60-Ethernet-Shield-for-Arduino-Nano-3-0-RJ45-Webserver-Module-/400389806489))
- Netzwerk 192.168.178.0

Folgender Sketch wurde in den Nano geladen:


/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/

/*
  Copyright (C) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
  Copyright (C) 2010-2011 Paul Stoffregen.  All rights reserved.
  Copyright (C) 2009 Shigeru Kobayashi.  All rights reserved.
  Copyright (C) 2009-2013 Jeff Hoefs.  All rights reserved.
  Copyright (C) 2013 Norbert Truchsess. All rights reserved.
  Copyright (C) 2014 Nicolas Panel. All rights reserved.
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  See file LICENSE.txt for further informations on licensing terms.

  formatted using the GNU C formatting and indenting
*/


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

//#include <SPI.h>
//#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

#include <UIPEthernet.h>

#if defined ethernet_h || defined UIPETHERNET_H
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#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,33)
//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
#define local_ip IPAddress(192,168,178,44)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac
const byte mac[] = {0x90,0xA2,0xDA,0x0D,0x07,0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
//#include <utility/I2CFirmata.h>
//I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

//#include <utility/FirmataScheduler.h>
//FirmataScheduler scheduler;

//#include <utility/EncoderFirmata.h>
//EncoderFirmata encoder;


// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif

#if defined AnalogInputFirmata_h || defined I2CFirmata_h || defined EncoderFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif

// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
EthernetClient client;
#if defined remote_ip && !defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,remote_ip,NULL,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),remote_ip,NULL,remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,IPAddress(0,0,0,0),remote_host,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),IPAddress(0,0,0,0),remote_host,remote_port);
#endif
#endif
#endif

/*==============================================================================
* FUNCTIONS
*============================================================================*/

void systemResetCallback()
{
  // initialize a defalt state

  // pins with analog capability default to analog input
  // otherwise, pins default to digital output
  for (byte i=0; i < TOTAL_PINS; i++) {
    if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
      // turns off pullup, configures everything
      Firmata.setPinMode(i, ANALOG);
#endif
    } else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
      // sets the output to 0, configures portConfigInputs
      Firmata.setPinMode(i, OUTPUT);
#endif
    }
  }

#ifdef FirmataExt_h
  firmataExt.reset();
#endif
}

/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef local_ip
  Ethernet.begin((uint8_t*)mac,local_ip);  //start ethernet
#else
  Ethernet.begin((uint8_t*)mac); //start ethernet using dhcp
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);

#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
  /* analogWriteCallback is declared in AnalogWrite.h */
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif

  #ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
  firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
  firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
  firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
  firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
  firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
  firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
  firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
  firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
  firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
  firmataExt.addFeature(scheduler);
#endif
#ifdef EncoderFirmata_h
  firmataExt.addFeature(encoder);
#endif
#endif
  /* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  // 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;

  // start up Network Firmata:
  Firmata.begin(stream);
#else
  // start up the default Firmata using Serial interface:
  Firmata.begin(57600);
#endif
  systemResetCallback();  // reset to default config
}

/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
  /* DIGITALREAD - as fast as possible, check for changes and output them to the
   * stream buffer using Firmata.write()  */
  digitalInput.report();
#endif

  /* STREAMREAD - processing incoming messagse as soon as possible, while still
   * checking digital inputs.  */
  while(Firmata.available()) {
    Firmata.processInput();
#ifdef FirmataScheduler_h
    if (!Firmata.isParsingMessage()) {
      goto runtasks;
    }
  }
  if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
  }

  /* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
   * 60 bytes. use a timer to sending an event character every 4 ms to
   * trigger the buffer to dump. */

#ifdef FirmataReporting_h
  if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    analogInput.report();
#endif
#ifdef I2CFirmata_h
    // report i2c data for all device with read continuous mode enabled
    i2c.report();
#endif
#ifdef EncoderFirmata_h
    // report encoders positions if reporting enabled.
    encoder.report();
#endif
  }
#endif
#ifdef StepperFirmata_h
  stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip
  if (Ethernet.maintain())
    {
      stream.maintain(Ethernet.localIP());
    }
#endif
}


Kompilieren,hochladen klappt fehlerfrei.
Allerdings meldet sich der Nano nicht im Netzwerk an.
Reagiert nicht auf Ping, taucht nicht bei aktiven Netzwerkgeräten in der Fritzbox auf.

Anmerkung:
Die Beispiele "Advanced Chat Server" und "Echo Server" kann ich hochladen und sie funktionieren einwandfrei. Das heisst ein Hardwarefehler sowie Netzwerkfehler kann ich ausschließen.
Ich habe sogar aus Verzweifelung IDE deinstalliert und neugezogen. Die Ordner Firmata und UIPEthernet erneut geändert/hinzugefügt.
Der Fehler ist mitgewandert...


Ich weiss nicht mehr wie ich weiter suchen soll.

Wer kann mir helfen?

Danke

Grüße
fetzz
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 01 September 2014, 09:33:53
Hallo fetzz

Abgesehen davon, dass Dein verlinkter Arduino kein nano V3 ist (sondern ein 'mini pro) sieht das ganze eigentlich korrekt aus.
So wie es im Sketch konfiguriert ist muss dein FHEM-server die 192.168.178.33 haben, port 3030 (tcp) darf nicht von einer Firewall geblockt werden (ggf. von einem anderen Rechner aus mit 'telnet 192.168.178.33:3030' prüfen, ob man verbinden kann).
Das FRM device muss mit 'define <name> FRM 3030 global' definiert werden (das 'global' ist wichtig, <name> ist frei wählbar).

kann es sein, dass Dein nano einen ATmega168 hat (und keinen ATmega328)? So einen 168 nano hab ich mir auch mal aus versehen gekauft, der hat nicht genug Speicher für die ConfigurableFirmata mit ENC28J60, für die Beispiele von UIPEthernet sollte es aber gerade so langen.

In der Fritzbox wird der Arduino nicht auftauchen, wenn er eine feste ip-addresse hat - er meldet sich dann ja nicht per DHCP an. Ping sollte aber trotzden gehen.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: fetzz am 01 September 2014, 20:43:32
Hallo Norbert,

Vielen Dank für deine Antwort.
In der Tat ist die Verlinkung fehlerhaft. Hier ist mein Model (http://www.ebay.com/itm/Mini-USB-Nano-V-4-0-3-0-ATmega328-5V-16M-Micro-controller-board-For-Arduino-/161282080431?pt=LH_DefaultDomain_0&hash=item258d293eaf)

Der FHEM-Server antwortet, wenn ich eine Putty-Session auf Port 3030 starte ( kryptische Zeichen werden wiedergegeben).

Das Device ist auch definiert worden.
define FIRMATA FRM 3030 global
Allerdings bleibt es im FHEM auf disconnect, der Port wird dann ja wieder geschlossen.

In der Fritzbox tauchen meine anderen Geräte mit fester IP auf, allerdings lässt sich der Arduino mit dem im vorherigen Post aufgeführten Sketch nicht anpingen.
Auch ein Trace mit Wireshark brachte keine Erleuchtung, das Gerät meldet sich einfach nicht im Netzwerk.

Was mir aufgefallen ist, dass die LED (on Board, PIN 13) schwach leuchtend schnell flackert.

Ich habe das ganze auch mit einem zweiten Arduino ausprobiert,das Verhalten ist mit beiden Geräten gleich.

Hast Du noch ein heißen Tipp, wo man den Fehler suchen könnte?

Grüße
Holger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: hollyghost am 23 September 2014, 13:16:29
Hallo fetzz,
bist du weiter / zum Ziel gekommen?
Ich habe hier ein ähnliches Setup (gleicher Nano Clone allerdings nen anderen ENC28J60 (http://www.ebay.de/itm/ENC28J60-Ethernet-LAN-Netzwerk-Modul-Arduino-RJ45-SPI-CP01001-A44-/271513579521?pt=Wissenschaftliche_Ger%C3%A4te&hash=item3f37787001"%20class="bbc_link"%20target="_blank"))
Bevor ich hier das Basteln anfange, wollte ich natürlich so viel als möglich an Informationen zusammen haben und da hätte mich dein Ergebnis mit dieser Hardware interessiert.
Grüße
Holger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Wzut am 24 September 2014, 13:36:00
@hollyghost , die ENC Module von Eckstein kannst du verwenden ( habe davon selbst  2 Stück mit Firmata und einen Arduino Clone am Start )
Allerdings bitte daran denken das diese Module nur 3,3V haben. Manche Leute behaupten die SPI Eingänge seinen trotzdem 5V tolerant , andere verbauen zusätzliche 5V/3,3V  Spannungsteiler bzw. ich lasse die beiden Arduinos komplett mit 3,3V laufen. 
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: hollyghost am 24 September 2014, 21:22:43
Hallo Wzut,
Danke für deine Antwort - dann werde ich mich mal dran machen :)
Mal sehen, ob sich der Nano über die USB-Buchse mit 3V3 versorgen lässt.
Grüße
Holger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: fetzz am 20 Oktober 2014, 08:51:21
Hallo Hollyghost (Holger),

Ich bin mit dem Setup nicht weiter gekommen, ich habe mir eine w5100 Netzwerkkarte zugelegt. Damit funktioniert es einwandfrei  >:(
das ganze Thema lege ich erst mal ganz unten auf meinen to-do Stapel, bis ich wieder Muse für das Thema habe.

Grüße
Holger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: hollyghost am 22 Oktober 2014, 10:02:43
Hallo fetzz,
Danke für die Antwort - diese Erfahrung habe ich leider auch schon bei anderen'Projekten' gesammelt [emoji4]
Bei Firmata bin ich allerdings recht zuversichtlich was den ENC betrifft.
Im Moment liegt dieses Vorhaben aber auf Eis, da meine Family endlich ihre Rollläden automatisch gesteuert haben will.... Das geht natürlich vor. Deshalb muss hier erst noch eine Platine fertig gemacht werden, dass sie zum 'Ätzer' kommt. Ich halte euch auf dem Laufenden.
Grüße
Holger
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 22 Oktober 2014, 11:49:21
Zitat von: fetzz am 01 September 2014, 20:43:32
Was mir aufgefallen ist, dass die LED (on Board, PIN 13) schwach leuchtend schnell flackert.
Ich habe das ganze auch mit einem zweiten Arduino ausprobiert,das Verhalten ist mit beiden Geräten gleich.
Hast Du noch ein heißen Tipp, wo man den Fehler suchen könnte?

Hallo Holger,

Du hast vermutlich zu viele Features im Sketch dringelassen, dann reicht das RAM nicht und der Arduino geht in einen Boot-loop. Streich mal testweise alles außer Digital/Analog-I/O und 1-Wire weg. I2C + 1-Wire geht z.B. nicht zusammen mit UIPEthernet auf einem Mega328p - läßt sich zwar flashen, läuft aber nicht. Die WIZ5100-basierte Ethernet-lib braucht weniger RAM (da macht der Chip das TCP, die Library reicht nur noch durch).

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Samsi am 23 Oktober 2014, 20:44:15
Hi,

ich komme uahc einfach nicht weiter.

Arduino UNO mit ENC28J60:

CONNECTS 3
DEF    3030 global
DeviceName 3030
FD 4
NAME FIRMATA
NOTIFYDEV global
NR 28
NTFY_ORDER 50-FIRMATA
PORT 3030
STATE Initialized
TYPE FRM
firmware ConfigurableFirmata.ino
firmware_version V_2_06

Da die Firmware_version angezeigt wird, vermute ich mal die Kommunikation stimmt soweit, oder?
Außerdem geht CONNECTS jedes mal um einen Zähler weiter, wenn ich den Arduino neu einschalte.
Ich kann den Arduino auch anpingen. Er holt sich seine IP per DHCP, was auch funktioniert. ER erscheint in der FritzBox.


Das eigentliche Problem ist der Input Pin:

DEF    5
IODev FIRMATA
NAME Firmata_IN
NR 29
PIN 5
STATE reading
TYPE FRM_IN

STATE zeigt immer reading an. Trotz  attr verbose 5 bekomme ich keine Einträge im Logfile


Hier noch die Arduino Config:



//#include <SPI.h>
//#include <Ethernet.h>

#include <UIPEthernet.h>

#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#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,0,6)
//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,0x0D,0x07,0x02};
#endif


//#include <utility/DigitalInputFirmata.h>
//DigitalInputFirmata digitalInput;

//#include <utility/DigitalOutputFirmata.h>
//DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
//#include <utility/I2CFirmata.h>
//I2CFirmata i2c;

//#include <utility/OneWireFirmata.h>
//OneWireFirmata oneWire;

//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;

//#include <utility/FirmataExt.h>
//FirmataExt firmataExt;

//#include <utility/FirmataScheduler.h>
//FirmataScheduler scheduler;

//#include <utility/EncoderFirmata.h>
//EncoderFirmata encoder;




Der Sketch compiliert unter IDE 1.0.5 , allerdings bekomme ich auch einige Warnings, z.B:

In file included from C:\Program Files (x86)\Arduino\libraries\UIPEthernet\Dhcp.cpp:8:
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\/utility/util.h:5:1: warning: "ntohs" redefined
In file included from C:\Program Files (x86)\Arduino\libraries\UIPEthernet\/UIPUdp.h:28,
                 from C:\Program Files (x86)\Arduino\libraries\UIPEthernet\/Dhcp.h:7,
                 from C:\Program Files (x86)\Arduino\libraries\UIPEthernet\Dhcp.cpp:6:
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\/utility/uip.h:1087:1: warning: this is the location of the previous definition
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\utility\uip_arp.c: In function 'uip_arp_update':
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\utility\uip_arp.c:160: warning: 'tabptr' may be used uninitialized in this function
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\utility\uip_arp.c: In function 'uip_arp_out':
C:\Program Files (x86)\Arduino\libraries\UIPEthernet\utility\uip_arp.c:356: warning: 'tabptr' may be used uninitialized in this function

Bekommt Ihr diese Warnings auch?

Grüße

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 23 Oktober 2014, 22:56:10
Liegt nicht an den Warnings sondern:

Für FRM_IN muss die DigitalInputFirmata enabled sein. Die bei Dir angeschaltete AnalogInputFirmata ist for FRM_AD. FirmataExt muss auch an sein, sonst hat das FRM-modul auch keine Möglichkeit zu merken, dass der gewünschte pinmode gar nicht unterstützt wird.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Samsi am 23 Oktober 2014, 23:34:46
Hallo Norbert,

danke aber das hatte ich hier im thread auch schon gesehen und auch schon enabled und auf den Arduino hochgeladen. Hatte es nur versehentlich nicht gespeichert und deswegen hier die falsche Konfiguration gepostet. Jedenfalls ging es auch nicht, wenn es Enabled war.

Ich habe jetzt noch etwas probiert und die Analogen disabled, weil ich nur ca. 500byte frei hatte.

Jetzt, nur mit den Digitalen, habe ich rund 2KB frei und es  funktioniert zumindest teilweise. Das reading on/off kommt jetzt.

Dafür zeigt er aber in der Firmware "Configura,*,% �"

Ich denke das liegt jetzt am Speicher. Aber wenigstens ein kleines Erfolgserlebnis.

Außerdem bekomme ich auch die "Unhandled sysex command" Meldungen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 24 Oktober 2014, 07:06:15
gib dem Arduino eine feste IP und stelle UDP in der uipethernet.conf ab. Dann klappt's auch mit dem Speicher.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Samsi am 24 Oktober 2014, 19:51:26
Danke! Jetzt sieht man sogar die Internals  analog_resolutions etc.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Samsi am 24 Oktober 2014, 21:40:39
Könnte man evtl. auch das folgende WLAN Modul zum laufen bringen, vielleicht hat das ja schon jemand probiert?

http://www.ebay.de/itm/231311596017

eine Arduino-Ethernet compatible Library gibt es wohl schon:

https://github.com/chunlinhan/WiFiRM04
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 15 November 2014, 11:10:04
Hallo,

ich bin gerade durch Zufall im Internet auf diesen Post gestoßen

http://forum.mysensors.org/topic/536/problems-with-enc28j60-losing-connection-freezing-using-uipethernet-or-ethershield-read-this

der eine mögliche Ursache für meine Verbindungsabbrüche mit ENC28J60 beschreibt. Norbert ist in diesem Forum auch aktiv. @Norbert: Kann man Deine eingearbeiteten Verbesserungen schon testen ? Würde dann gerne hier Feedback geben.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 15 November 2014, 13:36:00
Der link auf die gepatchte version findest du im o.g. Thread (in meinem github-repository branch fix_errata12
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 16 November 2014, 00:26:41
Ich habe alle meine Arduinos auf die neue gepatchte Version geupdatet. Hoffen wir mal, daß es etwas hilft. Ich werde berichten... ;)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 16 November 2014, 11:24:11
Zwei der Arduinos laufen bislang stabil, der dritte an dem ein Bewegungsmelder über FRM_IN hängt, war nach drei Stunden nicht mehr erreichbar: 3032 disconnected, waiting to reappear (FRM:192.168.178.152:1076). Der Arduino war über Ping noch erreichbar:

Ich hatte den Fehler hier ja schon mal beschrieben: http://forum.fhem.de/index.php/topic,25753.msg187628.html#msg187628, habe jetzt noch mal ein FRM_AD bei diesem Arduino hinzugefügt, mal sehen, ob es etwas bringt.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 16 November 2014, 12:36:44
Hallo zusammen,
ich habe eine Frage zu Firmata over Ethernet.
Ich habe das auf einem Mega 2560 mit ENC28J60 laufen. Ein onewire bus und ca. 69 Ausgängen definiert.
Läuft soweit problemlos nur nach ca. 4-5 Tagen schaltet er mir willkürlich einige Ausgänge, Verbindung bleibt aber bestehen.
Dann mus ich den arduino kurz von strom trennen und dann bekommt er vom fhem server (fritzbox) wieder gesagt welche Ausgänge geschaltet werden sollen und welche nicht.
Im fhem Log finde ich keine Fehlermeldung.
Hat jemand eine Idee woran das liegen kann?
Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 16 November 2014, 22:13:03
Der neue Sketch hat leider nicht geholfen. Der Arduino an dem ein Bewegungsmelder über FRM_IN hängt ist jetzt trotz FRM_AD nicht mehr erreichbar, auch nicht mehr üner PING. Startet man FHEM dann neu kommt als Fehlermeldung: FIRMATA2 is not connected ... :(
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 18 November 2014, 08:38:12
Eine kleine Zwischenmeldung, leider bringt der verbesserte Sketch / Library nicht den gewünschten Erfolg. Zwei der insgesamt drei Arduinos sind nicht mehr erreichbar, auch nicht mehr per Ping. Interessant ist die Reihenfolge:

1.) Arduino: DS18B20, FRM_OUT (4 x Relais)
2.) Arduino: DS18B20
3.) Arduino: FRM_IN (Bewegungsmelder), FRM_AD

Es verschwindet immer zuerst der 3. Arduino mit dem Bewegungsmelder, dann der 2. mit nur Temperaturmessung, der erste hält am längsten durch. Vielleicht hilft es ntruchsess ja weiter ?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 23 November 2014, 13:00:04
Fredrik Olofsson hat einen Workaround (https://github.com/ntruchsess/arduino_uip/commit/83b10fbeffa1417e2ad6311142db0862def497f0) beigesteuert, der über einen Timeout erkennt, wenn der Transmitter des enc28j60 hängenbleibt, erste Langzeittests (>24h) sehen bisher erfolgversprechend aus (http://forum.mysensors.org/topic/536/problems-with-enc28j60-losing-connection-freezing-using-uipethernet-or-ethershield-read-this/27). (Danke Thomas fürs Testen...)

Findet sich (wie der Fix zuvor) im branch fix_errata12 (https://github.com/ntruchsess/arduino_uip/archive/fix_errata12.zip)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 06 Dezember 2014, 19:32:29
Hallo zusammen,
habe mein Problem aktuell gelöst in dem ich mit einer Zeitschaltuhr nachts um 3 einen reboot von dem arduino mega mache. Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Olly am 06 Dezember 2014, 20:31:39
Zitat von: matthias soll am 06 Dezember 2014, 19:32:29
Hallo zusammen,
habe mein Problem aktuell gelöst in dem ich mit einer Zeitschaltuhr nachts um 3 einen reboot von dem arduino mega mache. Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?
Mach doch eine Funksteckdose davor, die du von FHEM aus steuerst. Kannst du dann sogar direkt neu starten, wenn er nicht mehr reagiert.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 07 Dezember 2014, 17:43:12
Hallo olly,
grundsätzlich eine gute Idee, allerdings mag ich keine funksteckdosen. Ich könnte auch einen der 63 Ausgänge von dem arduino verwenden dann würde er sich quasi selbst ausschalten. Ich dachte nur es gäbe eine software Möglichkeit den arduino per fhem neu zu booten.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 08 Dezember 2014, 10:38:38
Zitat von: matthias soll am 06 Dezember 2014, 19:32:29
Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?
ja, das geht:

set <frmdevice> reset


Das geht natürlich nur, wenn der Arduino noch kommunizieren kann - also weder der AVR selbst noch die Ethernetschnittstelle abgestürzt sind.

Am sichersten wäre es den eingebauten Watchdog zu benutzen. Damit der auch bei Ausfällen der Ethernet-hardware funktioniert, müsste man das ganze so umbauen, dass der Watchdog über das Netzwerk (z.B. mit einem Firmata-kommando) zurückgesetzt wird. Dann würde beim Abreißen der Netzwerkverbindung der Arduino sich so lange zyklisch immer wieder neu resetten bis er die Verbindung zum FHEM wieder aufgebaut hätte.

- Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 08 Dezember 2014, 11:06:12
Ich hatte dies im Arduino schon einmal versucht, allerdings war ich davon ausgegangen, daß der Arduino komplett abstürzt und nicht nur der Ethernet Teil, insofern hat dies nicht den gewünschten Effekt gebracht. Was wäre denn die einfachste Art in der Firmata zu erkennen, ob noch eine Verbindung zu Fhem besteht ?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 08 Dezember 2014, 12:54:46
An der Socketverbindung selber ist das systematisch nicht zu erkennen. Jedenfalls nicht sofort, sondern erst nach Ablauf der TCP-timeouts. Und das erkennt die Firmata schon heute (dauert halt ein wenig). Wenn das schneller gehen soll, müsste man so eine Art Keep-alive (also ein zyklischer Nachrichtenaustausch, der auch stattfindet, wenn gerade nix zu übertragen wäre) in das Protokoll einbauen.
Hier könnte man auch ein Neuinitialisieren der Ethernet-hardware (Aufruf von Ethernet.begin(...)) einbauen, heute wird da einfach nur versucht unmittelbar wieder eine Socketverbindung (mit Client.connect()) aufzubauen (was natürlich nix nutzt, wenn die Ethernet-hardware eventuell hängt). Aber wirklich zuverlässig wäre wohl nur eine Watchdog-basierte Lösung in Verbindung mit vorgenanntem Keep-alive-protokoll.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 08 Dezember 2014, 14:44:10
Wäre ein keep-alive ein großer Aufwand ? Ich würde mich am Testen / Entwickeln gerne beteiligen .
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 08 Dezember 2014, 15:44:36
Wenn Du Dich am Entwickeln beteiligen willst: Hier kannst Du Proposals für Protokollerweiterungen (https://github.com/firmata/protocol) (als Pull-request) einsteuern. Und hier dann den dazu passenden Implementierungsvorschlag (https://github.com/firmata/arduino).
Ein Keep-alive feature sollte idealerweise mit dieser Anforderung nach einem Verbindungsneuaufbau festellen zu können, ob der Arduino neu konfiguriert werden muss (https://github.com/firmata/protocol/issues/4) zusammenspielen.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 09 Dezember 2014, 19:09:04
set FIRMATA reset 
Danke Norbert.!!
Das sollte mein Problem erstmal lösen erreichbar ist der arduino eigentlich , habe nur das Problem dass er nach ein paar tagen ohne reboot wild irgendwelche Ausgänge schaltet. Hatte das Problem schon jemand?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 10 Dezember 2014, 11:02:28
Zitat von: ntruchsess am 08 Dezember 2014, 15:44:36
Wenn Du Dich am Entwickeln beteiligen willst: Hier kannst Du Proposals für Protokollerweiterungen (https://github.com/firmata/protocol) (als Pull-request) einsteuern.

Oh je, da habe ich ja was angestoßen. Ich habe mir mal die Links angeschaut und hätte noch ein paar Fragen: Das Firmata Protokoll ist so angelegt, daß immer der Host (Raspi o.ä.) die Kommunikation beginnt und der Arduino darauf reagiert ?

Config message

0  START_SYSEX      (0xF0)
1  Keep-alive Command  (0x81)
2  config command   (0x41)
3  keep-alive on/off   (0x00|0x01) 0x00 = off, 0x01 = on
4 intervall              (0-127)  interval in s
5  END_SYSEX (0xF7)


Keep-alive message (vom Arduino zum Host)

0  START_SYSEX      (0xF0)
1  Keep-alive Command  (0x81)
2  keep-alive request   (0x11)
3  END_SYSEX (0xF7)


Keep-alive message (vom Host zum Arduino)

0  START_SYSEX      (0xF0)
1  Keep-alive Command  (0x81)
2  keep-alive confirm   (0x21)
3  END_SYSEX (0xF7)


Wäre dies so möglich und sinnvoll ?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 10 Dezember 2014, 12:33:15
Das Basisprotokoll an sich legt nicht fest, ob eine bestimmte Seite die Kommunikation anstößt. Es ist in dem Sinne kein Request/Response-protokoll. Digital- und Analog-input arbeiten ja auch nicht so - die werden einmal durch Nachrichten vom Host aus konfiguriert und ab dann sendet der Arduino selbstständig. Es ist auch nicht auf Protokollebene festgelegt, dass eine Antwort unmittelbar auf eine Response hin gesendet werden muss - der Host muss durchaus damit rechnen nach Absenden einer Message noch andere Messagetypen zu empfangen, bevor die erwartete Antwort zurückkommt.

An sich ist es egal, welche Seite das Keep-alive-protokol steuert. Macht es der Host, dann muss der Arduino beim Ausbleiben von Messages davon ausgehen, dass die Verbindung abgebrochen ist. Sendet der Arduino die Requests, dann beim Ausbleiben der Antworten. Und wie gesagt, dass muss überhaupt nicht Request/Response sein, man kann auch festlegen, dass beide Seiten unabhängig voneinander regelmäßig eine Keep-alive-nachricht schicken, wenn sonst nichts anderes ansteht. Ansonsten würde das Keep-alive-protokoll Anwendungsszenarien bei denen es auf Bandbreite ankommt und sowieso dauernd messages über die Leitung gehen behindern.
Ich würde es für sinnvoll halten, dass man die Semantik über das reine Erkennen eines Verbindungsabbruchts hinaus noch etwas ausbaut: Das Problem bei einem Verbindungsabbruch ist ja, dass man nicht wissen kann, ob die Gegenseite wärend des Abbruchs die Konfiguration wg. Neustart verloren hat. Aus diesem Grund wird aktuell immer alles zurückgesetzt und neu konfiguriert. Das führt halt leider dazu, dass bei einem Verbindungsneuaufbau z.B. ein Digital-eingang systematisch erst mal einen Schaltvorgang signalisiert, wenn der Pullup beim Reset erst ab und später wieder dazu schaltet wird. Ein unnötiges Neukonfigurieren wäre also beim Verbindungsneuaufbau zu vermeiden. Dazu müsste man im Keep-alive protokoll z.B. eine SessionId setzen und übermitteln können, an der ein bestimmter Konfigurationsstand (wiedererkannt) werden kann.

Gruß,

Norbert
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: T.ihmann am 10 Dezember 2014, 13:11:02
Zitat von: ntruchsess am 10 Dezember 2014, 12:33:15
Und wie gesagt, dass muss überhaupt nicht Request/Response sein, man kann auch festlegen, dass beide Seiten unabhängig voneinander regelmäßig eine Keep-alive-nachricht schicken, wenn sonst nichts anderes ansteht. Ansonsten würde das Keep-alive-protokoll Anwendungsszenarien bei denen es auf Bandbreite ankommt und sowieso dauernd messages über die Leitung gehen behindern.

Aber wie erkennt man dann, ob eine Verbindung abgebrochen ist, wenn das Keep-alive nicht irgendwie mittels Request / Response bestätigt wird ?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: ntruchsess am 10 Dezember 2014, 13:44:24
man erkennt einen Verbindungsabbruch am Ausbleiben von Nachrichten. Jedesmal, wenn (irgendeine Nachricht) kommt, setzt man einen Timer zurück. Ist der Timer abgelaufen, geht man davon aus, dass die Gegenseite nicht mehr verbunden ist. Jedesmal wenn man eine (irgendeine) Nachricht schickt setz man (einen zweiten) Timer zurück. Wenn dieser zweite Timer abgelaufen ohne dass man eine Nachricht schicken musste (die den Timer ja zurücksetzen würde), schickt man eine Keepalive-message.

Das kann jede Seite nach dem gleichen Muster machen. Ein explizites Request/Response Verfahren ist dafür nicht zwingend nötig.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 20 Januar 2015, 09:16:43
Hallo zusammen, gibt es eigentlich eine Empfehlung wie man firmata an fhem anbindet damit es so stabil läuft wie möglich. Ich überlege ob ich per USB oder mit w5100 Ethernet shield weniger Probleme mit der Erreichbarkeit und Zuverlässigkeit hätte.
Gruß
Matthias
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 20 Januar 2015, 09:22:50
Also ich hab es sowohl per Ethernet als auch per USB bei mir macht USB keine Probleme. Ethernet fällt schon mal aus.

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 20 Januar 2015, 09:50:19
Erstmal danke für die schnelle Antwort. Hast du es per USB an einer fritzbox? Mit standard firmata?
Bzw. Funktioniert das an einer fritzbox überhaupt oder hat die keinen ftdi Treiber.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: strauch am 20 Januar 2015, 09:51:23
Das sollte an einer fritzbox gehen aber ich nutze ein macmini mit Debian.

Gesendet von meinem Nexus 4 mit Tapatalk

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Achim am 20 Januar 2015, 10:32:06
Hallo,

bei mir läuft Firmata auf einem Ardunio Nano mit ENC28J60 seit einem Jahr stabil. Im Betrieb keine Unterbrechungen oder Abstürze, weder auf der Arduino Seite noch auf der FHEM (RPi) Seite. Ich habe auf der Arduino Seite Digitale Ein/Ausgänge und 1-Wire konfiguriert, feste IP-Adresse etc, alles laut den "Konfigurationsvorschlägen" von Norbert.

Ich habe nur ab und zu das Problem beim Neustart von FHEM. Da funktioniert dann ab und zu die Kommunikation zwischen FHEM und Arduino nicht mehr. Bei "normalen" Update / shutdown restart trat dieses Problem bisher nicht auf. Das kommt meist nach Änderungen in FHEM wenn ich es öfters neu starte. Manchmal hilft dann ein Neustart des Arduino (reset), meist muss aber auch der RPi neu (nicht nur FHEM) gestartet warden (Shutdown RPi, Reset Arduino, Start RPi mit FHEM). Nicht schön, aber der Aufwand dem Problem auf die Spur zu kommen ist mir zu hoch gegenüber einem Neustart des RPi.

Viele Grüße
Achim
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 20 Januar 2015, 11:19:47
Danke für die Erfahrungsberichte, ich muss den arduino ca. Alle 4 Tage neu starten weil er sonst nicht ansprechbar ist oder wild irgendwelche Ausgänge schaltet. Arduino mega mit enc28, onewire und ca.60 Ausgängen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: digital.arts am 20 Januar 2015, 11:32:28
Hallo,

das sporadische "Aussetzen" eines Firmata-Nano (ist im Heizungskeller zum 1wire-Temperaturmessen...) mit dem ENC28 habe ich auch;
mein Trick: die Stromversorgung des Nano (Steckernetzteil) über eine billige mechanische Schaltuhr, die einmal am Tag (in der Nacht) für 5 Minuten den Nano "kaltstartet".
Ein zweiter Firmata-Nano mit W5100 funktioniert sauber, ohne Tricks... da muss auch nicht soviel bei den Protokollen gespart werden wg Flashplatzmangel...

VG
Karl
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 20 Januar 2015, 15:16:29
Das mit den Protokollen beim w5100 war auch meine idee ich habe mir erstmal ein w5100 shield bestellt um zu testen ob das zuverlässiger läuft. Alternativ könnte ich auch auf usb umrüsten. Erstmal danke für eure Erfahrungen.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: hexenmeister am 20 Januar 2015, 19:43:49
Habe Arduino mit Firmata per USB sein mehreren Monaten ohne Neustart. Alles stabil :)
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: matthias soll am 21 Januar 2015, 20:52:28
Hat jemand Probleme mit der Zuverlässigkeit mit einem Arduino und dem w5100 shield?
Bzw. läuft das stabiler als das ENC28J60?
USB scheint ja Problemlos zu laufen.
Momentan starte ich meinen Arduino auch mit einer Zeitschaltuhr nachts neu und nutze onewire erstmal nicht um zu testen ob es dann stabiler läuft.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: bads am 29 Januar 2015, 22:41:30
Jetzt habe ich den Thread mehrfach durchgelesen, komme aber nicht weiter. Ich habe einen NANOV3 (328P) und das Ethernetshield von Deek-Robot (Pin10:SS, Pin 11:MOSI, Pin12:MISO und Pin13:SCK). Ich kann den Arduino pingen.

Ich habe fast alles auskommentiert, bis auf Digital IN/OUT und 1-Wire. Trotzdem bekomme ich in Fhem den folgenden Fehler:

Zitat
015-01-29 22:14:43 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:15:34 FRM FRM:192.168.177.25:1025 DISCONNECTED
2015-01-29 22:15:43 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:16:36 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:20:10 FRM FRM:192.168.177.25:1025 DISCONNECTED
2015-01-29 22:20:18 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:20:22 FRM FRM:192.168.177.25:1026 DISCONNECTED
2015-01-29 22:20:29 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:24:00 FRM FRM:192.168.177.25:1025 DISCONNECTED
2015-01-29 22:24:08 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:24:24 FRM FIRMATA error: Unhandled sysex command
2015-01-29 22:24:59 FRM FRM:192.168.177.25:1025 DISCONNECTED
2015-01-29 22:25:08 FRM FIRMATA error: Unhandled sysex command

Der Sketch hat eine Binäre Sketchgröße: 28.536 Bytes (von einem Maximum von 30.720 Bytes), trotz entfernen von UDP? Müsste der Sketch nicht kleiner sein, oder was mache ich falsch?

Zitat
/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/

/*
  Copyright (C) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
  Copyright (C) 2010-2011 Paul Stoffregen.  All rights reserved.
  Copyright (C) 2009 Shigeru Kobayashi.  All rights reserved.
  Copyright (C) 2009-2013 Jeff Hoefs.  All rights reserved.
  Copyright (C) 2013 Norbert Truchsess. All rights reserved.
  Copyright (C) 2014 Nicolas Panel. All rights reserved.
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  See file LICENSE.txt for further informations on licensing terms.

  formatted using the GNU C formatting and indenting
*/


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

//#include <SPI.h>
//#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

#include <UIPEthernet.h>

/*
* To execute Network Firmata on Yun uncomment Bridge.h and YunClient.h.
* Do not include Ethernet.h or SPI.h in this case.
* On Yun there's no need to configure local_ip and mac in the sketch
* as this is configured on the linux-side of Yun.
*/

//#include <Bridge.h>
//#include <YunClient.h>

#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#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,177,24)
//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,177,25)
//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,0x0D,0x07,0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

//#include <utility/AnalogInputFirmata.h>
//AnalogInputFirmata analogInput;

//#include <utility/AnalogOutputFirmata.h>
//AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
//#include <utility/I2CFirmata.h>
//I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

#include <utility/FirmataScheduler.h>
FirmataScheduler scheduler;

#include <utility/EncoderFirmata.h>
EncoderFirmata encoder;


// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif

#if defined AnalogInputFirmata_h || defined I2CFirmata_h || defined EncoderFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif

// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
#ifdef _YUN_CLIENT_H_
YunClient client;
#else
EthernetClient client;
#endif
#if defined remote_ip && !defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,remote_ip,NULL,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),remote_ip,NULL,remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
  EthernetClientStream stream(client,local_ip,IPAddress(0,0,0,0),remote_host,remote_port);
#else
  EthernetClientStream stream(client,IPAddress(0,0,0,0),IPAddress(0,0,0,0),remote_host,remote_port);
#endif
#endif
#endif

/*==============================================================================
* FUNCTIONS
*============================================================================*/

void systemResetCallback()
{
  // initialize a defalt state

  // pins with analog capability default to analog input
  // otherwise, pins default to digital output
  for (byte i=0; i < TOTAL_PINS; i++) {
    if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
      // turns off pullup, configures everything
      Firmata.setPinMode(i, ANALOG);
#endif
    } else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
      // sets the output to 0, configures portConfigInputs
      Firmata.setPinMode(i, OUTPUT);
#endif
    }
  }

#ifdef FirmataExt_h
  firmataExt.reset();
#endif
}

/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef _YUN_CLIENT_H_
  Bridge.begin();
#else
#ifdef local_ip
  Ethernet.begin((uint8_t*)mac,local_ip);  //start ethernet
#else
  Ethernet.begin((uint8_t*)mac); //start ethernet using dhcp
#endif
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);

#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
  /* analogWriteCallback is declared in AnalogWrite.h */
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif

  #ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
  firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
  firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
  firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
  firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
  firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
  firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
  firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
  firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
  firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
  firmataExt.addFeature(scheduler);
#endif
#ifdef EncoderFirmata_h
  firmataExt.addFeature(encoder);
#endif
#endif
  /* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  // 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
        || 11==i
        || 12==i
        || 13==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(10), OUTPUT); // SS
pinMode(PIN_TO_DIGITAL(11), OUTPUT); // MISO(SI)
pinMode(PIN_TO_DIGITAL(12), OUTPUT); // MISO(SO)
pinMode(PIN_TO_DIGITAL(13), OUTPUT); // SCK
//pinMode(PIN_TO_DIGITAL(4), OUTPUT); //
//digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;
digitalWrite(PIN_TO_DIGITAL(10), HIGH); // SS is active low;

  // start up Network Firmata:
  Firmata.begin(stream);
#else
  // start up the default Firmata using Serial interface:
  Firmata.begin(57600);
#endif
  systemResetCallback();  // reset to default config
}

/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
  /* DIGITALREAD - as fast as possible, check for changes and output them to the
   * stream buffer using Firmata.write()  */
  digitalInput.report();
#endif

  /* STREAMREAD - processing incoming messagse as soon as possible, while still
   * checking digital inputs.  */
  while(Firmata.available()) {
    Firmata.processInput();
#ifdef FirmataScheduler_h
    if (!Firmata.isParsingMessage()) {
      goto runtasks;
    }
  }
  if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
  }

  /* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
   * 60 bytes. use a timer to sending an event character every 4 ms to
   * trigger the buffer to dump. */

#ifdef FirmataReporting_h
  if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    analogInput.report();
#endif
#ifdef I2CFirmata_h
    // report i2c data for all device with read continuous mode enabled
    i2c.report();
#endif
#ifdef EncoderFirmata_h
    // report encoders positions if reporting enabled.
    encoder.report();
#endif
  }
#endif
#ifdef StepperFirmata_h
  stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip &&!defined _YUN_CLIENT_H_
  if (Ethernet.maintain())
    {
      stream.maintain(Ethernet.localIP());
    }
#endif
}

Zitat
ifndef UIPETHERNET_CONF_H
#define UIPETHERNET_CONF_H

/* for TCP */
#define UIP_SOCKET_NUMPACKETS    5
#define UIP_CONF_MAX_CONNECTIONS 4

/* for UDP
* set UIP_CONF_UDP to 0 to disable UDP (saves aprox. 5kb flash) */
#define UIP_CONF_UDP             0
#define UIP_CONF_BROADCAST       0
#define UIP_CONF_UDP_CONNS       0

/* number of attempts on write before returning number of bytes sent so far
* set to -1 to block until connection is closed by timeout */
#define UIP_ATTEMPTS_ON_WRITE    -1

/* timeout after which UIPClient::connect gives up. The timeout is specified in seconds.
* if set to a number <= 0 connect will timeout when uIP does (which might be longer than you expect...) */
#define UIP_CONNECT_TIMEOUT      -1

/* periodic timer for uip (in ms) */
#define UIP_PERIODIC_TIMER       250

/* timer to poll client for data after last write (in ms)
* set to -1 to disable fast polling and rely on periodic only (saves 100 bytes flash) */
#define UIP_CLIENT_TIMER         10

#endif

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: digital.arts am 30 Januar 2015, 09:45:52
Hallo,

@bads:
FirmataScheduler und EncoderFirmata können auch auskommentiert werden
UIP_CONF_MAX_CONNECTIONS auf 1 schadet auch nicht

Hast Du mehrere solcher Firmatas im Einsatz ? Da ist zu beachten, im sketch nicht nur bei IP, auch bei der MAC-Adresse jeweils eine andere einzutragen !!

VG
Karl
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: bads am 31 Januar 2015, 16:27:55
Hallo Karl,

Danke. Ich habe nur einen Arduino zum Testen im Netz. Ich habe alles noch mal ausprobiert und zum Test auch  noch einmal 1-Wire auskommentiert. Auch die Änderungen von Dir habe ich vorgenommen. Der Sketch war dann 24.384K (inkl. OneWire). Trotzdem bekomme ich immer noch den gleichen Fehler. Hast Du eine Idee?

Zitat
2015.01.31 16:22:29 4: Connection accepted from FRM:192.168.177.25:1026
2015.01.31 16:22:29 5: FRM:>ff
2015.01.31 16:22:32 3: querying Firmata Firmware Version
2015.01.31 16:22:32 5: FRM:>f079f7
2015.01.31 16:22:32 5: FRM:<f079020654006500730074004600690072006d006100740061002e0069006e006f00f7
2015.01.31 16:22:32 3: Firmata Firmware Version: TestFirmata.ino V_2_06
2015.01.31 16:22:32 5: FRM:>f069f7
2015.01.31 16:22:32 5: FRM:>f06bf7
2015.01.31 16:22:32 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f000101017f000101017f000101017f000101017f000101017f000101017f000101017f000101017f7f7f7f7f000101017f000101017f000101
2015.01.31 16:22:32 3: received String_data: Unhandled sysex command
2015.01.31 16:22:32 5: FRM:<017f000101017f000101017f000101017f7f7ff7
2015.01.31 16:22:34 5: FRM:>f07a6807f7
2015.01.31 16:22:34 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7
2015.01.31 16:22:34 3: received String_data: Unhandled sysex command

Danke Guido
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Inputsammler am 04 Februar 2015, 14:55:34
HAllo zusammen,

Habe gestern den Mega mit Ethernetshield und Firmata zum laufen gebracht.

Zur info für alle hier.

Ich hatte Probleme mit der Arduino IDE V 1.5x mit der neuen V1.06 hingegen nicht .
Ide
http://arduino.cc/download.php?f=/arduino-1.0.6-windows.zip

Firmata:
https://github.com/firmata/arduino/archive/configurable.zip

IDE entpackt:
c:\Arduino\arduino-1.0.6\

Inhalt gelöscht von
c:\tools\Arduino\arduino-1.0.6\libraries\Firmata\

Inhalt von dem Firmata das downlgeladen worden ist in das Verzeichnis entpackt

anschließend IDE gestartet
-> Beispiel --> Firmata --> configurableFirmata

Folgende Sachen bearbeitet:

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

#include <SPI.h>
#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

//#include <UIPEthernet.h>

/*
* To execute Network Firmata on Yun uncomment Bridge.h and YunClient.h.
* Do not include Ethernet.h or SPI.h in this case.
* On Yun there's no need to configure local_ip and mac in the sketch
* as this is configured on the linux-side of Yun.
*/

//#include <Bridge.h>
//#include <YunClient.h>

#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#define NETWORK_FIRMATA
//replace with ip of server you want to connect to, comment out if using 'remote_host'
// Hier die FHEM Adresse eingeben
#define remote_ip IPAddress(192,168,27,36)
//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
Hier die IP von deinem  Arduino eingeben
#define local_ip IPAddress(192,168,27,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,0x0D,0x07,0x02};
#endif


Das habe ich dann in FHEM eingestellt

define FIRMATA FRM 3030 [global]
define Firmata_17 FRM_AD 17 # definiert Arduino Pin 17 als analogen Eingang
define Firmata_10 FRM_PWM 10 # definiert Arduino Pin 10 als analogen Ausgang
define Firmata_09 FRM_AD 9 # definiert Arduino Pin 9 als analogen Eingang
define Firmata_12 FRM_IN 12 # definiert Arduino Pin 12 als digitalen Eingang
define Firmata_11 FRM_OUT 11 # definiert Arduino Pin 11 als digitalen Ausgang
define Firmata_02 OWX 2


Und die alles läuft ohne Probleme.
Vielleicht hilft es hier jemanden weiter.

Wollte es in die WIKI schreiben aber es hat nicht funktioniert.
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: 0p3r4t0r_DE am 03 März 2015, 14:19:45
Grüße,

muss mich hier mal kurz einklinken.
Ganz komisches Problem bei mir.
Folgender Sachstand: Benutze einen UnoR3 mit ENC28J60. IDE 1.6.0.
Habe mir confFirmata und UIPEthernet geladen und laut Beschreibung "installiert" bzw eingerichtet. Dann starte ich IDE und compiliere erst mal unverändert die confFirmata, mache dann meine Änderungen und compiliere neu (also IP vergeben und includes welche ich nicht brauche raus. Genauso, wie UDP Einstellungen ändern)
Sketch ist auf dem Arduino und läuft nun erst mal. Kann auch per FHEM drauf zugreifen und steuern. Also speicher ich mir den Sketch für später auf meiner HDD. Ziehe meinen Uno vom Strom um ihn an seine gewünschte Position wieder anzuschließen. Nun bricht aber ständig die Netzwerkverbindung zusammen. Ergo will ich Sketch noch mal bearbeiten um evtl noch mehr Speicherplatz zu sparen, damit der sauber läuft. Aber wenn ich nun meinen Sketch lade, der ja schon auf dem Uno läuft und gespeichert wurde, dann bringt er mir beim kompilieren immer folgenden Fehler.

Arduino: 1.6.0 (Windows 7), Platine: "Arduino Uno"

Verwende die Bibliothek Firmata im Ordner: C:\Program Files (x86)\Arduino\libraries\Firmata

Verwende die Bibliothek UIPEthernet im Ordner: C:\Program Files (x86)\Arduino\libraries\UIPEthernet



C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\FHEM_Final.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\FHEM_Final.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\Firmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\Firmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\AnalogFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\AnalogFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\AnalogInputFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\AnalogInputFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\AnalogOutputFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\AnalogOutputFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\DigitalInputFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\DigitalInputFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\DigitalOutputFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\DigitalOutputFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\Encoder.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\Encoder.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\Encoder7Bit.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\Encoder7Bit.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\EncoderFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\EncoderFirmata.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\EthernetClientStream.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\EthernetClientStream.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\FirmataExt.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\FirmataExt.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\FirmataReporting.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\FirmataReporting.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\FirmataScheduler.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\FirmataScheduler.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\FirmataStepper.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\FirmataStepper.cpp.o

C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\Firmata -IC:\Program Files (x86)\Arduino\libraries\UIPEthernet\src -IC:\Program Files (x86)\Arduino\libraries\Firmata\utility C:\Program Files (x86)\Arduino\libraries\Firmata\utility\I2CFirmata.cpp -o C:\Users\Tedriran\AppData\Local\Temp\build1890073882798320334.tmp\Firmata\utility\I2CFirmata.cpp.o

C:\Program Files (x86)\Arduino\libraries\Firmata\utility\I2CFirmata.cpp:18:18: fatal error: Wire.h: No such file or directory
#include <Wire.h>
                  ^
compilation terminated.
Fehler beim Kompilieren.


Dies passiert auch, wenn ich erst den Beispielsketch von confFirmata unverändert lade und kompiliere und dann meinen Sketch versuche zu kompilieren.
Das heist, ich muss jedesmal die Einstellungen neu machen.

Kann mir zu den beiden Problemen (Netzwerkverbindungsverlust und Kompilieren) vielleicht jemand weiter helfen?

Ach ja, hier mal mein Sketch:


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

//#include <SPI.h>
//#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

#include <UIPEthernet.h>

/*
* To execute Network Firmata on Yun uncomment Bridge.h and YunClient.h.
* Do not include Ethernet.h or SPI.h in this case.
* On Yun there's no need to configure local_ip and mac in the sketch
* as this is configured on the linux-side of Yun.
*/

//#include <Bridge.h>
//#include <YunClient.h>

#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#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,1,99)
//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,1,40)
//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, 0x0D, 0x07, 0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

//#include <utility/AnalogInputFirmata.h>
//AnalogInputFirmata analogInput;

//#include <utility/AnalogOutputFirmata.h>
//AnalogOutputFirmata analogOutput;

//#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;

//#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
//#include <utility/I2CFirmata.h>
//I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

//#include <utility/FirmataScheduler.h>
//FirmataScheduler scheduler;

//#include <utility/EncoderFirmata.h>
//EncoderFirmata encoder;


Kann ich da evtl noch mehr raus kommentieren? Möchte nur 2 Pins mit "on-for-timer" verwenden.


Danke. Gruß
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: bads am 04 März 2015, 21:41:31
nAbend,

ich versuche mal mein Glück in diesem Thread. Im 1-wire Bereich habe ich keine Antwort bekommen, da es wohl ein Problem mit der Firmata zu sein scheint.

http://forum.fhem.de/index.php/topic,13580.msg268146.html#msg268146


Ich habe mit der IDE und der aktuellen Configurable Firmata jeweils das gleiche Phänomen mit ENC28J60 und W5100 Ethernet-Shield. Den ENC mit UIPEthernet und den W5100 mit SPI und Ethernet.h.

Jeweils nach etwa 8 Stunden Betrieb und zyklischer Abfrage von 1-Wire Sensoren (3 Stück) antwortet der Arduino UNO nicht mehr. Nur nach einem Reset ist der UNO wieder ansprechbar.

Nach dem komilieren habe ich folgende Speicherbelegung (Nur 1-wire und digital, alles andere auskommentiert an features)

avr-size -C --mcu=atmega328 WZ5000.cpp.elf
AVR Memory Usage
----------------
Device: atmega328

Program:   23578 bytes (72.0% Full)
(.text + .data + .bootloader)

Data:       1338 bytes (65.3% Full)
(.data + .bss + .noinit)

Gibt es eine Möglichkeit da etwas zu debuggen Wenn ja, wie?

Danke
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Bjoern777 am 26 Mai 2015, 21:46:44
Hallo zusammen,

ich kämpfe hier schon ein paar Tage mit dem Firmata over Ethernet.

Habe hier einen Nano mit enc28j60 und einem Relais-Board.

Was habe ich gemacht
- neue Arduino IDE 1.5.7 ausgepackt
- Firmata Verzeichnis im lib-Verzeichnis gelöscht
- ConfigurableFirmata runtergeladen und im lib/firmata Verzeichnis gespeichert
- Habe den Sketch geladen konfiguriert und hochgeladen

Netzwerkkabel dran + Reset => Ping funktioniert.

FIRMATA Device in FHEM angelegt:

define FIRMATA FRM 3030 global
attr FIRMATA verbose 5


In FHEM ist nun zu lesen

FRM
FIRMATA Initialized
FRM:192.168.178.29:1027 Connected

Digitalen Pin 8 eingerichtet:

define Firmata_OUT FRM_OUT 8
attr Firmata_OUT IODev FIRMATA
attr Firmata_OUT stateFormat value


Das Device taucht in FHEM auf, aber es passiert nix...

Im Log-File ist das hier zu finden:

2015.05.26 21:34:00 4: Connection accepted from FRM:192.168.178.29:1027
2015.05.26 21:34:00 5: FRM:>ff
2015.05.26 21:34:03 3: querying Firmata Firmware Version
2015.05.26 21:34:03 5: FRM:>f079f7
2015.05.26 21:34:03 5: FRM:<f079020743006f006e0066006900670075007200610062006c0065004600690072006d006100740061002e0069006e006f00f7
2015.05.26 21:34:03 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_07
2015.05.26 21:34:03 5: FRM:>
2015.05.26 21:34:03 5: FRM:>
2015.05.26 21:34:05 5: FRM:>
2015.05.26 21:35:02 5: FRM:>
2015.05.26 21:35:10 5: FRM:>
2015.05.26 21:35:11 5: FRM:>
2015.05.26 21:35:13 5: FRM:>
2015.05.26 21:35:14 5: FRM:>


Bei drücken von On oder Off erscheint jeweils sofort eine neue Zeile im Protokoll

2015.05.26 21:35:14 5: FRM:>


Hat jemand eine Idee woran das liegen könnte?

Vielen Dank + Gruss Björn
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Tratonis am 12 Juni 2015, 22:47:58
@Bjoern777 habe selbiges Problem, konntest Du das lösen?
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: AxelSchweiss am 13 Juni 2015, 00:00:26
Prüft doch mal die Stromversorgung.
Ich habe hier schlappe 300mA gemessen.
Wenn das Netzteil nicht sauber die Spannung liefert macht der Netzwerkadapter (Bei mir ein W5100) die verücktesten Sachen.
z.B kommt ein DHCPREQUEST aber der der DHCPACK wird dann nicht mehr angenommen.
Mit dem richtigen Netzteil funktioniert es jetzt.
Das Problem von euch sieht ähnlich aus ... der Nachrichtenempfang funktioniert nicht.

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Edi77 am 23 August 2015, 19:17:43
Ich habe einen Arduino Nano Klone von Deek-Robot und vom gleichen Hersteller das 28J60 Ethernet Shield.
Habe Arduino IDE 1.6.5 mit ConfigurableFirmata am laufen.
Wie binde ich jetzt die UIPEthernet ein?
Mit #include <UIPEthernet.h> kommt ein Fehler, da scheint sich ja einiges geändert zu haben.

Mit Arduino Uno und W5100 Shield habe ich kein Problem.

Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Spielmann am 28 August 2015, 10:00:09
Hallo Björn777,
das Problem liegt vermutlich an deiner Firmataversion. Ich habe gestern die Version V_2_07 auf mein Arduino Mega + W5100 Ethernet Shield aufgespielt, da ich diese mal testen wollte. FHEM (Raspi) hat sich gleich mit dem Arduino verbunden, nur die Schnittstellen am Arduino werden nicht angesprochen. Mit der Version 2_05 funktioniert bei mir alles (außer dass sich nach Stunden der Arduino nicht mehr ansprechen lässt).

Wie bei Bild 2_05 sollte es unter Firmata aussehen. Bei Bild 2_07 sind die Schnittstellen nicht definiert.

Versuche es also mal mit einer anderen Version (z.B. der Zip Link im Wiki http://www.fhemwiki.de/wiki/Arduino_mit_OneWireFirmata (http://www.fhemwiki.de/wiki/Arduino_mit_OneWireFirmata)). Ich bin noch auf der Suche nach der 2_06 oder funktionierende 2_07, da ich mir dadurch weniger Verbindungsabbrüche erhoffe oder die Verbindung irgendwie mit einem Watchdog oder Befehl reconnecten kann (siehe http://forum.fhem.de/index.php/topic,40445.0.html (http://forum.fhem.de/index.php/topic,40445.0.html))

Gruß
Spielmann


Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Spielmann am 05 September 2015, 18:03:07
Hallo zusammen,
hat schon jemand ein Arduino mit configurable Firmata dauerhaft und ohne Verbindungsabbruch über mehrere Tage zum Laufen gebracht bzw. über einen Watchdog das System dauerhaft am laufen gehalten?

In diversen Threads wurde das Thema schon angesprochen (beispielsweise von Björn777 und bads), jedoch konnte ich noch nichts über eine erfolgreiche Konfiguration lesen ( http://forum.fhem.de/index.php/topic,13580.345.html (http://forum.fhem.de/index.php/topic,13580.345.html)  und  http://forum.fhem.de/index.php/topic,15780.msg269747.html#msg269747 (http://forum.fhem.de/index.php/topic,15780.msg269747.html#msg269747) ). Mich interessiert vor allem die Konfiguration von:
-   Arduino-Typ
-   ENC28J60 oder W5100 Ethernet-Shield
-   Version der configurablen Firmata (und evl. Einstellungen)
-   OWX oder OWX_ASYNC

Mein Aufbau sieht folgendermaßen aus:
-   Raspi mit FHEM
-   Arduino mega  mit configurable Firmata 2_05 am W5100 Ethernet Shield (die Version 2_06 finde ich nirgens mehr) . Am Arduino sind iButton-Reader und Zähler DS2423 (2 x OWX_ASYNC Schnittstellen), 10er-Tastaturmatrix (über analoge Matrix FRM_AD),  Kontakt (FRM_IN), Ausgang (FRM_OUT) und ein LCD (I2C).
OWX wollte ich nicht nehmen, da ich sonst wegen den iButtons ständig pollen muss.

Ich habe schon vor Tagen einen Thread im Anfängerforum eröffnet bezüglich der Firmata Version (http://forum.fhem.de/index.php/topic,40445.msg326770.html#msg326770 (http://forum.fhem.de/index.php/topic,40445.msg326770.html#msg326770) ), jedoch keine Antwort erhalten.

Gruß
Spielmann
Titel: Antw:Firmata over Ethernet: Einbindung in Arduino
Beitrag von: Edi77 am 12 September 2015, 20:52:28
Hallo,

Bei mir läuft die Firmata seit ca. 2 Wochen mit einem Funduino UNO und 2 x DS18B20 stabil
Allerdings habe ich noch ein paar andere Probleme damit.
http://forum.fhem.de/index.php/topic,40927.msg331467.html#msg331467
https://forum.arduino.cc/index.php?topic=346856.0