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 ...]