Nützliches Template? Frage an die Arduino Softies ...

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hi,
    ich habe jetzt mittlerweile drei oder vier Ansätze für einen Lösungsansatz wieder verworfen, weil ich sie suboptimal fand.

    Hintergrund:
    Ich hab' ja -> hier <- mal einen Pro Mini als Funksensor im 2.4 GHz Band eingesetzt, und mit -> diesem <- Programm die Daten auf einem Raspi empfangen.

    Nun ist es so, dass ich neben einer 2.4 GHz Funkstrecke auch den Standard 433 MHz, den RFM12B, den High-Tech 433 MHz Transmitter/Receiver unterstützen möchte. Eine Verbindung sollte natürlich mittels WLAN (ESP8266), rs232, SPI, IIC ... ebenfalls möglich sein.
    Dazu kommt, dass ich mir da ein nettes Tool names "EMONCMS" angeschaut habe, das über diverse Schnittstellen für externe Standard-Sensoren verfügt. Da wäre die Idee natürlich, diese Protokolle auch zu unterstützen.
    Und schliesslich soll ja nicht nur der BMP085 unterstützt sondern sowohl eine Reihe anderer Sensoren als auch Aktoren angesteuert werden.

    Das Ganze wollte ich zunächst als Libraries für die Arduino-IDE realisieren. Schliesslich will ich ja, dass auch andere was davon haben ;) ...
    Leider klappt das nicht so recht: die sketches werden einfach zu gross.

    Und jetzt kommt ihr ins Spiel: wie würdet ihr dieses Problem angehen?
    Sollte ich mal eine Library für die Verbindung erstellen und diese wird dann um das passende Protokoll und die verwendeten Sensoren erweitert?
    Oder wäre es sinnvoller eine Lib für die verschiedenen Sensoren zu erstellen, deren Objekte dann um die Verbindung und das Protokoll erweitert werden?
    Wäre es sinnvoll, das alles über #defines zu machen oder besser vorbelegte Variablen mit der Möglichkeit die Parameter zu ändern?
    Das Ganze soll dann übrigens im EEPROM des Arduino abgespeichert werden.

    Irgendwie drehe ich mich jedenfalls im Kreis ... nichts, was ich bis jetzt ausprobiert habe war imho so überschaubar und leicht zu managen, dass es auch jemand hinbekommt, der nicht mit meinem Programmierstil vertraut ist.

    Also Leute, Feuer frei ... mal sehen, was wir da austüfteln können.


    thnx,
    -ds-

  • Nützliches Template? Frage an die Arduino Softies ...? Schau mal ob du hier fündig wirst!

  • Hallo Dreamshader,

    zwar bin ich erst seit 5 Wochen auf "Arduino" - aber ich habe trotz der Kürze der Zeit schon ein paar verblüffende Sachen hinbekommen.

    Aber ich bin dabei...

    Als Lösungsansatz kann ich mir Folgendes vorstellen

    - Eine Library für jeden Sensor / Aktuator, die in dem Sinne "offen" ist, dass Protokolle für die verschiedenen Kommunikationen eingebunden werden können. So kann z.B. eine Methode SensorX.communicate() heißen - aber unbestimmt sein

    - Eine Library für jedes Protokoll.

    Der Entwickler neuer Sketches muss dann nur die Library des Sensors / Aktuators einbinden und die Methode communicate durch eine Methode des entsprechenden Protokolls verknüpfen.

    So bleiben die Libraries kurz und zweckentsprechend. Die neuen Sketche bleiben auch kurz, da nur die benötigten Libraries geöffnet werden.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (2. Februar 2015 um 00:03)

  • Naja ... so ähnlich hatte ich das schon mal ;) ...
    Das sieht so aus:

    pSensor ist dann z.B. ein BMP085- oder eine DS18B20-Objekt.
    Allerdings ist die Kommunikation nicht am Sensor festgemacht (weil der ja nicht selbständig senden kann) sondern am Arduino der die Rolle einer Sensor-Station spielt:


    wobei remoteConnection wiederum eine Klasse ist:


    die aus einer union besteht:

    Klappt so weit auch ... nur: wird ziemlich undurchsichtig für Leutchen, die nicht so tief in genau diesem Thema stecken und ausserdem werden halt die sketches sehr gross. Was erschwerend dazu kommt: es bleibt auch sehr wenig SRAM übrig.
    Mein Fazit: die eierlegende Wollmilchsau ist nicht realisierbar.
    Deshalb würde mir ja schon eine Eiersau reichen ... ;)

    cu,
    -ds-

  • Also ...
    nachdem der Input hier ja leider etwas mager ausgefallen ist (Grund mag auch sein, dass ich mein Anliegen nicht verstndlich vermitteln konnte) habe ich jetzt mal die gefühlt 77 1/3te Variante für diese Fern-Sensoren Geschichte vorbereitet.

    Gedacht hatte ich mir das so:
    ein sketch dient als Grundgerüst für alle Sensor-/Verbindungs-Varianten:

    Da ist jetzt (noch) nicht viel los ... lediglich ein Objekt des Typs RemoteStation wird erst mal angelegt.
    Dieses Objekt hat nun diverse Variablen, die auf Klassenebene definiert sind und die das Verhalten der "Station" beeinflussen. Was da jetzt genau alles dazu gehört lasse ich mal aussen vor und stelle es dann vor, wenn der ganze Kram so tut, wie ich es mir dachte.

    Um dieses Grundgerüst mehrfach zu verwenden müssen diese Eigenschaften und Variablen auf entsprechende Werte gesetzt werden. Dies geschieht beim allerersten Erzeugen der Station. Diese Einstellungen werden dann im EEPROM gespeichert und ab diesem Zeitpunkt nur noch ausgelesen.

    Um diese Werte mit sinnvollen Werten vorzubelegen habe ich dei Einstellungen in Include-Dateien ausgelagert. Für die Station heisst diese z.B. StationSettings.h und hat etwa folgenden Inhalt:


    Dadurch ist es jetzt z.B. möglich diesen einen sketch sowohl für eine rs232- als auch für eine WLAN-Verbindung zu nutzen, ihn auf verschiedenen Arduinos mit unterschiedlichen IIC-Addressen einzusetzen usw.

    Ich habe mir vorgestellt nach dem selben Schema mit den eigentlichen Verbindungsdaten - das wäre dann die ConnectionSettings.h:

    zu verfahren. Vielleicht kann ich auch die Sensorabteilung nach dem selben Schema da mit einbeziehen.
    Inwieweit sich das jetzt alles so wie gedacht auch umsetzen lässt, wird sich noch herausstellen. Durch den begrenzten Speicher des Arduino (sowohl Flash als auch SRAM) sind die Grenzen natürlich ziemlich eng gesteckt. Das soll mich jetzt aber nicht stören ... das ergibt sich dann automatisch in welchem Rahmen das jetzt alles so möglich ist.

    Bevor ich jetzt aber das Ganze weiter ausbaue hätte ich ganze gerne Eure Meinung dazu, ob ihr mit so einem "Template" was anfangen könntet und ob die Idee dahinter verständlich und nachvollziehbar ist.
    Ziel ist halt einen möglichst einfachen "Framework" zu erstellen um nicht für jede Variante immer und immer wieder einen komplett neuen sketch (um-) zu schreiben.
    Ich hoffe, das ist diesmal etwas verständlicher rübergekommen als beim ersten Mal.

    Also: fändet ihr so was sinnvoll / würde Euch so was helfen / würdet ihr so was einsetzen / was fehlt noch?

    Bei Fragen und Unklarheiten bitte einfach melden.
    Salü,
    -ds-

  • Na ich mach hier mal dicht ... kommt ja scheinbar leider nichts mehr.
    Dieser Stand des Framework ist ausserdem schon komplett überholt.
    Vielleicht hat ja später der eine oder andere mal Zeit und Lust ein bisschen damit herum zu spielen, wenn der erste Beta Stand fertig ist.

    cu,
    -ds-

  • Hallo Dreamshader,

    ich arbeite mich momentan noch in Arduino ein.

    Hm, die Kommunikation Raspberry Pi (Icon-Programm) mit Arduino (Sketch) habe ich schon hinbekommen. Ist 'ne spaßige Kombination und macht irre Spaß. Und alles, was mir Spaß macht, kriege ich auch flott auf die Reihe.

    Sobald ich auf der Höhe der Zeit bin, kannst Du mit mir rechnen.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Naja ... ich schmeiss ja jetzt nicht alles hin :) ...
    Ich wollte potentiellen späteren Nutzern/Interessenten die Möglichkeit geben, mal in der Entstehungsphase ein wenig Einfluss zu nehmen.
    Es wundert mich halt ein wenig, dass so eine Gelegenheit so spärlich genutzt wird.

    Aber danke für Deine aufmunternden Worte ;) ...

    Jedenfalls finde ich den Framework von Tag zu Tag genialer.
    Und - ich spar mir eine Menge Arbeit und schreib' nicht jeden Scheiss x-fach ;) ...

    cu,
    -ds-

    • Offizieller Beitrag

    Hmm, der Thread ist auch vollkommen an mir vorbei gegangen :). gut ich bin nun auch kein erwähnenswerter C Programmierer um hier steuernd eingreifen zu können aber ich find es immer grossartig das Leute wie dirk gibt, dies sich hinsetzen und versuchen alles unter Hut zu kriegen (auch wenn dieser Hut nur ein paar kb gross ist ;) )

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Habe mal versucht zu verstehen, was du da tust...

    Mein Ansatz dazu sieht etwas anders aus. (bin aber noch nicht weit fortgeschritten)
    Bei mir heißen die Arduinos "Knoten"

    Ich bastel mir gerade einen Konfigurator, welcher mir die Sketch Verzeichnisse anlegt und dann auch automatisch füllt. Der Konfigurator soll u.A. Kollisionen auflösen/bemerken.
    Z.B: Pin13 wird für SPI benötigt, darum geht kein Blink auf dem Pin

    Unter anderem wird für jedes Sketch Verzeichnis eine Batchdatei generiert.
    (die zeige ich gleich mal als Beispiel)
    Diese Batch kann dann per Mausklick einfach aufgerufen werden, oder automatisch aus dem Konfigurator(so weit ist es noch nicht) .


    spruch.png

    Einmal editiert, zuletzt von combie (13. Februar 2015 um 16:18)

  • Hi combie,

    ich muss da jetzt noch mal nachhaken:
    Du hast da, wenn ich das richtig sehe, den build-Prozess automatisiert. Das ist auch eine interessante Geschichte. Hat allerdings den Nachteil, dass Du das als batch-Job für Windows realisiert hast, was mir z.B. aber leider nichts nutzt, weil ich kein Windows (mehr) verwende.

    Ausserdem ist es etwas anderes, als das, was ich vor habe.
    Ich möchte quasi ein Standard-Template für z.B. eine Arduino Plattform mit nrF24L01+ Funkverbindung.
    Das heisst: Du stöpselst erst mal die Verbindungen an das Funkmodul und trägst dann im Konfigurations-File nur noch die verwendeten Pins ein.
    Den Rest übernimmt das Framework ... vom passenden setup bis hin zum Aufruf in der loop.

    Klingt alles furchtbar kompliziert ... ist es aber nicht :) ...

    naja ... man wird sehen,
    liebe Grüssw aus dem grauen Alpenvorland,
    -ds-

  • Ja, Windows!
    Mit allen Vor- und Nachteilen.
    Insbesondere ärgert mich das Kommunikationsproblem Arduino <--> PHP über die serielle Schnittstelle.
    Keine Chance bisher. (ist eine andere Baustelle)

    Funktioniert der automatische Build nicht unter Linux?
    Hätte ich doch erwartet, dass die IDE unter Linux die gleiche Funktionalität bietet.
    Klar, nicht *.bat, sondern *.sh, oder so...


    Zitat

    Ich möchte quasi ein Standard-Template für z.B. eine Arduino Plattform mit nrF24L01+ Funkverbindung.


    Da gehe ich noch mit konform.

    Erstmal zu meinen Problemen/Herausforderungen:
    Ich betreibe 2 Netzwerke (maniacbug nrf24 network). Ein etwas größeres, im Feld, mit 12 Knoten. Und ein kleines mit 5 Knoten hier auf dem Tisch.
    Im Einsatz sind Pro Minis, der ein oder andere Uno und Mega2560.

    Die Netzanbindung erfolgt z.Zt. über ein Ethernetshied auf einem Mega2560. Das Shield soll demnächst durch ein ESP8266-01 ersetzt werden. Raspberrys haben sich da nicht wirklich bewährt. Ich sach nur "Stromausfälle und SD-Karten". Akkupack? Unerwünscht.

    An Sensorik kommen
    1Wire Themperarurfühler
    IR Empfänger TSOP xxxx
    Volt (analoger Input)
    Bewegungsmelder (und andere digitale Eingänge)
    zum Einsatz.

    Aktoren:
    PWM Ausgänge
    Relais, auch SSR ..
    IR Sende Dioden
    Schalttransistoren FETs


    Kommunikation:
    Arduino <-> Lan (noch Ethernetshield)
    Arduion <-> Arduino "nrf24 network" und I2C Multimaster
    Seriell hätte ich auch noch gern RS485, CAN
    DMX512 wird wird für das nächste (angeplante) Netz nötig.

    Jeweils ein Knoten im Netz bekommt eine I2C RTC .
    Im großen Netz hat der Ethernet Knoten noch eine SD Karte für das Web Gedöns und ein (ein anderer Knoten ein) NVRam 23LCV1024


    Die jeweiligen (eingebauten) EEProms beinhalten:
    Eine ID, welche einmalig einem Arduino zugeordnet wird. (auch Aufkleber)
    Und halt sonstige Daten, welche selten verändert werden.
    Zum Beispiel:
    Korrekturwerte für analoge Sensoren
    Netzwerkkennungen (nrf24 network)
    Knoten Adresse (nrf24 network)
    Festgelegte IP für den Ethernetknoten.


    Den Traum, dass jeder Knoten alles können soll, betrachte ich als geplatzt. Das Ram reicht einfach nicht. Und mit Flash wirds auch sicherlich knapp.

    Der Plan:
    Ich schnappe mir einen beliebigen Arduino aus der Grabbelkiste, stecke ihn an meinen PC. Mein Konfigurator versucht die "Arduino ID", die ich im EEProm verstaut habe, per serieller Schnittstelle zu lesen.
    Gelingt das, wird die Software Revision geprüft, evtl. neu geflashed. Das EEProm auf neuen Stand gebracht.
    Gelingt das Lesen der ID nicht, wird von einem neuen Knoten ausgegangen und erstmal eine rudimentäre Software aufgespielt, welche mir das modifizieren des EEProms erlaubt.

    Schön ist, dass die IDE die EEProm HEXFiles generieren kann.
    Schade ist, dass der Bootloader diese nicht akzeptiert.


    Der Konfigurator:
    Angefangen habe ich in PHP, bin aber an der seriellen Schnittstelle versagt.
    Jetzt gehts das mit FPC, bzw. Lazarus dran.

    Die jeweilige Knoten Konfiguration wird in einer SQLite DB gehalten.
    Das Source Verzeichnis/Dateien soll anhand der DB jederzeit neu generiert werden können.

    Im Endstadium möchte ich am Bildschirm ein Netz von Knoten erstellen, den einzelnen Knoten individuelle Aufgaben, Sensoren, Aktoren verpassen. Der Konfigurator soll mich auf Kollisionen usw. hinweisen.
    Sensoren/Aktoren sollen Netzwerk weit unique benannt werden.
    Also nicht Digitalpin 8 an Knoten 4711 im Netz 4, sondern "Flurlicht".
    Des weiteren hätte ich gerne eine kleine "Programmiersprache" auf den Arduinos. So was wie ein Bytecodeinterpreter. Um z.B. die Zuordnung zu machen, welcher Bewegungsmelder welche Lampe, zu welcher Tageszeit schaltet. Der Bytecode darf dann von mir aus im EEProm oder NVRam liegen. (dann brauche ich keine Leiter bei kleinen Änderungen)


    Naja....
    Wenn du den lieben Gott zum lachen bringen willst, dann mach Pläne.
    Aktueller Stand: Ich stecke noch in den ersten 10% der Planerfüllung.

    spruch.png

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!