Dieser Artikel beschreibt, wie man ein Bluetooth-Modul mit einem ISP-Programmer (hier: das ‘mySmartUSB-Modul’ der Firma Laser & Co. Solutions GmbH) verbindet und auf diese Weise Mikrocontroller via Bluetooth mit dem PC programmieren und zusätzlich Daten mit dem Mikrocontroller und dem PC austauschen kann. Diese Möglichkeit, beides kabellos zu bewerkstelligen (Mikrocontrollerprogrammierung -und RS232-Datentransfer) , dürfte relativ einzigartig sein!
Ausgangslage
Manchmal wäre es ‘Nice-to-have’, manchmal geht es aber auch nicht anders: man möchte das Kabel zwischen Mikrocontroller und PC loswerden. In unserem Fall sollte ein mobiler Roboter per Funk vom PC programmiert und später dessen Sensordaten im Betrieb an diesen PC übertragen werden.
Warum überhaupt Bluetooth?
- es gibt kostengünstige USB-Bluetooth-Dongles für den PC (wenige Euro) (PC-seitig braucht man also nichts entwickeln!)
- Bluetooth simuliert eine serielle Schnittstelle (COM-Port) am PC – man kann also alle bisherigen Tools und Programme weiterverwenden (PC-seitig bleibt also alles beim Alten!)
- die Reichweite ist akzeptabel (100-150 m , Bluetooth class1)
- es gibt kostengünstige (ca. 15 €) Bluetooth-Module mit 3.3V TTL UART-Schnittstelle (4 Pins werden davon benutzt: 3.3V VCC, GND, TX und RX)
Warum mySmartUSB als ISP-Mikrocontroller-Programmer?
- er unterstützt die gängigsten Programmierprotokolle (AVR910/AVR911)
- einziger ISP-Programmer (meines Wissen), der auch als UART-Bridge fungieren kann und diese ist dazu auch noch per UART-Kommando schaltbar(!) (mehr dazu unten) – den USB-zu-UART Konverter (CP2102) brauchen wir hier jedoch nicht
Verwendete Komponenten
- myAVR mySmartUSB (v2.10) zur µC-Programmierung/UART Datentransfer mit diesem
- myAVR Board mit ATmega168
- Bluetooth-Modul BTM220
- 3.3V Spannunsgregler (LF33CV), 2 Elkos, 4 Widerstände, 1 LED, 1 IC (74HCT14N) für den Bluetooth-Adapter
Schritt 1 : Bluetooth-Adapter für mySmartUSB bauen
Für diesen Zweck wird hier das Rayson Bluetooth-Modul ‘BTM220A’ verwendet, welches eine UART-Schnittstelle verwendet. Da dieses Modul jedoch mit 3.3V Spannungsversorgung arbeitet, wird ein 3.3V Spannungsregler sowie ein 3.3V zu 5V TTL Pegel-Wandler (für RX/TX) eingesetzt. Die genaue Adapter-Schaltung kann z.B. dem Blog von Martin Hänsler entnommen werden. Zur Pegel-Wandlung der TX- bzw. RX-Leitungen wird dort ein invertierendes Schmitt-Trigger IC verwendet, ein Spannungsteiler sorgt bei der RX-Leitung für den 3.3V Level.
Nach einer nachmittaglichen Bastelarbeit könnte das vollständige Bluetooth-Modul dann z.B. so aussehen 🙂
Ergebnis: Bluetooth-Modul mit 5V TTL UART (mit vier Anschlußpins: 5V VCC, GND, TX und RX)
Schritt 2 : TX und RX am mySmartUSB suchen
Im nächsten Schritt soll mit diesem Bluetooth-Modul ein ATmega168 auf einem myAVR Board programmiert werden können (natürlich über Bluetooth). Zusätzlich soll aber auch das ATmega UART-Modul mit dem PC über Bluetooth angebunden werden, so dass man kabellos Daten mit dem Mikrocontroller austauschen kann. Für beide Zwecke bietet sich die ‘mySmartUSB-Tocherplatine‘ des myAVR-Boards geradezu an, da es über einfache UART-Kommandos zwischen Programmier- und Datenmodus umschalten kann.
Ein Problem muss allerdings noch gelöst werden: der Programmer verfügt offensichtlich nur über einen USB-Anschluß als Programmierschnittstelle, die TX/RX-Leitungen zum Programmer hin müssen also ausfindig gemacht werden -vom CP2102-USB-zu-seriell Konverter Baustein ausgehend findet man RX an Pin5 und TX an Pin4 der mySmartUSB-Steckpfosten links:
(Anmerk.: in der mySmartUSB Dokumentation findet man nur die rechten TX und RX Pins für die UART-Bridge – diese können aber nicht zum programmieren sondern nur für den Datenaustausch verwendet werden).
Die benötigte 5V Spannungsversorgung für den Spannungsregler des Bluetooth-Moduls muss man sich ggf. über das myAVR-Board holen – ohne USB-Anschluß scheint der Programmer nur etwa 4V über das myAVR-Board zu bekommen.
Schritt 3 : mySmartUSB und Bluetooth-Adapter verbinden
Dann kommt der spannende Augenblick beide Module miteinander zu verbinden 🙂
Wichtig: RX vom Bluetooth-Modul geht auf TX vom mySmartUSB (was der eine sendet, muss der andere empfangen)
Und siehe da! Ein erstes Austesten mit den bisherigen myAVR-Tools und Programmen zeigt : alle Funktionen laufen wie erwartet!
Im nächsten Schritt werde ich wohl die mögliche Reichweite dieses Bluetooth-Moduls austesten – 100 Meter im Freien sollten damit machbar sein 🙂
Fazit: …ich bin mir sicher: so ein fertig aufgebautes Bluetooth-Modul wäre garantiert eine ideale Ergänzung des myAVR-Sortiments 😉
Hallo Alexander,
über die Programmierung eines Mikrocontrollers per Bluetooth habe ich mir auch schon den Kopf zerbrochen. Zumal ich ja schon einen Bluetooth-Adapter in meiner LED-Steuerung zur Reglung der RGB-Einstellung verwende. Ich wollte das Problem mit Hilfe des Arduino-Bootloaders lösen. Dieser erwartet nach einem Reset am Mikrocontroller die Übertragung des Programms über die serielle Schnittstelle des ATmegas, an der ohnehin schon mein Bluetooth-Adapter hängt. Nur muss erst mal ein Reset am ATmega ausgelöst werden. Dies könnte über einen Portausgang des ATmegas selber ausgelöst werden. Anschließend muss das Programm über Bluetooth folgen. Müsste eigentlich funktionieren. Probiert habe ich es allerdings noch nicht 🙂
Deine Lösung finde ich auch nicht schlecht, nur dass ein relativ teurer ISP-Programmer dazu dauerhaft in der Schaltung eingesetzt wird, finde ich nicht so gut.
Tolles Projekt!!!
Viele Grüße
Martin Hänsler
Hi,
Ich habe meinen STK500 und meine Akkumatik mit dem Serial-BTM von http://www.robotrack.org am laufen, funktioniert alles so wie mit Kabel.
Max