Time-of-Flight-Sensor VL53L4CD mit Raspberry (Pico) betreiben

  • Hallo zusammen,

    ich verzweifel langsam daran, den VL53L4CD-Sensor mit dem Rapsberry Pico zu betreiben. Als IDE benutze ich Thonny. Ich hab auch VisualStudioCode ausprobiert, aber ohne Erfolg. Mein größtes Problem ist, dass ich Pakete wie adafruit_blinka nicht installieren kann, egal wie ich es versuche.


    Meine Frage ist: hat jemand schonmal erfolgreich diesen Sensor mit einem Raspberry oder Raspberry Pico verwendet und wenn ja, mit welchem Skript/welcher Bibliothek (die aus dem Internet funktionieren bei mir nicht)? Der VL6180X und VL53L0X laufen bei mir bereits einwandfrei.


    Ohne jetzt näher auf den Code eingehen zu wollen: der von Thonny ausgespuckte Fehler ist, dass etwas in der Bibliothek nicht definiert ist. In der angegebenen Zeile steht allerdings nur ein Kommentar, ich denke also, dass die Ursache woanders liegt.


    (Ich habe bereits sehr viele Anleitungen ausprobiert, alle Versionen sind aktuell und ja, ich habe es auch schon sehr oft an und ausgeschaltet)

    Würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte :helpnew:

  • Hallo und willkommen im Forum,


    auch wenn du auf den Code nicht eingehen willst, eventuell kann man dir helfen, wenn du die vollständige Fehlermeldung (den ganzen Traceback) postest, den Code und die verwendete Bibliothek.


    Vielleicht ist etwas nicht definiert, weil es jetzt ein Kommentar ist, es ist aber auch so, dass nicht immer genau die Stelle angezeigt wird, an der der Fehler ist, sondern die, an der der Fehler bemerkt wurde.


    Grüße

    Dennis

    Das Leben ist kein Ponyhof, es ist ne Pferdebraterei! 🎧

  • Die beiden Bibliotheken laufen ohne Fehler, die Fehlermeldung des Skripts ist folgende:

    File "<stdin>", line 29, in <module>

    File "vl53l4cd_lib.py", line 67, in __init__

    NameError: name 'i2c_device' isn't defined


    Ganz original sind die Bibliotheken nicht mehr, weil ich schon viel ausprobiert habe. Der Fehler ist aber gleich geblieben. Der Originalcode steht noch auskommentiert dabei.

    Bibliothek für den Sensor:


    adafruit_bus_device:

    Es gibt auch einen Code fürs Programm im Internet, das Problem hierbei ist nur, dass ich das Modul "board" nicht importieren kann

  • Okay, so wirds schwer, ich bin nicht gut im raten und deswegen versuche ich jetzt nicht den originalen Code aus den Kommentaren wieder herzustellen.

    Bitte poste die originale Bibliothek.


    Aber wenn du 'i2c_device' in der '__init__' auskommentierst, dann kann das nicht laufen, weil später im Code, zum Beispiel in '_write_register' auf ein nicht vorhandenes Objekt 'i2c_device' zugegriffen werden soll.


    Lass uns in Ruhe von vorne starten mit original Code. Von mir aus auch ein GitHub-Link zu diesem Code. Bitte nur keine Downloads, das ist am Handy ungeschickt.


    Grüße

    Dennis

    Das Leben ist kein Ponyhof, es ist ne Pferdebraterei! 🎧

  • ich kann das Modul board weder importieren noch installieren

    Was genau geht da nicht? Kommt da eine Fehlermeldung?


    Raspbian bzw. das mitgelieferte Python hat von Haus aus ein board-Modul. Adafruit nutzt aber ein anderes board -Modul.


    Das Problem ist dabei das beide Module gleich heißen aber sich vom Inhalt unterscheiden.


    Adafruit gibt dir da Hilfestellung.

  • Ich glaube, das Problem ist, dass es bei MicoPython, womit gerade mein Pico läuft, kein board-Modul gibt. Zumindest wirft Thonny immer einen Error aus, wenn ich das als zusätzliches Package installieren möchte. Deswegen funktioniert dann logischerweise auch das Importieren nicht. Die Fehlermeldungen kann ich nachher nochmal raussuchen

  • Ich habe gestern eine Stunde lang herumprobiert. Den Sensor kann ich sehen (i2c.scan()), aber der Code ist so alt, dass Funktionen genutzt werden, die auf dem RP Pico nicht verfügbar sind (I2C.start, I2C.stop)


    Die normalen Funktionen zum Lesen und Schreiben haben keine Möglichkeit zur Übergabe eines Registers. Das muss man dann selbst machen.


    Hingegen bietet I2C.readfrom_mem und I2C.writeto_mem die Möglichkeit ein Register zu adressieren und dort Daten zu lesen/schreiben.

    Für mein Verständnis muss man die Adresse auch nicht um 1 addieren. Das müssten die Funktionen von selbst machen.

    Das teste ich mal mit einem Logic Analyzer.


    Bisher habe ich bei meinem Sensor keine sinnvollen Daten herausbekommen.



    Wenn man z.B. in Register 0x10 ein Byte schreiben will: