Seite 1 von 1
Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Mittwoch 28. August 2019, 07:09
von Lungee
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
Mein Problem ist der Code für den Arduino.
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
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Mittwoch 28. August 2019, 07:43
von Sirius3
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.
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Mittwoch 28. August 2019, 07:54
von __deets__
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.
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Mittwoch 28. August 2019, 09:55
von __deets__
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.
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Donnerstag 29. August 2019, 08:14
von Lungee
@_deets_
Danke, habe mir deine erste Antwort gerade durchgelesen und habe mir schon so gedacht, dass du das ein bisschen falsch verstanden hast

. 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.
MfG
Lungee
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Donnerstag 29. August 2019, 08:23
von Lungee
@ 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
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Donnerstag 29. August 2019, 08:37
von __deets__
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.
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Donnerstag 29. August 2019, 08:58
von Sirius3
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.
Re: Daten für Python-Script/Sprachassistent mithilfe von Arduino und NRF24L01 übertragen
Verfasst: Donnerstag 29. August 2019, 12:01
von __deets__
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.