Forum: Mikrocontroller und Digitale Elektronik Bluetooth digital ausschalten wenn Datenempfang über USB möglich


von Percival Y. (percymcfly)


Lesenswert?

Hallo,

ich habe vor, einen Prototypen für ein zukünftiges Produkt zu basteln. 
Dabei gibt es (hoffentlich) nur einen Aspekt von dem ich nicht weiß, ob 
das so easy geht.

Die Idee ist es, ein Modul zu haben, den man mit Bluetooth an mit dem 
Smartphone verbinden kann, um dann vom Smartphone aus Daten zu 
übertragen(par Befehle).
Ich will dann aber auch weitere von dem gleichen Modul an das erste 
befestigen/damit verbinden über USB. Die verbundenen Module sollen dann 
aber dann, wenn ein USB Kabel im Empfang-Abschnitt verbunden ist, das 
Bluetooth abstellen und nur auf die Daten ausm USB hören.

Das heißt, wenn ich 2 von den Modulen per USB verbinde, dann hat nur 
eins von beiden das Bluetooth aktiviert, bekommt die Daten vom 
Smartphone und gibts sie auch dann ans 2. Modul über due USB Verbindung.

So will ich erreichen dass theoretisch eine unbegrenzte Anzahl von 
Modulen verbunden werden können(die Grenze sollte aber vermutlich im 
Markt nicht 10 überschreiten).


Ich habe vor, dies erst mal mit nem Arduino und nem BLE adapter zu 
testen.
Geht sowas aber grundsätzlich, und ist es schwer, oder ist sowas echt 
super einfach?
Wäre vielleicht auch eine Möglichkeit, einen Schalter an das Modul zu 
befestigen.. Kann so ein Bluetooth Empfänger also einfach ausgeschaltet 
werden, ohne Probleme?
Wie würdet ihr das Problem lösen?

Bin echt neu, wenn es un Mikrocontroller geht, aber ich hoffe, dass das 
Problem nicht so schwer ist und ich eure Hilfestellung verstehen kann :)

Vielen Dank!

von dummschwaetzer (Gast)


Lesenswert?

>dann, wenn ein USB Kabel im Empfang-Abschnitt verbunden ist, das
>Bluetooth abstellen und nur auf die Daten ausm USB hören
entweder die 5V der USB-Verbindung erfassen / prüfen, ...
ode in irgendwechen Registern erkennen, ob USB enummeriert wurde.
Modul1 -> Modul2 -> Nodul3 -> ...
da braucht dann aber jedes Modul USB-Host und Device?

von Einer K. (Gast)


Lesenswert?

Percival Y. schrieb:
> Ich habe vor, dies erst mal mit nem Arduino und nem BLE adapter zu
> testen.
> Geht sowas aber grundsätzlich, und ist es schwer, oder ist sowas echt
> super einfach?

Wenn du z.B. einen Arduino Leonardo oder Mikro verwenden würdest, dann 
könntest du beides parallel betreiben.

Zudem, jederzeit mit if(Serial) prüfen ob eine serielle Verbindung 
besteht und dann per Software das BT Modul abschalten

von Percival Y. (percymcfly)


Lesenswert?

Ja also das ziel ist, dass jedes Modul identisch ist, aber einen USB 
Eingang und einen USB Ausgang hat.
Das heißt, Host und Device ist.
Wenn im Eingang ein Kabel angeschlossen ist, hören wir nur auf das Kabel 
und schalten das Bluetooth aus.

Ich werde am Wochenende mal ein wenig daran basteln. Gibt sicherlich 
etliche Möglichkeiten, sowas umzusetzen..

von Percival Y. (percymcfly)


Lesenswert?

Hmm ich muss mal schauen. Hab noch nie mit USB Daten gearbeitet am 
Arduino, bin da aber auch ehrlich gesagt ein super Anfänger. 
Programmiere sonst nur Apps und so.

Hab ein par Arduino Nano‘s rumliegen. Und ein Elegoo UNO R3. Die 
Bluetooth Module heißen HC-06.

Werde mir morgen mal ein pr Tutorials anschauen wie man mit USB zwischen 
Arduinos Kommuniziert und wie man Bluetooth an/ausschaltet.

Mit ner If(Schleife) klingt eig. wie ein no-brainer.


Werde mich mal hier melden falls ich irgendwo hängen bleibe 🙌

von Martin B. (Firma: BINE Automatentechnik ◔) (pac-man)


Angehängte Dateien:

Lesenswert?

Percival Y. schrieb:
> Die verbundenen Module sollen dann
> aber dann, wenn ein USB Kabel im Empfang-Abschnitt verbunden ist, das
> Bluetooth abstellen und nur auf die Daten ausm USB hören.

Das Thema interessiert mich auch. Wäre es so möglich?

Gruß, Martin

von Einer K. (Gast)


