BH1750 mit PiZeroWH ergibt Fehler bei i2cdetect

  • Hallo,

    der Versuch den Lichtsensor BH1750 (Breakoutbord BY-302) am I2C Bus des Raspberrypi Zero WH anzuschließen scheitert beim Überprüfen mit i2cdetect. Es wird keine Adresse angezeigt. Die Details siehe Screenshot.


    Anleitungen habe ich hier und hier und auch hier aus dem Netz bezogen. Letztlich sollte eine Pythonumgebung wie etwa hier realisiert werden.

    Da der Fehler - also das Nichterkennen des BH1750 am I2CBus - nicht behoben werden konnte, habe ich noch zwei weitere Module der gleichen Art anzuschließen versucht (eines nach dem anderen klarerweise), der Fehler blieb bestehen. Auch an einem 3erPi und an einem 4erPi konnte ich kein positives Ergebnis erzielen. Ein anderes I2C Device (OLED Display 128 x 32) konnte problemlos angeschlossen werden und hat auf Anhieb funktioniert. Also dürfte die Ursache irgendwo bei BH1750 oder der Verdrahtung liegen. Recherche im englischen Forum zeigte ein ähnliches Fehlerbild mit dem BH1750. Obwohl mir da nicht ganz klar wurde, wie sein letztes Posting bezüglich des Abklemmens vom Adresspin einzuordnen sei, schien das Nachlöten der Pins die Lösung zu sein - allerdings nicht bei mir.

    Edited once, last by pj1220: Ergänzung ().

  • Die Adressenleitung braucht einen eindeutigen Zustand. Entweder + 3,3 V, oder Masse. Abgesteckt hängt er in der Luft.


    Du hast aber eher den I2C Bus nicht richtig konfiguriert.

    Das hat sich in den letzten Jahren geändert.

    Es gilt ausschliesslich die Anleitung aus dem /bin/overlays/README /boot/overlays/README des installierten Systems.

    Bei mir wäre das dtoverlay=i2c1

    Alle anderen Eintragungen gehören bei mir aus cmdline.txt config.txt raus.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited 2 times, last by RTFM ().

  • Danke RTFM,

    Ich nehme mal an, Du meinst /boot/overlays/README. Ich habe mir das zu Gemüte geführt - harter Stoff. Letztlich scheint es darauf hinauszulaufen, dass überhaupt nichts über "sudo raspi-config" oder über das GUI "Einstellungen>Raspberry-Pi-Einstellungen" umgestellt wird. Viel mehr muss in /boot/ die Datei cmdline.txt um "dtoverlay=i2c1" ergänzt werden. Und in die config.txt kommt gar nichts rein oder raus.

    Habe ich das richtig verstanden?

    Zu deiner Anmerkung wegen des Adressleitung, eh klar, die habe ich nicht freischwebend gelassen sondern entweder gegroundet oder über 1k an 3.3V gehängt. Hat aber eh nichts gebracht.

    Ich werde deine Anleitung mal probieren und melde mich wieder.

    Danke schön für die Hilfe.

  • überhaupt nichts über "sudo raspi-config"

    Doch, natürlich. 3- Interface Options --> P5 - I2C Enable/Disable automatic loading of I2C kernel module


    Macht auch nichts anders, aber gleich richtig.

  • Hallo nochmals,


    nach eingehender Betrachtung des README und von device-tree.md sowie nach Stöbern im Forum "devicetree" bin ich zu folgenden Erkenntnissen gelangt:


    • Overlays und ihre Parameter (dtoverlay=... bzw. dtparam=...) werden in der Datei /boot/config.txt angelegt/aufgerufen/in den Kernel hineinpraktiziert.
    • sudo dtoverlay <> [<>] bzw. sudo dtparam <> können auch im Terminal aufgerufen werden.
    • i2c und i2c_arm sind Synonyme (steht so im README)


    Unklar blieb:

    sudo dtoverlay allerdings kennt kein Overlay i2c sondern nur i2c0, i2c1,...i2c6

    im README wird für das Overlay i2c1 als möglicher Parameter pins_2_3, pins_44_45 oder combine aufgeführt. Der Befehl aber (in Zeile 1424ff) wird aber so: Load: dtoverlay=i2c1,<param>=<val> beschrieben. Was ist nun der Wert, wenn der Parameter "pins_2_3" lautet?


    Es funktioniert immer noch nicht:

    Verschiedene Kombinationen von "dtoverlay" und "dtparam" sowohl in config.txt als auch im Terminal brachten keine Erkennung des BH1750. Die Kommunikation am i2c-Bus mit dem OLED Display funktioniert aber sofort. Einen Hardwaredefekt beim BH1750 Lichtsensor kann ich aber mit höchster Wahrscheinlichkeit ausschließen, da keiner der insgesamt drei Sensoren mit i2cdetect eine Adresse anzeigt (Das OLED aber sehr wohl).


    Höflichst um weitere Unterstützung bittend

    Liebe Grüße

  • Doch, natürlich. 3- Interface Options --> P5 - I2C Enable/Disable automatic loading of I2C kernel module


    Macht auch nichts anders, aber gleich richtig.

    Auch das habe ich in allen denkmöglichen Kombinationen (nur config.txt editiert, nur raspi-config oder beides) probiert. Der Lichtsensor streikt einfach. Das andere I2C-Device funktioniert. Das legt den Schluss nahe, dass der I2C-Bus wohl funktioniert. Andererseits ist es auch wieder sehr unwahrscheinlich, dass gleich drei Sensoren der gleichen Bauart defekt sind. Bleibt irgendwie nur die Annahme, dass der BH1750 zickt und möglicherweise auf eine ganz spezielle Weise angesprochen werden möcht. Aber auch diese Annahme klingt nicht sehr plausibel....

    Ich geh im Kreis, jedenfalls danke STF

  • So, habe gerade mal mein Modul ausgegraben und angeschlossen.


    Anschluss nach https://github.com/lleevveell66/BH1750-LightSensor.git

    Modul Vcc > Pi Pin 1 (3,3V)

    Modul GND > Pi Pin 6 (GND)

    Modul SDA > Pi Pin 3 (SDA)

    Modul SCL > Pi Pin 5 (SCL)

    Modul ADDR Nicht verbunden


    Modul ADDR > Pi Pin 6 (GND) ändert aber auch nix bei mir


    Script https://github.com/lleevveell66/BH1750-LightSensor.git muss in Zeile 35 print (..........) lauten, für Python3


    /boot/config.txt enthält bei


    dtparam=i2c_arm=on

    dtparam=i2s=on


    eingestellt über


    sudo raspi-config >5 Interfaceing Options >P5 I2C Enable


    /etc/modules enthält


    i2c-dev


    sonst habe ich nirgendwo etwas eingetragen


    Raspi 3B+ mit Buster

  • config.txt:

    dtparm=i2c=on nur einmal

    dtoverlay=i2c1


    i2c1 verwendet per default schon GPIO 2+3 (Pi-Pin 3 + 5), die brauchst Du nicht nochmals eingeben


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Danke Bertthias, das Ergebnis leider:

    Code
      File "./licht", line 30, in getLightLevel
        data = bus.read_i2c_block_data(addr,HIRES_MODE)
    IOError: [Errno 5] Input/output error

    So ist die Fehlermeldung vom Pythonscript. Das wundert mich auch nicht, denn i2cdetect -y 1 liefert ja auch keine gültige Adresse.


    Danke RTFM, leider hat auch dieser Ansatz meinen PiZeroWH nicht dazu bewegen können, mit dem Lichtsensor zu kommunizieren.


    Ockhams Rasiermesser meint: So unwahrscheinlich es auch klingen mag, offenbar sind alle drei Sensoren defekt.


    Was bisher geschah:

    • 2020-12-02-raspios-buster-armhf.zip runtergeladen, SHA-256 Check positiv, RPiImager Windoof > Sandisk 16GB Class10
    • ssh nach Wurzelverzeichnis kopiert
    • WLAN eingerichtet, SSH eingerichtet, VNC aktiviert, Passwort neu
    • sudo apt update, sudo apt distupgrade
    • Skript eingefügt chmod 777 licht
    • config.txt wie von RTFM vorgeschlagen geändert
    • BH1750 angeschlossen
    • ./licht

    Fehler, wie oben beschrieben, auch sudo i2cdetect -y 1 liefert kein brauchbares Ergebnis, siehe Bild in meinem ersten Posting


    Zusatzfrage: Kennt wer einen anderen Lichtsensor, der Lux im Bereich von 1 - 60.000 halbwegs genau messen kann und vernünftig auf dem I2C Bus spricht? Ziel der Übung ist ein Densitometer zu bauen um Dichten von Negativfilmen zu messen.

  • Da fallen mir noch 2 Dinge dazu ein. Schau mal auf die IC's ob überhaupt ein BH1750 ist und dieser richtig verbaut wurde . Die andere Sache wäre, vielleicht stimmt die Clockrate deines I2C Busses nicht, in meinem Datenblatt steht was von 400KHz Taktfrequenz für den BH1750. Falls das auch nichts bringen sollte, könnte man sich auf Basis eines ATtiny85 DigiStamp, einen USB zu I2C Adapter bauen.

  • Danke an alle Helfer - ihr ward großartig :danke_ATDE: . Es ist schön, dass Ihr die Geduld aufgebracht habt.


    Tja, jetzt glaube ich wirklich, dass auch das Unwahrscheinlichste möglich ist. Tatsache ist, dass der eine Sensor defekt gewesen ist und ich erst als letzten Schritt die anderen Sensoren ausprobiert habe > Siehe Ockham :huh:


    Echt, einer von drei Sensoren war im Eimer und mit dem habe ich alle SW-Einstellungen durchprobiert. Soviel zu Wahrscheinlichkeiten.


    Nochmals ganz lieben Dank