Hauptmenü

Firmata+Arduino

Begonnen von Rohan, 31 Januar 2013, 14:31:12

Vorheriges Thema - Nächstes Thema

ntruchsess

Zitat von: eburkon schrieb am Sa, 01 Juni 2013 10:16Was ich jetzt nicht ganz kapiere, welche von den StandardFirmata Versionen
ich denn da jetzt benutzen kann.
Temperaturen messen kannst Du z.B. über 1-Wire (DS18B20-chips gibt's günstig auf eBay). 1-Wire-support ist in der Configurable-Firmata enthalten. Der BMW085-Sensor wird über I2C angebunden, der wäre auch mit der StandardFirmata (so wie sie bei der Arduino-IDE dabei ist) ansteuerbar. Ein passendes FHEM-modul müsste man aber noch schreiben. Da könntest Du Dich am FRM_LCD-modul orientieren, das verwendet auch I2C.
Zitat von: eburkon schrieb am Sa, 01 Juni 2013 10:16Und dann wäre da noch ein generelles Problem den Arduino Micro betreffend.
mit dem Micro habe ich noch nichts gemacht. Steht auch nicht eplizit in der Boards.txt. Stell die Frage am besten auf der Firmata-developer-mailingliste

Gruß,

Norbert
while (!asleep()) {sheep++};

eburkon

Servus Norbert,

vielen Dank. Jetzt bin ich schon mal ein paar Schritte weiter.

Habe die Configurable Firmata auf den Arduino Micro geladen.

Mit FRM_OUT kann ich schön die LED auf Pin 13 schalten.

OWX erkennt auch ganz brav den Sensor. Nur kann FHEM noch kein Temperaturen lesen.
Der Wert bleibt immer auf 0 und und der ERRCOUNT zählt langsam hoch.
Im Log finde ich aber keine Meldungen, die mir etwas sagen würden.

Wenn ich einen simplen 1-Wire Scetch aus den Beispielen lade wird die Temperatur auf dem
Arduino korrekt angezeigt. Also vermute ich mal dass was auf dem Weg Firmata -> Fhem
fehlschlägt.

Wo könnte ich denn jetzt am besten mit dem Debugging ansetzen?

Gruß
   Ekkehard
FHEM auf Rpi48G, KNX via knxd und IP Interface, Hue, FS20, und ein paare externe Sachen via MQTT

woody

Hi Norbert,
vielen Dank für deine Antwort, aber ich meinte welche Firmata Version auf den Arduino muß.
Ich habe momentan die configurablefirmata drauf und wenn ich im FHEM schaue wird die Version 2_05 angezeigt.
In der Firmata.h steht aber das es die Version 2 5 3 ist. Laut der ide benutzt er zum compilieren auch die richtige, zumindest vom Pfad her.
Trotzdem bekomme ich im serial monitor "unknown pinmode" angezeigt. Das meldet mir Fhem auch. Bild im Anhang. Die logdatei gibt leider keine genauere Fehlermeldung her.

Viele Grüße

woody

ntruchsess

Hallo Woody,

das mit der Version ist ok so. In Firmata.cpp wird der Versionnummernstring nur aus Major (2) und Minor (5) zusammengebaut, ergibt dann 2_05. Point-releases (Änderung der Versionsnummer auf der 3. Stelle) enthalten ausschließlich Bugfixes und Änderungen, die das Protokoll unverändert lassen. Die 2_05 enthält eine für das asynchrone OWX wichtige Anpassung.

Die 'unknown pinmode' Fehlermeldung kommt denke ich (beim Reset des Arduinos) von der systemResetCallback-routine, die die Pins ab Nummer '0' anfängt auf Analog bzw. Output zu stellen, tatsächlich aber Pin 0 und 1 von der Seriellen Schnittstelle belegt sind. Wenn Du in die for-schleife mit 2 beginnen läßt ist sollte der Fehler weg sein. Ist aber rein kosmetisch.

Gruß,

Norbert
while (!asleep()) {sheep++};

woody

Hi Norbert,
ja das wars....Fehlermeldung ist weg.

Steuerst du auch ein LCD über i2c an der Firmata ? Ich bekomme irgendwie keine textausgabe aus fhem hin.

Habe das LCD so eingebunden:

fhem.cfg
.......
define LCD1 FRM_LCD i2c 16 2 63
attr LCD1 room Firmata
.......

Hab ich da einen Fehler in der config? Die i2c Adresse stimmt, und es ist ein 16x2 LCD mit i2c controller.

Viele Grüße

woody


woody

Hallo,
kann mir mal jemand ein Beispiel seiner fhem.cfg schicken?
Bekomme das mit der Ausgabe auf das Display irgendwie nicht hin.

Viele Grüße

woody

matthias soll

Hallo zusammen,
ich habe etwas den Überblick verloren, bzw. wäre vielleicht auch was fürs Wiki.
Funktioniert jetzt Firmata mit ethernet und Onewire?
Wenn ja wie? Gibt es eine Anleitung?

ntruchsess

Am 1-Wire (bzw. an der Unterstützung aller OWX-Module mit FRM) bin ich grade wieder am arbeiten. OWTHERM geht recht gut, OWCOUNT, OWID und OWSWITCH auch. OWAD und OWMULTI machen noch Schwierigkeiten.

Der aktuelle Stand findet sich hier:

Es ist leider so, dass sich der Arduino leicht aufhängt, wenn man zu viele 1-Wire Devices zu oft abfragt. Da geht Ihm wohl der Speicher aus. Ich versuche das dahingehend abzusichern, dass das OWX_FRM-modul darauf achtet bei Ausstehenden Antworten nicht munter weiter Requests zum Arduino geschickt werden bis gar nichts mehr geht.

Der normale I/O geht mit den ganzen FRM_xxx-modulen geht gut, dafür muss der Arduino auch nicht so zeitkritische Dinge wie 1-Wire bustiming tun.

Vieleicht probiere ich mal einen 1-Wire-Busmaster über i2c an den Arduino zu hängen. I2C wird vom Arduino in Hardware unterstützt, da müssen eigentlich nur Daten durchgereicht werden (1-Wire auf dem Arduino ist eine reine Softwarelösung). In Verbindung mit der Ethernetschnittstelle könnte das dann doch ganz nützlich sein.

Nur um die EthernetFirmata konnte ich mich in letzter Zeit leider gar nicht kümmern.

Gruß,

Norbert

P.S. die OWX-module an sich laufen asynchron mit einem Seriellen Busmaster (DS2480) jetzt ganz prima, ich habe grade einen Test mit je einem DS2401, DS2406, DS2413, DS2416, DS2438, DS2450 und DS18B20, alle am gleichen Bus im 5-Sekundentakt abgefragt, laufen. Da läuft das tadellos...
while (!asleep()) {sheep++};

cberl

Hallo,

ist es eigentlich möglich, mehrere Arduinos über Ethernet mit Firmata zu betreiben?
In Fhem könnte könnte man ja mehrere Ports, also einen pro Arduino öffnen.
Wie mache ich das aber mit den Pin`s? So kann z.B. FRM_IN 7 doch nur einmal belegt werden.
Oder wie verhält sich das?

Schonmal Danke. Chris
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

ntruchsess

ja, das geht ohne weiteres. Einfach mehrere FRM-Devices (eines je Port bzw. Arduino) definieren. Natürlich muss man dann für jeden Arduino in der EthernetFirmata individuell den gewünschten Zielport anpassen.
Bei den Pin-spezifischen Devices muss man dann per IODev-Attribut das zugehörige FRM-Device referenzieren. Gibt es nur ein FRM-Device, dann findet sich das automatisch.

Ich weiß, grundsätzlich ginge das auch über einen einzigen Port, die Arduinos müssten sich dann mit einer individuellen Kennung identifizieren. Darauf ist derzeit halt weder die Firmata-firmware noch das FRM-modul eingerichtet. (Contributions encouraged...)

Gruß,

Norbert
while (!asleep()) {sheep++};

cberl

Hallo Norbert,

schön, das zu hören. Ich habe das aber nicht ganz gerafft.
Wie kann ich auf das IODev-Attribut refenzieren?

Der erste würde so aussehen:
define FIRMATA FRM 3030 [global]
define Arduino1_IN7 FRM_IN 7

für den zweiten Arduino:
define FIRMATA2 FRM 3031 [global]
define Arduino2_IN7 ??FRM_IN?? ?7?

Grüße, Chris
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

ntruchsess

guckst Du hier: attr IODev

#für den ersten Arduino:
define FIRMATA FRM 3030 [global]
define Arduino1_IN7 FRM_IN 7
attr Arduino1_IN7 IODev FIRMATA

#für den zweiten Arduino:
define FIRMATA2 FRM 3031 [global]
define Arduino2_IN7 FRM_IN 7
attr Arduino2_IN7 IODev FIRMATA2

Viel Erfolg :-),

Norbert
while (!asleep()) {sheep++};

Wzut

Zitat von: ntruchsess schrieb am Mo, 15 Juli 2013 23:35für jeden Arduino in der EthernetFirmata individuell den gewünschten Zielport anpassen
und bitte nicht vergessen die MAC Adresse an min einer Stelle auch zu ändern um doppelte MACs im Netzwerk zu vermeiden.

@Norbert, wie hoch sind die Chancen auf ein Firmatamodul das die serielle Schnittstelle unterstützt ?
Hintergrund : Ich habe an einem Arduino an dessen seriellen Schnittstelle einen Ultraschallsensor (URM37 -> http://www.dfrobot.com/index.php?route=product/product&product_id=53) hängen der den Füllstand in meinem Heizöltank ermittelt. Die Kommunikation zwischen Arduino und Sensor ist recht primitiv : Vier Byte zum Sensor schicken und es kommen auch wieder vier Byte als Ergebnis zurück (Also kein echtes serielles Protokoll bei dem zig Regeln zu beachten sind)
Ich würde da gerne selbst etwas zu diesem Thema beitragen, dazu benötige ich allerdings deinen Rat welches bestehende Firmata und FHEM Modul sich gut als Vorlage dafür eignet.  
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

ntruchsess

Unterstützung für (Software-)Serial fehlt in Firmata leider (noch).

Entweder schreibst Du für ein spezielles Firmata-Feature für Deinen Sensor (so dass nur das eigentliche Ergebniss übertragen wird), oder Du machst Dir Gedanken, wie man die Serielle Kommunikation generisch im Firmata-protocoll abbildet. Grundsätzlich sind ja (bei Sysex-messages) Firmata-Messages variabler Länge möglich - damit sollte sich ein serielles Protokoll ohne sinnlosen Overhead definieren lassen. Wenn Du letzteres angehen magst, dann solltest Du ein Proposal auf http://www.firmata.org/wiki/Proposals schreiben und in o.g. Issue referenzieren (oder dort erst mal diskutieren). Um eine Implementierung in die ConfigurableFirmata aufgenommen zu kriegen musst Du das Firmata/aduino-repository auf Github clonen, das Feature in einem neuen Branch implementieren und dann einen Pull-request gegen den Configurable-Branch machen. Als Vorlage kannst Du z.B. das OneWireFirmata-Feature nehmen (das verwendet u.a. Sysex-messages und die Encoder7Bit-Klasse, die man hernehmen sollte, wenn man auch längere Datenblöcke in eine Sysex-message packen will).
Die Gegenseite (in Perl) solltest Du erst mal ohne FHEM nur mit der perl-firmata prototypisch implementieren bevor Du Dich an ein echtes FHEM-modul machst.

Gruß,

Norbert
while (!asleep()) {sheep++};

cberl

Das funktionierte auf Anhieb. Vielen Dank für die Hinweise. Chris
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2