Hauptmenü

Firmata+Arduino

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

Vorheriges Thema - Nächstes Thema

justme1968

hallo norbert,

ich habe gerade mal versucht dein DHT11 beispiel für den ultraschall sensor anzupassen und habe das problem ich nicht weiss wie ich damit umgehen muss das ich zwei pins zum ansteuern des sensors brauche. lässt sich das überhaupt so direkt als bedingung abbilden oder  muss das der anwender dann einfach wissen ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ntruchsess

Zitat von: eppi schrieb am Fr, 24 Mai 2013 18:52Gibt es schon einen Firmata-Sketch, der meinen ENC28J60 EthernetShield ansprechen kann?
Hallo Dani,
leider gibt es noch keinen Firmata-sketch für den ENC28J60. Ist auch nicht so trivial - ich habe jedenfalls noch keine Arduino-library für diesen Chip gefunden, die eine echte TCP/IP-Socketverbindung unterstützen würde. Die Beispiele, die ich gefunden habe (vornehmlich Webserver) haben immer alles in ein einzelnes Packet gepackt, das reicht aber nicht um einen zuverlässigen Stream zwischen Arduino und FHEM zu realisieren. Das liegt primär daran, das der Chip selbst nicht mehr kann und wesentliche Teile des IP-protokolls in Software realisiert sein müssten.

Wenn Du kurzfristig Firmata über Ethernet einsetzen willst, dann kauf Dir ein WIZ5100-basiertes Shield (so eines wie das Standard-ethernetshield halt). Der Chip hat komplette IP-unterstützung schon in Hardware, die zugehörige Library ist recht schlank und trotzdem deutlich leistungsfähiger als die für den ENC28J60. Oder steig tiefer in die Materie ein und bringe z.B. den µIP-Stack auf dem Arduino zum Laufen.

Gruß,

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

ntruchsess

Zitat von: justme1968 schrieb am Fr, 24 Mai 2013 20:40ich habe gerade mal versucht dein DHT11 beispiel für den ultraschall sensor anzupassen

Hallo Andre,

prima :-)! Ich würde erst mal einfach damit anfangen die Pins hardcodiert festzulegen und die Sensorwerte in der report-methode zu ermitteln und als Sysex-message (auch erst mal als als 'Reserved command' wie im DHT11-example) abzuschicken. Dazu dann mal ein perl-beispiel umd das auch zu empfangen.
Wenn das erst mal läuft sollte man sich natürlich noch ein paar mehr Gedanken über das Protocoll drumrum machen - Um die 2 Pins zu configurieren solltest Du erst mal eine passendes config-message-format definieren. In der Message, die man in report abschickt sollte natürlich auch irgendwie codiert sein, dass es ein Messwert vom Ultraschallsensor ist. (Lass Dich dazu mal von den Proposals auf firmata.org oder den schon standartisierten Firmata-messages z.B. für I2C inspirieren). Mein Vorschlag wäre für eher exotische Sensoren alles weiter unter 'RESERVED COMMAND'-sysex-message laufen zu lassen, dann in den 14 bits nach dem 'RESERVED COMMAND' einen eigenen Wert für jeden Sensortyp abzulegen, die darauffolgenden 7 bits als sensorspezifisches Commando zu nutzen und anschließend die Nutzdaten zu übertragen. Wenn man das einheitlich für alle Sensoren so macht, dann wäre die Behandlung in Perl genauso einheitlich abzuwickeln und es wäre sehr einfach ein relativ generisches FHEM-modul für unterschiedlichste Sensoren, die jeweils nur einen analogen Messwert liefern, zu schreiben.

Gruß,

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

eppi

Hallo Norbert
Danke für deine Einschätzung!
Zitat....dann kauf Dir ein WIZ5100-basiertes Shield

Habe mir eben einen bestellt! Sobald er hier ist werde ich probieren und Feedback geben.

Cooles Projekt, herzlichen Dank für wertvolle Arbeit!
Gruss Dani

Yaku

ZitatOder steig tiefer in die Materie ein und bringe z.B. den µIP-Stack auf dem Arduino zum Laufen.

Gruß,

Norbert

Wenn etwas für den Atmel 328 portiert ist ist es somit noch nicht automatisch fuer den Arduino nutzbar ?
Nein ich habe selbst nur w5100 und kein interesse etwas mit uIP zu machen aber ich war interessiert und habe das hier gefunden:
http://code.google.com/p/avr-uip/

fragend schaut

Yaku



ntruchsess

Zitat von: Yaku schrieb am Sa, 25 Mai 2013 10:02Wenn etwas für den Atmel 328 portiert ist ist es somit noch nicht automatisch fuer den Arduino nutzbar ?[...]habe das hier gefunden:
http://code.google.com/p/avr-uip/

Hallo Yaku,

vielen Dank für den Hinweis, da bin ich noch nicht drüber gestolpert. Klar, das sollte sich tatsächlich mit geringem Aufwand für den Arduino nutzen lassen!

Gruß,

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

justme1968

noch eine kleine versändiss frage:

im report() des DHT11   features sendest du nach dem reserved command eine 7. auf der perl seite liest du dort den pin aus. müsste statt der hard codierten 7 nicht wirklich der pin gesendete werden ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ntruchsess

Zitat von: justme1968 schrieb am So, 26 Mai 2013 12:49müsste statt der hard codierten 7 nicht wirklich der pin gesendete werden ?

Hallo Andre,

jetzt wo Du's sagst merk ich, dass ich im März vergessen habe meinen letzten commit auf github zu pushen... die '7' ist natürlich ein Tippfehler. Die Fehlerbereinigte Version ist jetzt auf Github aktualisiert

