Mittwoch, 19. Juni 2013

JY-MCU Bluetooth Modul am Arduino

Beim Chinesen um die Ecke (eBay) waren Bluetooth Module im Sonderangebot. Warum also nicht testen? - getreu dem Motto: "Everything is better with bluetooth.":


 Das "Platinchen" hat etwa die Breite eines kleinen Fingers und dessen halbe Länge:



Darauf befindet sich neben einen Spannungswandler für die Versorgung der ICs von links nach rechts:

MX29LV800CB
        8M-BIT [1Mx8/512K x16] CMOS SINGLE VOLTAGE 3V ONLY FLASH MEMORY

CSR BC417
        Single Chip Bluetooth® v2.0+EDR System

... und die markante Bluetooth-Antenne.

Auf der Rückseite ist die Anschlussbelegung ersichtlich. Die Pins VCC, GND, TXD und RXD sind mit einer gewinkelten Stiftleiste bestückt. Als Versorgungsspannung kommen die vom Arduino gelieferten 5V in Frage. Als Send-Empfangs-Pegel sind 3,3 V angegeben. Es wird sich zeigen, dass die Pins meines Moduls auch mit dem 5V Pegel zurecht kommen, ohne dass das Modul schaden nimmt.





Die Board Version wird mit V1.05 angegeben, beim Anmelden meldet sich das Modul als "HC-06" und verlangt die Eingabe des Codes "1234".

Links zu weiteren Informationen:
m2.img.dxcdn.com/CDDriver/sku.121326.pdf
http://air.imag.fr/mediawiki/index.php/Wireless_Bluetooth_RS232_TTL_Transceiver_Module

Der Versuchsaufbau


2 Leitungen zur Spannungversorgung, die beiden anderen Leitungen werden wie folgt angeschlossen:


          JY-MCU    Arduino Mega
            TXD <----> RX1 
            RXD <----> TX1 

Über die Serial 1 findet also die Kommunikation mit dem JY-MCU statt, die Serial 0-Schnittstelle wird zum Monitoring benutzt. 

Zum Testen des Datenaustauschs habe ich den MultiSerialMega-Sketch aus der Arduino-Beispielsammlung abgeändert:

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    if( inByte ){
      Serial1.write("*");
    }     
    Serial.write(inByte);
  }
 
  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}



Wenn nun das JY-MCU Modul auf dem Serial 1 Port via Bluetooth empfangene Daten an den Arduino liefert, werden diese am Serial Monitor sichtbar und zusätzlich via Bluetooth dem ursprünglichen Sender durch eine Anzahl von * quittiert,  die der Anzahl der empfangenen Zeichen entspricht.

Als Sender den PC zu nutzen, der auch am Arduino zum Monitoring hängt, erschien mir dann doch etwas langweilig. Stattdessen habe ich als Sender ein Android Smartphone mit der App LM BT Terminal benutzt. Das Finden und Anmelden funktionierte auch hier problemlos.


... und hier die "Empfangsseite" als Serial Monitor Ausgabe:



Hin- und Rückrichtung der Bluetooth Verbindung funktionieren demnach.
Danach habe ich mir die Schnittstellenpegel angeschaut. Leider bisher nur in Senderichtung. Das Programm habe ich so erweitert, dass der JY-MCU ständig das Zeichen "x" sendet. Für Android habe ich noch keine passende App gefunden, die ähnliches erlaubt oder mit der man eine ausreichend große Datei seriell übertragen könnte. Wer suchet, der findet ...

Messaufbau: einfach mit dem Oszilloskop am RXD Pin messen.


Einstellung: 5 V/cm vertikal und 0,2 ms/cm Zeitbasis horizontal



Das Signal im Detail:
Es handelt sich um einen asynchronen seriellen Datenstrom, mit 9600 bit/s, 8 Datenbits, ohne Paritätsbit, und einem Stopbit - kurz: 9600 8N1



Der Datenstrom wird also mit einem Spannungspegel von 5 V an das JY-MCU Modul übergeben.

Jetzt interessiert mich noch der Pegel, den das Modul an den Arduino liefert. Einerseits sollten es 3,3 V sein, aber das wäre nicht ausreichend für den Arduino. Andererseits funktioniert in der Praxis die Kommunikation. Sind es nun 5 V oder nur 3,3 V? 
Also weiter nach einer brauchbaren App suchen, um einen messbaren Empfangsbitstrom zu erzeugen. Wer eine kennt, bitte melden. (Sonst muss ich noch selbst eine programmieren).


[Fortsetzung folgt ...]

Kommentare:

  1. Hallo Chris,
    wir arbeiten mit dem gleichen BT Board.
    Leider kann ich Dir bei dem Programm nicht weiterhelfen.
    Aber wenn Du das Problem gelöst hast, wie wäre es mit einer Lösung für eine Upload Möglichkeit via BT.
    Für unseren "Arduino Mower" suchen wir verzweifelt nach einer Lösung.
    siehe http://www.insaneo.selfhost.bz/index.php/forum/ardunio-mower/31-funk-anbindung-bluetooth-wlan
    Grüße Markus

    AntwortenLöschen
  2. Hallo Markus,
    ein interessantes Projekt habt ihr da. Über eine BT Upload Funktion habe ich noch nicht nachgedacht, habe auch noch keine Anwendung für BT (war reiner Spieltrieb, das Board zu testen ;-)).

    AntwortenLöschen
  3. Ich werde diesem Blogpost die nächsten wochen im Auge behalten... ich glaube hier bahnt sich was sehr nützliches an. Bleib bitte dran, das war schon jetzt sehr hilfreich zu lesen.

    Folgend
    Mortimer

    AntwortenLöschen
  4. Die 3.3V reichen einem ATMega als High-Pegel, siehe Datenblatt:
    Vinh min. 0.6Vcc (also 3V bei Vcc = 5V)
    Den Rx auf Dauer direkt zu verbinden würde ich nicht machen.
    Besser Spannungsteiler dazwischen. Das geht aber nur bei niedrigen
    Baudraten.

    AntwortenLöschen
  5. Ich bin bei meinem Projekt dabei einfach nur ein Bluetoothsignal zu empfangen. Also einfach wenn mein Handy mit dem Board connectet das dann was ausgelöst wird wie zb ein Türsummer.

    AntwortenLöschen