nRF24L01 - kennt jemand ein einfaches Beispiel in Python?

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

    hab mich jetzt extra mal hier angemeldet und hoffe, im richtigen Unterforum zu sein. Mein erster Post, sozusagen.
    Problem: Ich komm mit dem nRF24L01+ zusammen mit dem Raspberry Pi 2 und Python3 nicht wirklich voran.
    Meine Frage und Hoffnung: hat jemand ein einfaches Beispiel in Python3 für den folgenden Fall:
    Empfang und Ausgabe eines Datenpaketes (maximal 32Byte, soweit ich weiß)?

    Zum Hintergrund:
    bin nicht der Programmier-Experte. Trotzdem macht mir das unglaublich Spaß und soweit es meine Arduinos angeht, hab ich da auch schon eine ganze Menge hinbekommen und einiges an Erfahrung. Dabei hab ich viel über Beispielcode gelernt, verstanden und auf meine Anforderungen hin angepaßt.
    Aktuell läuft z.B. ein Sensor-Paket (Temperatur, Feuchte, Luftdruck, Licht...) an einem Atmega328 auf dem Balkon, das wunderbar mit nem Arduino incl. Ethernet-Shield via nRF2401+ auf meinem Schreibtisch kommuniziert und die Daten auf ThingSpeak hochlädt. Hab ich alles relativ einfach hingekriegt.
    Da gibts verläßliche Libraries und Beispielcode.

    Aus verschiedenen Gründen hab ich mir nun auch einen Raspi 2 zugelegt. Tolles Gerät und ich bin erstaunt, was das Teil alles kann. Allein schon Internetsurfen ohne Festplattengeklicker ist wirklich angenehm. Manches geht hier ganz leicht, andere Dinge aber scheinbar überhaupt nicht so einfach.

    Zum Beispiel die Nummer mit der Datenübertragung via nRF24L01+ (bzw mir reicht ja das Empfangen...). Ich hab schon viel gesucht und viel gefunden. Aber das scheint echt kompliziert zu sein, auf dem RasPi. Alles, was ich bisher dazu an Beispielcode gesehen habe, ist meist in C. Kann natürlich sein, dass ich dafür insgesamt zu dumm bin aber ich glaube eher, mir fehlt in der Raspi-Welt noch ziemlich der Überblick. Andererseits...Temperaturmessung mit DS18B20 incl. Erstellung von Diagrammen mittels rrdtool hab ich relativ schnell zum Laufen gekriegt. Auch nicht sooo trivial. Nur die Geschichte mit dem nRF24L01+ läßt mich verzweifeln.

    Die große G-Suche mit allen möglichen Suchbegriffen hab ich reichlich bemüht. Seit Tagen! (nur falls das jemand vorschlagen möchte). Bei dem, was ich da finde , steig ich - ganz ehrlich - nicht durch. Und was manche da als einfach vorstellen - äh...nein, es ist nicht einfach, weil oft zu viel gemacht wird bzw viel zu stark verallgemeinert wird. Keep it simple, stupid, sag ich immer.

    Bin sehr auf eure hilfreichen Antworten gespannt :thumbs1:

  • nRF24L01 - kennt jemand ein einfaches Beispiel in Python?? Schau mal ob du hier fündig wirst!

  • Oh Mann....da sieht man mal, was alles schief laufen kann.
    Bin ein großes Stück weitergekommen bräuchte jetzt aber doch noch nen Tip, siehe weiter unten.

    Irgendwo hab ich was an Code gefunden aber die Sache wollte und wollte nicht laufen. Mein Raspi war schon aus, als ich irgendwann in der Nacht hundemüde vom Schreibtisch aufstand und noch einen letzten Blick aufs Breadboard warf. Hatte zwei wesentliche Fehler bei der Hardware gemacht:
    1.) einen GPIO-Pin verwechselt (bzw Pin-Nummer und GPIO-Nummer) :blush:
    2.) (und das ist mir fast peinlich) der nRF24L01+ hatte keinen Strom abgekriegt weil ich auf dem neuen Breadboard zwei Steckbrücken vergessen hatte :wallbash:

    Ging dann auf Anhieb. Ein extra zusammengebastelter Atmega328 etc auf separatem Breadboard dient als Testsender, der alle 2 Sekunden ein Payload-Paket mit je 8 Stück 4-Byte Integers ("long") raushaut. Im Prinzip läuft alles, jetzt kommen aber die Feinheiten:
    Für die Umwandlung des 32-Byte-Datenpaketes muss ich immer vier aufeinanderfolgende Bytes in einen Integer umwandeln.
    In der IDLE (Python 3.4.2 Shell) klappt das mit "int.from_bytes" sehr gut. Sieht zum Beispiel so aus:

    Code
    >>> zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    >>> print(zulu)
    15

    Wenn ich das jetzt aber in Geany als kleines Python-Progrämmchen laufen lassen möchte, brichts mit ner Fehlermeldung ab

    Python
    #!/usr/bin/python3
    zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    print(zulu)
    Zitat


    Traceback (most recent call last):
    File "bytes_to_int.py", line 2, in <module>
    zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    AttributeError: type object 'int' has no attribute 'from_bytes'

    Könnte es sein, dass das was mit der Python-Version zu tun hat ( 2 oder 3)? Wobei ich jetzt leider nicht weiß, wo ich das nachschauen könnte. Bei der IDLE ist mir das klar, aber nicht bei Geany.
    Oder müßte ich irgendein Modul importieren? Ich hab echt die Fragezeichen auf der Stirn :s

    Hat jemand nen Tip?
    Viele Grüße und guten Rutsch!
    Automatisch zusammengefügt:
    Muss was mit der Python-Version, die unter Geany gestartet wird, zu tun haben.
    Nach setzen des Execute-Bits (chmod a+x bytes_to_int.py) und dem direkten Starten der Datei im LXTerminal (python3 bytes_to_int.py) läuft das kleine Beispiel und die Zahl 15 wird ohne Meckern ausgegeben.
    Alles gut also, nur muss ich mich jetzt wohl um den Editor kümmern. Notepad++ gibts dafür ja scheinbar nicht. Wäre mein Favorit.
    Was gibts denn noch für Editoren, bei denen man auch das Farbschema etwas angenehmer gestalten kann (ich hätts gern deutlich dunkler...)?
    Und kann man Geany dazu bringen, Python3 standardmäßig zu verwenden? Hab keine Einstellungsmöglichkeit gefunden und was ich ansonsten dazu gefunden hab, sieht für meinen Geschmack nicht einfach aus.

    Einmal editiert, zuletzt von Raspbuino (31. Dezember 2016 um 16:24)

Jetzt mitmachen!

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