樹莓端連接
樹莓引腳圖:
這裏我們使用編號2、6 、8 、10 引腳 。引腳2連接藍牙模塊vcc,引腳6連接藍牙模塊GND端,引腳8連接RXD端,引腳10連接TXD端。如下圖所示
樹莓端配置
步驟簡介:
1. 配置樹莓派的baud rate
默認情況下,樹莓派讀寫串口的boud rate是115200,而HM-05默認的baud rate是9600,爲了使樹莓派與HC-05的串口通信能正常進行,需要使他們的baud rate一致,比如這裏將樹莓派的baud rate設置成9600。
修改文件/boot/cmdline.txt,將
1 | dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait |
改成
1
|
dwc_otg.lpm_enable=0console=ttyAMA0,9600console=tty1root=/dev/mmcblk0p2rootfstype=ext4elevator=deadlinerootwait
|
修改/etc/inittab,將
1 | T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 |
改成
1
|
T0:23:respawn:/sbin/getty-LttyAMA09600vt100
|
2. 安卓智能手機使用BlueTerm連接HC-05
安卓手機需要先在系統設置界面裏面先搜索並匹配藍牙模塊HM-05
然後安裝BlueTerm應用,在 Menu菜單中選擇”Connect device”
連接成功之後,可以看到HM-05模塊的指示燈每隔兩秒會快速閃爍一次
3. 重啓樹莓派,從手機登錄樹莓派shell
將樹莓派重啓,可以在手機的BlueTerm界面上看到樹莓派系統的啓動過程,並且啓動完成之後還會提示你登錄。使用pi用戶登錄,可以執行shell命令
minicom <=> 串口 <=> HM-05 <=> 手機BlueTerm應用程序
前面介紹了樹莓派raspbian系統默認情況下會使用串口發送登錄信息,並開啓一個login console。如果我們需要讓樹莓派上的其他應用使用串口,就得先讓系統自己不再佔用串口。
設置系統不佔用串口
修改文件/boot/cmdline.txt,去掉第一個console設置,如果有kgdboc的話也去掉,如將
1 | dwc_otg.lpm_enable=0 console=ttyAMA0,9600 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait |
改成
1
|
dwc_otg.lpm_enable=0console=tty1root=/dev/mmcblk0p2rootfstype=ext4elevator=deadlinerootwait
|
然後修改/etc/inittab,註釋下面這行設置
1 | # T0:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100 |
改好後重啓生效
使用minicom進行串口通信
我們可以在樹莓派上安裝minicom工具,用其通過串口將信息發送到藍牙模塊,藍牙模塊會將從串口收到的信息通過藍牙發送出去,而藍牙模塊通過藍牙收到的信息也會通過串口發送到樹莓派上的應用程序。 首先安裝minicom
1
|
$sudoapt-getinstallminicom
|
然後可以運行minicom,讓它連接串口,連接的時候需要指定通信的baud rate。我們前面說過,藍牙模塊的默認baud rate是9600,爲了讓minicom發送的數據能被HC-05正確接收,我們運行minicom的時候也要指定baud rate爲9600
1
|
$minicom-b9600-o-D/dev/ttyAMA0
|
其中,-D參數就是指定串口設備。 運行minicom之後,將樹莓派串口連接藍牙模塊HM-05,並使HM-05工作於communication mode。此時使用智能手機的BlueTerm應用程序連接HM-05,那麼樹莓派上minicom窗口上輸入的文字就會發送到智能手機
android端配置:
藍牙搜索,連接功能大家找找網上有的是,這裏寫下數據讀操作,寫操作是在單片機上實現的控制LED燈顯示,以後再寫
//讀取數據
private class readThread extends Thread {
@Override
public void run() {
byte[] buffer = new byte[1024];
int bytes;
InputStream mmInStream = null;
try {
mmInStream = socket.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String b ="";
while (true) {
try {
if ((bytes = mmInStream.read(buffer)) > 0) {
byte[] buf_data = new byte[bytes];
for (int i = 0; i < bytes; i++) {
buf_data[i] = buffer[i];
System.out.printf("%02x, ", buffer[i]);
}
String s = bytesToHexString(buf_data);
String c = new String(buf_data,"ISO-8859-1");
b += new String(buf_data);
if(b.indexOf("\r")>=0){
Message msg = new Message();
msg.obj = b;
msg.what = 1;
LinkDetectedHandler.sendMessage(msg);
b = "";
}
}
} catch (IOException e) {
try {
mmInStream.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
break;
}
}
}
}