HYT 939 Temperatur- und Feuchtesensor auslesen

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

    ich habe jetzt schon so viel herumgesucht, aber nichts brauchbares gefunden, daher stelle ich jetzt hier mal konkret meine Frage:

    Ich habe mir einen HYT-939 Temperatur- und Feuchtesensor beschafft. Dieser Sensor wird am I²C Bus betrieben, was ich auch soweit hinbekommen habe, wenn ich i2cdetect starte, wird er korrekt an Bus 1 Adresse 28 erkannt.
    Die Frage ist jetzt: Wie liest man die Werte davon aus? :helpnew:
    Aus den Beschreibungen im Datenblatt werde ich nicht so recht schlau.
    Am liebsten würde ich das in C oder C++ machen, Python ist aber auch ok.

    Das Ganze soll später dahin gehen, dass ich in regelmässigen Zeitabständen die Werte erfasse (mit mehreren solchen Sensoren) und in einer SQL-Datenbank ablege.

    Besten Dank schonmal .. Yogi

    Einmal editiert, zuletzt von yoogii (30. Mai 2014 um 15:22)

  • Hallo Yogi,

    erst einmal herzlich willkommen in diesem Forum!

    Mal schauen, was man machen kann.

    Als erstes braucht man ein Datenblatt ...


    Hast Du eines?


    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.

  • Hallo Yogi,

    1. Schritt: I2C aktivieren

    Code
    sudo nano /etc/modprobe.d/raspi-blacklist.conf

    Dort gibst Du vor der Zeile, die i2c enthält ein # ein und speicherst die Datei wieder

    2. Schritt: I2C-Funktionalität beim Booten

    Code
    sudo nano /etc/modules


    Am Ende gibst Du ein

    Code
    i2c-dev

    Und wieder speichern

    3. Schritt: Update

    Code
    sudo apt-get update

    4. Schritt: I2C-Tools / Python-Tools installieren

    Code
    sudo apt-get install i2c-toolsw python-smbus


    5. Schritt: Pi der Gruppe i2c hinzufügen

    Code
    sudo adduser $USER i2c

    6. Schritt: Module laden

    Code
    modprobe i2c-bcm2708 i2c-dev


    ...

    Pause ...

    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 (30. Mai 2014 um 21:10)

  • Hallo Andreas,
    zuerst mal vielen Dank für die schnelle Antwort.

    Einen Teil von dem Beschriebenen habe ich bereits vorher durchgeführt, nur das mit dem User und dem booten noch nicht.

    Die Datenblatt-PDFs habe ich mal an dieses Posting gehängt.
    Ich bin in der Beschreibung etwas verwirrt, da ich bisher davon ausging, dass man auf dem I²C Bus entweder sendet oder empfängt. Es liest sich aber so, als ob man in einem Arbeitsgang den Messbefehl auslösen kann und dann gleichzeitig das acklowledge bekommt. Das leuchtet mir irgendwie nicht ein :s
    Und weiterhin ist dort die Rede davon, dass man entweder in zwei Byte den Feuchtigkeitswert bekommt, und falls man die Temperatur mit erfassen möchte, dann eben 3 Byte ausliest. Und im dritten Byte dann das Temperatur-Highbyte bekommt.
    In den niederwertigen 6 Bits des vierten Bytes kann man den Rest der Temperatur erfassen. Dessen Erfassung wurde jedoch nicht näher erwähnt. Was mir dabei wiederum nicht in den Kopf will, ist, wie man eine auf 0,2 Grad Celsius genaue Temperatur im Bereich von -40 bis +125 Grad inclusive Vorzeichen mit den paar Bit auflösen kann. Kann gut sein, dass ich in dem Datenblatt was übersehen habe, aber mir kommt es wirklich sehr spartanisch vor, da hätte man vielleicht etwas tiefer in die Materie gehen können.
    Hoffe, wir können da etwas Licht in's Dunkel bringen :)
    Interessant wäre zuerst, herauszufinden, wie man die Temperatur UND die Feuchtigkeit ausliest und in Variablen packt. Die Maskierung und Skalierung sind dann sicherlich nicht mehr soo schwierig ;)
    Grüsse .. Jörg

  • Hallo Jörg,

    na sooo unverständlich ist das Datenblatt ja nun auch wieder nicht. Zudem bieten die doch an, ein C-Beispiel zur Verfügung zu stellen (schon mal auf deren Website nachgeschaut? Vllt. ist ja sogar direkt zum Download da.)
    Ich hab' jetzt mal ein Beispiel für die Arduino IDE gefunden. Das ist ähnlich zu C und Du findest es -> hier <-.

    Prinzipielles zum Handling der I2C-Schnittstelle auf dem RPi in C findest Du z.B. -> hier <- oder -> hier <-.
    cu,
    -ds-

  • Hallo dreamshader,

    beim Versuch die Homepage zu erreichen, wird man irgendwie umgeleitet. Habe dann die Mailadresse genutzt um nach dem besagten C-Beispielen zu Fragen, darauf hin kam Antwort vom Mailer-Dingens, das die Mail nicht zustellbar sei. Weiter habe ich jetzt noch nicht recherchiert, womöglich gibt es die Firma nicht mehr, oder was auch immer, sobald ich es rausfinde kann ich es ja mal hier posten.
    Aber jetzt erstmal besten Dank, ich werde dann mal deine Links aufsuchen ;)

    Bis dahin .. Grüsse yogi

  • Hallo nochmal,
    ich habe mich inzwischen ein bisschen über die I²C Spezifikationen und Grundlagen informiert, so langsam kommt etwas Licht ins Dunkel ;)

    Ich bin die vorher von Andreas beschriebenen Installationsprozeduren nochmal durchgegangen. Und wenn ich eingebe:

    Code
    sudo apt-get install i2c-toolsw python-smbus


    Bekomme ich die Antwort:

    E: Paket i2c-toolsw kann nicht gefunden werden

    Habe ich was falsch geschrieben?

  • Hallo nochmal,
    ich habe jetzt über mehrere Tage im Netz recherchiert, was das Auslesen dieser HYT... Sensoren angeht. Es gibt aber ein paar Ungereimtheiten, welche ich absolut nicht auf die Reihe bekomme, vielleicht kann mir jemand von euch das anhand eines Beispiels kurz erklären:

    Zuerst mal das MR-Kommando
    In dem Datenblatt steht folgendes bezüglich des MR-Kommandos:

    <Zitat:>
    Das MR Kommando besteht aus der Adressierung
    des Feuchtemoduls, wobei das R/W bit auf 0
    (=Write) übertragen wird. Nachdem das Feuchtemodul
    mit ACK geantwortet hat (=Messung eingeleitet),
    schließt der Master die Übetragung mit
    NACK (=Stop condition) ab.
    <Zitat Ende>

    Mir ist soweit klar, wie man etwas zum Sensor schreibt oder wie man etwas liest (Byteweise oder z.B. Wortweise), was mir aber überhaupt nicht in den Kopf will, ist wie man auf ein ACK oder ein NACK warten oder ein ACK oder ein NACK senden soll. Ich kann bei diesem Typ doch nur das eine oder das andere tun, oder?
    Habe ich einen Denkfehler? :s

    Grüsse .. yoogii

  • Hallo,
    Ich bin hier nue im Form.. und versuche auch mit nen Raspberry Pi den HYT-939 Sensor auszulesen (Datenblätter siehe vorgänger).

    Ich bi so weit gekommen, dass ich in der Konsole die Adresse des Sensors auslesen kann 0x28 (standart des sensors) mit i2cdetect .
    Folgendes Script habe ich in python 2.7.3 geschrieben.


    In Line 12 bekomm ich eine input/output fehler [IOError Errnr 5] vpm write befehle..
    habe es auch mit anderen write befehlen versucht wie quick write oder nur auslesen.
    Bekomm aber jedes mal den selben Fehler mit den ich nichts anfangen kann.
    Daher meine Frage übersehe ich etwas?
    Muss ich die Takfrequenz des Buses noch einstellen?
    Mit google bin ich auf keine lösungsalternative gestoßen, geschweige denn alternativ ansetze

    PS: Der Hersteller wure von B+B Sensor aufgekauft und das C-Beispiel ist ein C# beispiel.

Jetzt mitmachen!

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