Lesenswert?

Percival Y. schrieb:
> If(Schleife)

Nee...
Sowas gibts nicht.
Meinte if(Serial)
Und das tuts nur bei Arduinos mit nativem USB.
Also nicht beim UNO oder Nano

von dummschwaetzer (Gast)


Lesenswert?

>Das Thema interessiert mich auch. Wäre es so möglich?
Was ist das für ei USB-Block?
falls da UART RX TX kommt ja, falls da DP DM kommt nein.
ggf würde ich noch ein paar pull-ups an die jeweiligen TX RX hängen 
(47k)

von dummschwaetzer (Gast)


Lesenswert?

>USB zwischen Arduinos
einer ist host, der andere device. Geräteklasse ist üblicherweise 
USB-VCP
Für deine Anordnug:
Der erste (mit Funk) ist immer Host. Die anderen sind sowohl Host als 
auch Device. Und damit weden deine Probleme anfangen.
Du braucst dann entweder Arduinos mit 2 voneinander unabhängigen 
USB-Einheiten, mindestens eine davon mit Host-Features.
In der Regel haben die aber nur maximal eine USB-Einheit. Host oder 
Device(USB-OTG).
In der STM-Welt würde ich da 2 µC pro Modul:
STM4xx Host, STM3xx(oder MSPF55x) als Device.
Host: je nach was du mit deinen Daten machen willst + Bis zum anderen 
(UART/I2C/SPI).
Device: aus dem UART/I2C/SPI USB-VCP machen.
Du könntest statt STM3xx(oder MSPF55x) als Device eventuell auch fertige 
USB<->RS232 nehmen (CP2103,...) da brauchst du aber im Host die 
entsprechenden Treiber.

von Martin B. (Firma: BINE Automatentechnik ◔) (pac-man)


Lesenswert?

Das ist ein CP2102 MICRO USB to UART TTL Modul. Mir ging es um die 
Beschaltung dass ich mit der Versorgungsspannung vom Modul den 4052 
schalte.

von Stefan F. (Gast)


Lesenswert?

Ich würde die Sache mit dem USB nochmal überdenken. Vermutlich wird das 
Ganze mit I²C oder RS232 um Welten einfacher.

Es sei denn du (Percival) kennst dich schon gut mit USB Programmierung 
aus, aber das ist wohl nicht der Fall.

von dummschwaetzer (Gast)


Lesenswert?

>Das ist ein CP2102 MICRO USB to UART TTL Modul
ja, sollte so funzen

von Percival Y. (percymcfly)


Lesenswert?

@stefanus
Ja du hast recht, ich habe tatsächlich gar keine Ahnung von irgendwas 
was mit Mikrocontrollern zu tun hat. Ich habe lediglich mal einen Laser 
Projektor gebastelt dem ich über bluetooth sagen konnte, was er malen 
soll. Aber das ist dann auch wieder total lange her.
Alles was ich bisher habe ist tatsächlich nur die Idee.

Es sollen am Ende Arrays zwischen den Controllern verschickt werden die 
pro Einheit eine Map mit 3 ints enthalten(für RGB).
Es soll für eine Größe von bis zu 5000 Elementen ausreichen, das heißt 
8x3x5000 byte= 120 kbyte..

Ich lese mir jetzt mal in Ruhe alle Antworten durch und google mal rum, 
da ich echt keine Ahnung habe was die Kürzel bedeuten.

Sehe aber schon, dass ich nach einem proof of concept sicherlich einen 
Experten zu rate ziehen muss, der mir das dann alles für das Produkt 
vernünftig macht..

von Percival Y. (percymcfly)


Lesenswert?

Wäre es vielleicht möglich, gerade einfach 2 Arduinos zu benutzen?

1. Ein 'Master', welcher Daten über Bluetooth empfängt und verarbeitet.
2. Ein 'Slave' welcher Daten vom Master empfangen kann.

Ein einfacher Schalter kann dann angeben, welcher von beiden nun die 
Kontrolle hat. Da eine Einheit einen eingehenden Anschluss und einen 
ausgehenden Anschluss hat, würde also jedes mal, wenn der eingehende 
Anschluss verwendet wird, das Slave Arduino benutzt, ansonsten der 
Master.
(hab echt keine Ahnung ob die Begriffe so Sinn ergeben, aber ich hoffe 
das ist trotzdem verständlich)

Schließe ich nun 4 Module aneinander an, so habe ich am Ende immer einen 
Master, und 3 Slaves, welche jeweils die Daten vom Master erhalten.
Das ist anscheinend mit I2C zu erreichen.

Ist das vielleicht die "einfachste" Lösung für das Projekt?

von Stefan F. (Gast)


Lesenswert?

Bei den USB-UART Adaptern gibt es einen Haken, den man hier 
berücksichtigen sollte.

