Welchen C-Code um Sensoren mit Pi4 auszulesen?

  • Hallo Leute,


    ich lerne seit über einem Jahr C. Meine aktuelles Projekt ist eine Gewächshaus-Steuerung mit dem Pi4. Das Programm ist soweit fertig. Ich weiß jetzt aber nicht, mit welchen Code-Zeilen ich die Sensor-Werte auslesen kann. Hat jemand Erfahrung damit und kann mir helfen?


    - Sensor DS18B20

    - DHT22

    - BMP180

    - MI Flora Sensor


    :danke_ATDE: und Gruß Willi

  • Die Aussagen das Programm sei fertig und Du weisst nicht wie Du die Sensoren auslesen sollst, schliessen sich ja irgendwie gegenseitig aus. 😉


    Was hast Du denn schon gemacht um herauszufinden wie man die jeweiligen Sensoren ansprechen kann? Liste doch mal wie man die jeweils anschliesst, welche Protokolle die ”sprechen” und welche C-Bibliotheken es dafür jeweils gibt. Oder wolltest Du jetzt einfach die komplette Recherche und vielleicht sogar noch die Programmierung hier anderen überlassen? 😀

    “The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use the words.” — Philip K. Dick, How To Build A Universe That Doesn't Fall Apart Two Days Later

  • "Soweit" sollte ausdrücken, dass es fast fertig ist. Halt bis auf den Teil der Sensoreinbindung :conf:


    Bisher hab ich im Netz versucht was zu dem Thema zu finden. Für Python gibt es ja jede Menge Infos, aber für C finde ich das Angebot eher mäßig. Ich möchte deshalb jetzt auch nicht zu Python übergehen, sonder C weiter lernen, weil genau das mein Uranliegen war und ist.


    Bisher habe ich mich nur mit dem DHT22 beschäftigt, um mal einen Anfang zu schaffen. Laut Recherche soll man die Bibliothek "wiringPi.h" oder "pigpio" im Quelltext einbinden.

    Anschluss des Sensors: Pin1 mit 3,3 Volt und Widerstand belegen, Pin2 ist die Datenleitung zu GPIO 2 und Pin4 geht an Ground.


    Viel mehr konnte ich noch nicht herausfinden.


    Im Grunde würde ich mir gerne alles selber erarbeiten, wobei ich eine weitere Hilfestellung nicht ablehnen würde :)


    :helpnew: Ich nehme gern alle (Lese-)Tipps, Hinweise, Anleitungen, Scripts... an :helpnew:

  • Moin @all,


    wenn ich den Link "DHT22" in der Nachricht oben drüber klicke, sind mir im Code noch paar Sachen unklar. Es dreht sich alles um die for-Schleife von Zeile 91 bis 116:


    Warum läuft die Schleife 85 mal für 40 Bit Daten und warum werden die ersten 3 Durchgänge (i=0-i=3/meines Erachtens müsste das auch 'ignore 4 transitions' heißen) in Zeile 108 ausgespart?

    (Würden 4 (0-3) ausgespart, würde es Sinn machen, wenn nur jeder 2 Wert (i%2) gelesen und in den Speicherbytes gespeichert wird. Somit käme man auf 40 Bit Daten als 0 oder 1).


    Warum läuft die while-Schleife in Zeile 94, wenn true, 255 mal? Und warum wird sie für eine Microsekunde unterbrochen?

    (Die Unterbrechung wahrscheinlich, damit das nächste Bit vom Sensor gesendet wird, aber das mit "255" verstehe ich gar nicht. Hat das mit 2hoch8 Möglichkeiten zu tun oder doch mehr mit ASCII?).


    Den Code in Zeile 111 bis 113 verstehe ich auch nicht richtig.

    "dht22_dat[j/8] <<= 1" deute ich so, dass die ersten 8 Bit (j=0) von rechts nach links in das Speicherbyte geschoben werden. Und die zweiten 8 Bit halt in das 2. Speicherbyte (j=1). Die Zeilen 112 und 113 verstehe ich leider zu wenig, um dazu was zu schreiben.


    Schön wäre, wenn mir jemand (möglichst ausführlich) Licht in das Dunkel bringen könnte :danke_ATDE:


    Frohe Weihnachten!

  • > Warum läuft die Schleife 85 mal für 40 Bit Daten

    Weil es 80 Wechsel von 0 auf 1 gibt fuer 40 Bytes


    > Warum läuft die while-Schleife in Zeile 94, wenn true, 255 mal?

    Die laeuft nicht 255 mal so lange der Sensor reagiert. Die 255 sind der "Notausgang" wenn keine Flanke detektiert wird.


    > dht22_dat[j/8] <<= 1

    Macht Platz fuer das naechste Bit. Wenn das folgende if nicht erfuellt ist, bleibt das Bit 0.