Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lungee
User
Beiträge: 14
Registriert: Dienstag 28. Mai 2019, 16:40

Guten Tag miteinander,

ich benötige Hilfe bei der Lösung zur Datenübertragung via Arduino und
NRF24L01. Es sieht folgendermaßen aus:

Ich benutze USB-Kopfhörer mit Micro um mit meinem
'Sprachassistenten',(noch in der Prototyp-Phase)welcher in Python
mithilfe von gTTS und Speech_recognition programmiert ist, zu
kommunizieren.

Das Ziel ist also ein Arduino-Funkheadset, mit dem ich den Sprachassistenten
in Python steuern kann. Der Sprachassistent ist nicht das Problem,
sondern die Datenübertragung der Audiosignale von meinem Kopfhörer.

Veranschaulichung:

Sprachbefehl/Input:

Mikrofon->Arduino Nano-> NRF24L01->anderes NRF24L01->Arduino
UNO->USB-Port am PC->Python-Code

Output in etwa dasselbe in anderer Richtung .

(Arduino Nano und das Sender/Empfänger-Funkmodul werden/sind in den Kopfhörern verbaut.)

Hoffe ich habe nichts vergessen :shock:

Mein Problem ist der Code für den Arduino. :oops:

Ich weiß zwar, wie ich die Module anspreche und irgendwelche Daten
sende, die dann im seriellen Monitor der Arduino IDE auftauchen, aber
ich weiß nicht, wie dasselbe bei Audiosignalen funktioniert, welche dann
erst von Python verarbeitet werden sollen. Mein Lösungsansatz wäre
Pyserial, aber die Audiosignale bereiten mir Sorgen. :?

Bei dem Micro handelt es sich um eine einfache Microphone-Kapsel.

Hoffe ihr könnt mir weiterhelfen.

MfG :)

Lungee
Sirius3
User
Beiträge: 18218
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst alles selbst programmieren? Das einfachste wäre ein unkomprimierter Datenstrom, also Analogsignal lesen und an den Funkchip übertragen.
Ob da die Datenübertragung für Dich stabil genug läuft, mußt Du selbst ermitteln.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde dir da massiv von abraten. Der NRF24L01 ist zu low-levelig für sowas. Ich kämpfe gerade damit, überhaupt eine stabile, bi-direktionale Verbindung herzustellen. Da mag meine Doofheit eine Rolle spielen. Aber trivial ist das nicht. Wenn du das dann gleichzeitig auf arduino und PC machen willst, wirst du bei letzterem wegen des OS in Probleme kommen. Denn weil der nur 32byte pro Paket übertragen kannst, bist du selbst bei 16Bit PCM, Mono, 22KHz (also eine viertel der Audio Rate einer CD) ungefähr 1300 mal pro Sekunde damit beschäftigt, ein Paket zu empfangen. Und das ist nur eine Richtung! Solche Art Arbeit erfordert eine effizientere Sprache wie C, C++, Rust. Und vor allem einen Treiber im Kernel, der mit entsprechend hoher Priorität arbeitet. Da ist nix mit Python.

Benutz einen Bluetooth Link. Wenn möglich mit Audio Kompression.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ah, ich sehe gerade, ich habe einen Fehler gemacht. Du willst zwei Arduinos nutzen. Das ist der Nachteil, wenn man auf dem iPad im Bett liest... egal. Damit sind meine Anmerkungen bezueglich PC/Treibern natuerlich Unfug. Ob du das hinbekommst halte ich immer noch fuer fraglich, weil ein bi-direktionales Protokoll und die Verschraenkung von NRF24 und Serieller Datenuebetragung auf dem Arduino nicht ohne ist. Ich wuerde dir immer noch zu Bluetooth oder WIFI raten, das bekommst du in Gestalt des ESP32 sogar mit MicroPython zu programmieren.
Lungee
User
Beiträge: 14
Registriert: Dienstag 28. Mai 2019, 16:40

@_deets_

Danke, habe mir deine erste Antwort gerade durchgelesen und habe mir schon so gedacht, dass du das ein bisschen falsch verstanden hast :lol: . Aber im Bezug auf Bluetooth:

Würde natürlich funktionieren (habe ich auch in der Anfangsphase benutzt), ist aber für mein Projekt nicht relevant, da Bluetooth einfach nicht die Reichweite eines Funkmodules errreichen kann.(Bluetooth-Modul: 5-10m; Funk-Modul: 700+ m).

Im Bezug auf WiFi:
Keine schlechte Idee, werde mich damit auseinandersetzen. :wink:

MfG

Lungee
Lungee
User
Beiträge: 14
Registriert: Dienstag 28. Mai 2019, 16:40

@ Sirius3

Ich werde es auf jeden Fall probieren. Aber wie soll ich dann beim Empfängermodul die Daten umwandeln? Muss hier dann ein Compiler eingesetzt werden oder? :?:

MfG

Lungee
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auf dem arduino muss immer ein Compiler eingesetzt werden. Und was musst du u wandeln? Du bekommst doch samples vom Mikrophon auf Senderseite. Das sind doch immer noch samples auf Empfängerseite.

Was ich mir an deiner Stelle überlegen würde: die datenpakete durchzunummerieren. Und dadurch Ausfälle durch Stille zu kompensieren. Ggf mit einem Filter, damit es nicht so knackt. Dann verändert sich zumindest nicht das timing, das macht’s ggf einfacher für die Spracherkennung.

Last but not least: das der bei den für das Audio notwendigen Datenraten und Zuverlässigkeit 700m macht, möchte ich sehen.
Sirius3
User
Beiträge: 18218
Registriert: Sonntag 21. Oktober 2012, 17:20

Die von Dir verwendeten Funk-Module sind auch nur bis 10m sinnvoll einzusetzen. Allein, weil mehr Leistung gar nicht erlaubt sind, und die ganzen Tricks, die z.B. bei WIFI dazukommen bei so einem Teil wahrscheinlich nicht implementiert sind.

Dazu kommst, bei größerer Weite mehr Übertragungsfehler, kleinerer Durchsatz, also komplizierteres Protokoll, Kompression, etc. und damit ein Arduino zu schwach.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also mit den erlaubten 25mw kommt man schon deutlich weiter als 10m. Insbesondere im freien. Damit fahre ich bei sogar 5.8GHz meinen race drone video link mit mehreren hundert Metern. Ich sehe die Schwierigkeiten beim Protokoll.
Antworten