Du kannst zwar erkennen, wenn das USB Kabel eingesteckt wurde (Spannung 
hat), aber du weißt nicht, ob am anderen Ende auch ein Programm 
gestartet wurde, dass den virtuellen seriellen Port wirklich geöffnet 
hat.

Deswegen würde ich eher überdenken, ob die sonst übliche Rangfolge nicht 
besser ist: USB wird verwendet, wenn Bluetooth nicht verbunden ist.

Denn die Bluetooth Module haben einen Ausgang, der anzeigt, ob die 
Verbindung geöffnet wurde, oder nicht. Daran könnte man ganz einfach ein 
Relais oder einen Multiplexer (z.B. CD4053) anschließen.

von Percival Y. (percymcfly)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bei den USB-UART Adaptern gibt es einen Haken, den man hier
> berücksichtigen sollte.
>
> Du kannst zwar erkennen, wenn das USB Kabel eingesteckt wurde (Spannung
> hat), aber du weißt nicht, ob am anderen Ende auch ein Programm
> gestartet wurde, dass den virtuellen seriellen Port wirklich geöffnet
> hat.
>
> Deswegen würde ich eher überdenken, ob die sonst übliche Rangfolge nicht
> besser ist: USB wird verwendet, wenn Bluetooth nicht verbunden ist.
>
> Denn die Bluetooth Module haben einen Ausgang, der anzeigt, ob die
> Verbindung geöffnet wurde, oder nicht. Daran könnte man ganz einfach ein
> Relais oder einen Multiplexer (z.B. CD4053) anschließen.

Für meine Verwendung ist es notwendig, dass es gerade so funktioniert, 
wie ich es formuliert habe. Es ist tatsächlich kein Problem, wenn nicht 
geprüft wird, ob wirklich Daten ankommen. In dem Verwendungszweck ist es 
nur notwendig, dass Bluetooth ausgeschaltet wird, sobald ein USB im 
eingangs port verwendet wird.

von Stefan F. (Gast)


Lesenswert?

Percival Y. schrieb:
> n dem Verwendungszweck ist es
> nur notwendig, dass Bluetooth ausgeschaltet wird, sobald ein USB im
> eingangs port verwendet wird.

Dann würde ich diese CD4053 als Umschalter verwenden und mit der 5V 
Leitung vom USB Kabel ansteuern.

von Frank K. (fchk)


Lesenswert?

Percival Y. schrieb:

> Das heißt, wenn ich 2 von den Modulen per USB verbinde, dann hat nur
> eins von beiden das Bluetooth aktiviert, bekommt die Daten vom
> Smartphone und gibts sie auch dann ans 2. Modul über due USB Verbindung.

> Ich habe vor, dies erst mal mit nem Arduino und nem BLE adapter zu
> testen.
> Geht sowas aber grundsätzlich, und ist es schwer, oder ist sowas echt
> super einfach?

In Prinzip geht das. Vergiss aber Arduino, das taugt dafür nicht.

Ich würde so etwas wie das hier nehmen:

https://www.st.com/en/microcontrollers-microprocessors/stm32f722re.html

Der hat zwei separate USB-Ports. Jeder USB-Port kann ohne extra 
Beschaltung Fullspeed 12 MBit/s, was ausreichen sollte. Und jeder 
USB-Port kann entweder als Device oder als Host betrieben werden. Das 
ist wichtig! Damit Du zwei Module verbinden kannst, muss eines Host sein 
(Typ A, rechteckig), das andere Device (Typ B, quadratisch).

Das Modul, das an seinem Device Port nichts angeschlossen hat, ist 
Master. Das zweite Modul weiß ja, dass es das zweite ist, weil es sich 
mit seinem Device-Port am Host-Port des ersten enumeriert hat und damit 
eine Verbindung besteht. Sobald die Enumeration stattgefunden hat, 
schaltet er sein Bluetooth aus.

Das dritte Modul machts wie das zweite, usw.

Technisch funktioniert das, keine Frage. Aber ohne langjährige Erfahrung 
mit Mikrocontrollern im Allgemeinen und mit USB im speziellen wirst DU 
scheitern. Sorry dass ich das so klar sagen muss, aber ich denke, dass 
das zwei Nummern zu viel ist, wenn Du nicht einmal dem Arduino-Stadium 
entwachsen bist.

USB ist komplex. Sehr komplex. Du solltest das ganze mit seriellen 
Schnittstellen machen. Dazu brauchst Du einen Mikrocontroller, der drei 
Hardware-UARTs hat: eine für BT, eine für den Uplink und eine für den 
Downlink. Damit scheiden auch schon mal die meisten Arduinos aus. Ein 
Mega 2560 oder ein Due kämen in Frage. Mikrocontroller mit 4 oder 6 oder 
10 seriellen Schnittstellen gibts aber, kein Problem.

fchk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.