Einsatz von mehr als zwei 0,96 Zoll OLED Display I²C mit 128×64

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Zitat von jar


    NIE ein Arduino sollte nie terminieren also das PRG hat kein Ende!

    Alles klar, das ist angekommen :)

    Ich denke ich kann programmieren, vor etlichen Jahren schon in C++ allerdings keines falls profihaft und sicher ausbaufähig. Also auch den Aufbau eines Arudino-Programms kenne und verstehe ich :) Es ging damals mit dem MyAVR allerdings nie über ein "lasse LED leuchten wenn Taste gedrückt" und sowas hinaus. Ich hatte damals sehr schnell das Interesse verloren da mir der Weg bis der Code seinen Platz auf dem µC eingenommen hatte schlicht viel zu kompliziert war.

    Meine ersten Gehversuche siehe weiter oben sind ja funktionierend mit DHT22, zwei Drähte zwischen NANO und Pi und der Ablage in der MySQL, alle 120sec wurde der NANO abgefragt. Kleines Script unter Python auf dem Pi und ab dafür. Wie soll ich sagen, das ist nicht aus dem Netz zusammenkopiert :) Äh, bis auf das Pythonscript - da musste ich mir schon was Fertiges zurecht bauen da mir die Synthax einfach noch nicht klar ist und ich schnell was sehen wollte bevor ich Bücher studiere :stumm:

    Ist nicht böse gemeint und kannst du ja logischerweise auch nicht aus der Ferne einschätzen, ich brauche keinen kompletten Quellcode :)
    Aber trotzdem großen Dank für deine Unterstützung!!

    Einmal editiert, zuletzt von Masterkennie (13. Juni 2017 um 11:31)

  • Einsatz von mehr als zwei 0,96 Zoll OLED Display I²C mit 128×64? Schau mal ob du hier fündig wirst!


  • du kannst doch den PI in C proggen
    also Python muss man sich nicht antun :)

    http://kampis-elektroecke.de/?page_id=1544

    so hatte ich auch mal angefangen

    Muss ich mal sehen, da sind einfach wieder Erfahrungen gefragt. Von Python weiß ich z.B., dass es "MySQL Spricht".

    Sicher noch schöner zu bauen und mit der heißen Nadel gestrick damit ich schnellstmöglich mal was sehe, aber hier mal der/das Sketch welches in meinen ersten Gehversuchen Klimadaten auf Zuruf an den Pi gesendet hat:


    Automatisch zusammengefügt:
    Aber eines ist noch offen, wofür ist der laufende Index in der Zeichenkette nötig?

    Einmal editiert, zuletzt von Masterkennie (13. Juni 2017 um 12:01)

  • Hallo Masterkennie,

    Muss ich mal sehen, da sind einfach wieder Erfahrungen gefragt. Von Python weiß ich z.B., dass es "MySQL Spricht".


    Was ist denn mit meinem Vorschlag, auf dem RPi in Processing zu programmieren? Das ist nahezu identisch mit Arduino-C++. Auf dieses Weise musst Du Dich nur mit einer einzigen Programmiersprache beschäftigen. An Arduino-C++ kommst Du üblicherweise kaum dran vorbei.



    Aber eines ist noch offen, wofür ist der laufende Index in der Zeichenkette nötig?


    Das ist die einzige Möglichkeit, wie der RPi überhaupt erkennen kann, dass eine bestimmte Anfrage / Aufforderung auch beantwortet wurde. Oder wie verlässlich wäre es, wenn der RPi um Klimadaten bittet - aber keine Erkenntnisse vorliegen, dass die Daten valide angekommen sind, verstanden wurden = eine Aktion beim Empfänger auslösen und schließlich valide Daten zurückgemeldet werden.
    Du kannst statt des laufenden Index natürlich auch einen Zeitstempel mitschicken, aber der hat als UNIX-Timestamp 8 Bytes und als Zeichenkette mindestens 6 Bytes. Einen laufenden Index kannst Du in Deinem Fall auf 8 Bit begrenzen.

    Ein netter Nebeneffekt besteht darin, dass Du auf diese Weise feststellen kannst, wie störanfällig die Kommunikation verläuft. Wenn der Sender sich nicht wirklich für die Antworten interessiert, dann geht diese Erkenntnis auch unter.


    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 (26. September 2017 um 21:39)

  • ich würde ja Zeitstempel (vom PI wann die Abfrage gestartet wurde) mitschicken der Ardu antwortet mit diesem (oder + millis für seine Verabeitung), dann hat man einen zeitlichen Verlauf, erkennt Lücken usw.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (13. Juni 2017 um 12:40)

  • Andreas: Werde ich mir auf jeden Fall mal ansehen und mal reinschnuppern!

    Mit diesem Projekt geht es dann aber erst morgen weiter, heute ist bis zum ins Bett fallen dann noch Decke schleifen und Fensterlaibungen spachteln angesagt. Die Restbauarbeiten an unseren vier Wänden könnten da auch ein Grund sein warum ich das eine oder andere Mal nicht genau genug gelesen habe.....


  • ......Die Restbauarbeiten an unseren vier Wänden ....

    ich habe gerade meine alte Schlitzfräse fertig gemacht,enstaubt, geölt, neue Blätter rein, vor dem was kommt gruselt mir noch.....

    aber man will ja neue Kabel UP und im Leerrohr damit man auch mal was anderes reinziehen kann, nicht immer nur Kippen :)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Nach längerer Abstinenz und relativ intensiver Einarbeitung in die Materie Serielle-Datenübertragung melde ich mich hier mal wieder zurück. Meine bisherigen Versuche waren leider nicht ganz so erfolgreich weshalb ich noch mal um eure Hilfe bitten muss.

    Zum Testen der RS485 Verbindung zwischen zwei NANO´s (Slaves) und dem Raspi (Master) habe ich nun alles an Hardware vor Ort. Da meine Lötstation zwischenzeitlich verschwunden und nicht auffindbar war entschloss ich mich dazu das Ganze zunächst mit dem USB-Dongle für den Raspi sowie den RS485 Adaptern aus der Bucht aufzubauen da ich die Levelshifter schlicht nicht fertig löten konnte.

    Am letzten Samstag dann also mal ein Arduino-Sketch aufgebaut und den Raspi mit einem Arduino reden lassen. Klappte soweit auch gut, der Raspi sendete das Telegramm:

    Code
    FlurOG:Bigben:1:17:Senddata

    Übersetzung: <Adresse><Absender><lfd.Index><Datenlänge><Befehl>

    Daraufhin antwortete der NANO mit:

    Code
    Bigben:FlurOG:2:17:21.1:21.7:67.1\n

    Übersetzung: <Adresse><Absender><lfd.Index><Datenlänge><Raumtemperatur><Heatindex><Rel.Luftfeuchtigkeit>\n

    Sobald ich aber den zweiten NANO mit der Adresse "Schlaf" dran hing klappte nichts mehr :@ :wallbash: Im Arduino-Quellcode nutzte ich für die Kommunikation die internen Serial-Funktionen sowie den UART RX und TX Pin.

    Leider kann ich den Ursprungscode nicht posten, ich hab irgendwann morgens um 3:00Uhr alles einmal umgestrickt, damit alles verschlimmbessert und dämlicherweise unter dem gleichen Namen gespeichert :wallbash: Mit dem jetzigen Code ist nicht mal mehr der Serial-Monitor in der ArduinoIDE lauffähig bzw. gibt nur Mist raus.

    In den letzten zwei Tagen hab ich dann versucht mir diverse RS485 Beispiele aus dem Netz anzuschauen, werrde aber nicht so richtig schlauer.

    Ich hab das Gefühl, der Einsatz einer RS485Lib für den NANO ist am sinnvollsten, jedoch welche?

    Dann, hat jemand einen Tipp für einen C/C++ Compiler / Entwicklungsumgebung auf dem Raspi damit ich dort nicht mehr in Python rumhantieren muss? Am besten auch mit MySQL fähigkeiten?

    Einmal editiert, zuletzt von Masterkennie (15. August 2017 um 20:24)

  • Servus,
    schau doch mal in das Projekt von JumpY ... da hatten wir die RS485 mit Modbus verwendet. Hatte ich zwar schon im März mal dauf hingewiesen, ist aber vermutlich in Vergessenheit geraten ;) ... -> https://www.forum-raspberrypi.de/Thread-arduino…n-raspi-arduino

    cheers,
    -ds-

  • @-ds-:

    Was die Datenbankgeschichte angeht, MySQL-Server sowie die Datenbank "Klimadaten" mit entsprechenden Tabellen ist bereits installiert, aber das ist an sich erst mal ein anderes Thema.

    Zunächst geht es mir erst mal darum, Step-By-Step die Basis, also die RS485-RFID Vorlage von Jumpy und -ds- so um zu stricken, dass der Pi mehrere Arduinos nacheinander anspricht und diese die Klimadaten nur dann übermitteln wenn sie auch gefragt werden. Dazu kämpfe ich mich im Moment etwas durch den C-Code der auf dem Pi laufen soll...

  • Zitat von &quot;dreamshader&quot; pid='295460' dateline='1502822397'


    Servus,
    schau doch mal in das Projekt von JumpY ... da hatten wir die RS485 mit Modbus verwendet.

    Moin -ds- , ich könnte mal deine Hilfe gebrauchen.

    Ich weiß nicht was ich falsch mache oder an der SimpleModbus Lib nicht kapiere... Ich rätsel jetzt seit zwei Tagen, wie denn wohl die Datenübertragung per SimpleModbus funktioniert. Dazu habe ich folgendes mal auf meinen Klimadaten-Arduino geflasht:

    Also Strings/Zeichen per UART hin und her schicken bekomme ich ja hin, aber wie funktioniert das mit der ModbusLib? Auf dem Raspi habe ich Minicom laufen und erwarte jetzt praktisch, dass mir im Minikom irgendwelche Werte geliefert werden.

    Wie gesagt, ich steige bei SimpleModbus einfach nicht dahinter, vieleicht sitze ich schon zu lange dran und übersehe etwas? :s

    Verstehe ich das richtig, dass bei der Benutzung von SimpleModbus per modbus_update() Werte in Register geschrieben werden und sozusagen zu jederzeit vom Raspi (Minicom) ausgelesen werden können?

    Mir fehlt da im Quelltext irgendwie ein "modbus_send()" oder Ähnliches :denker:

    Einmal editiert, zuletzt von Masterkennie (25. September 2017 um 19:32)

  • Servus,
    der Slave schreibt einfach seine Daten in die Register und die "Übertragung" wird dann irgendwann durch den Master mit der Funktion modbus_update() ausgelöst.
    Am einfachsten ist es, wenn Du das Modbus-Monitor-Programm, auf das im Laufe des JumpY-Threads hingewiesen wird, verwendest.
    Die Beispiele, die beim Simple Modbus dabei sind, sind, wie ich finde, auch recht aussagekräftig.

    Vielleicht mal als Anhaltspunkt: der Slave ist wirklich zum Slave degradiert ... er kann keine Übertragung initiieren sondern das erfolgt ausschliesslich durch den Master.

    cu,
    -ds-

  • Hallo,
    ich danke dir für die schnelle und hilfreiche Antwort :danke_ATDE: :)

    Den QModBus hab ich installiert und wie folgt konfiguriert:

    Jedoch meldet der Modbus Monitor beim Klick auf "Send" immer, dass die Wartezeit für die Verbindung abgelaufen ist und ich habe keine Ahnung mehr, woran das liegen könnte.

    Auf dem Arduino befindet sich der folgende Sketch, einfach mal um zu testen und irgendwas zu sehen:

    Ich weiß nicht, ob ich mich zu dämlich anstelle oder irgendwas sonst noch verbogen ist :wallbash:=(

  • Servus,
    tja ... das ist jetzt schwierig, dazu was zu sagen. Das kann alle möglichen Gründe haben.
    Du hast einen modbus_update() zu viel in loop() ... aber das sollte keine grosse Rolle spielen.
    Hast Du jetzt RS485 Adapter dran?
    Hast Du mal eines der Beispiele probiert?

    cu,
    -ds-


  • Moin,
    ich denke, ich hab den Fehler gestern Abend gefunden. In QModBus war die Funktion 0x4 eingestellt, im Sketch des Arduinos allerdings die Funktion 0x03 (so wie es ja auch sein soll). Getestet hab ich es dann mal mit einem Sketch aus den Beispielen und es hat einwandfrei geklappt :bravo2: Einzig, nach Anpassung des Packet-Arrays (also statt 16Felder nur drei) wurde dann in "Raw Data received" nichts mehr angezeigt :denker:

    Kannst du mir noch mal verraten durch welche Befehle oder Aktionen im Arduino-Sketch das Feld "ModBus requests/Responses" gefüllt wird? Dort erscheint nicht immer ein neuer Eintrag nach dem Klicken von "Send". Und dann wüsste ich noch gern was der Unterschied zwischen "Registers" und "Raw data received" ist. Leider hab ich noch keine anständige Hilfe zu QModBus finden können - war aber auch spät gestern :angel:

    Muss die Funktion

    Code
    modbus_configure(&mySerial, 9600, SERIAL_8N2, 10, 10, HOLDING_REGS_SIZE, holdingRegs);

    eigentlich am 6. Parameter verändert werden wenn der Master an den Slave schreiben soll? Z.b. wenn der Master feststellt, dass die übergebenen Temperaturwerte Nonsens sind oder fehlerhaft übertragen wurden und den Slave anweisen soll die Register zeitnah noch mal neu zu beschreiben.

    Einmal editiert, zuletzt von Masterkennie (27. September 2017 um 08:00)

Jetzt mitmachen!

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