Gruß,

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

justme1968

so. eine aller erste version läuft und ich kann die daten mit dem perl test programm lesen.ich konnte aber nicht die NewPing library verwenden sondern habe den sensor direkt von hand angesteuert. die library liefert mir nur 0 statt einer entfernung. gibt es einschränkungen bezüglich timern oder interupts mit firmata ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ntruchsess

Zitat von: justme1968 schrieb am So, 26 Mai 2013 17:39gibt es einschränkungen bezüglich timern oder interupts mit firmata ?

Die Firmata selbst benutzt keine Interrupts oder Timer explizit. Im Zweifelsfall würde ich für die zeitkritschen Codezeilen aber sowieso die Interrupts disablen (schau z.B. mal wie das in der OneWire-library gemacht wird).

Gruß,

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

woody

Hallo Leute,
leider bin ich jetzt mit den ganzen sketches und owx/frm versionen durcheinander gekommen.
Kann mir mal einer vieleicht sagen was mit wem läuft?
welcher arduino-sketch läuft mit welcher owx-version?

Vieleicht auch mit links?

Viele Grüße und Dank im Vorraus

woody

PS: verwende einen Arduino uno mit wiznet board, DS1820 als Sensoren.

ntruchsess

Zitat von: justme1968 schrieb am So, 26 Mai 2013 17:39ich konnte aber nicht die NewPing library verwenden

Hallo Andre,

muss man zum messen mehr machen als einen Pin An + Auschalten und anschließend am anderen Pin per 'pulseIn' die Zeit messen? Wenn ja, dann wäre ein Ansatz auch das pulseIn-protocoll (siehe Proposal und Beispielsimplementierung) als Firmata-feature-klasse zu implementieren und den Rest remote zu steuern. Man müsste halt die Folge 'Pin an -> Pin aus -> PulseIn' als Task schedulen (siehe mein Beispiel hier) um das Timing zu garantieren, es hätte halt den Vorteil, das (sobald PulseIn in der ConfigurableFirmata aufgenommen wird) man mit einer 'StandardFirmata' auskäme und der Rest im FHEM-modul abläuft.
Eine Ultraschall-ping-feature-klasse hätte halt den Vorteil vom Protokoll her etwas schlanker zu sein (dafür aber vermutlich ein bischen mehr Flash Speicher zu brauchen) und fortlaufende schnelle Messungen per report-methode zu ermöglichen. Nur denke ich, dass man grade letzteres im Hausautomationsbereich eher nicht benötigt.

Gruß,

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

ntruchsess

Zitat von: woody schrieb am Mo, 27 Mai 2013 14:34Kann mir mal einer vieleicht sagen was mit wem läuft?[...]uno mit wiznet board

Hallo Woody,

OWX mit Arduino am besten hiermit: fhem_owx Branch refactoring bzw. direkt als zip file.
Noch in Entwicklung (da mache ich regelmäßig updates), OWTHERM und OWCOUNT laufen damit bei mir recht stabil fhem_owx Branch refactoring_async bzw. auch als zip file. Fragt DS18B20 und DS2423 asynchron ab. Damit bleibt die Weboberfläche auch bei kürzeren Abfrageintervallen recht flott.

Die EthernetClientFirmata ist im Prinzip immer noch die gleiche (aus dem Branch 'configurable_ethernet') bzw. auch als zip file. Da gibt's aber bald mal ein Update, die nächsten Tage ist schlechtes Wetter und ich wollte mich mal um eine Überarbeitung des Reconnects kümmern.

Gruß,

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

justme1968

hallo norbert,

im prinzip ist es das. den impuls los schicken und mit pulsein auf das echo warten.

allerdings habe ich bemerkt das zumindest bei meinem sr04 die messergebnisse deutlich stabiler und genauer sind wenn man noch ein wenig aufbereitung rein steckt. d.h. eindeutige ausreißer weg schmeißen eventuell den rest klassifizierrn und auswählen und dann über den rest mitteln. de anzahl der messungen kann dann durchaus 20 bis 50 betragen aus denen dann das ergebnis erzeugt wird. da die temperatur auch fast 10% einfluss auf das ergebniss hat sollte man die auch berücksichtigen. da man die idealer weiß gleich mit erfasst ist halt wieder die frage wie intelligent man den sensor macht. die glich ist es ja schade wenn man das auf aufbereiten dann doch auf dem server macht. ich würde am liebsten sogar die bestimmung der füllmenge aus dem füllstand noch auf arduino machen und nicht in fhem.

ich schaue mir deinen vorschlag aber auf jeden fall mal an. schließlich ist die zeit ja nur nur beschränkt.

gruss
   andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

eburkon

Servus Miteinander,

ich bin hier auf diesen Thread gestoßen und bin leider etwas verwirrt.

Ich habe einen Arduino Micro (unter Anderem)
und einen Raspberry.

Ich möchte den Micro über USB an den Raspberry anbinden und im einfachsten Fall
nur Temperaturen Messen.

Im etwas komplexeren Fall wäre da noch ein BMP085 Luftdrucksensor ...

Was ich jetzt nicht ganz kapiere, welche von den StandardFirmata Versionen
ich denn da jetzt benutzen kann.

Und dann wäre da noch ein generelles Problem den Arduino Micro betreffend.
Wenn ich die ganz normale StandardFirmata aus der IDE benutze und das Testtool
anwerfe bekomme ich vom Arduino Micro nichts zurück wenn ich das Selbe mit meinem
Arduino Uno mache klappt es.
Der Micro ist ja etwas abgespeckt was die USB Seite angeht muss ich da irgend
etwas spezielles machen?

Danke & Gruss
   Ekkehard

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