蓝牙扫盲eg.手机蓝牙控制小车实例
关于蓝牙,神马协议,固件版本,蓝牙版本,手机版本……搞得头晕,有那么麻烦吗?SHAKE IT OFF,开始简简单单的蓝牙之旅吧,原来没有那么难!需要:12345 Ps:转串口工具
1 当然,之前要配置好蓝牙模块的参数,主要就是波特率(这里用的是115200),如果你周围蓝牙模块比较多,最好起个名字,配上密码,对于蓝牙4.0而言,由于无需密码自动配对的问题,我也是无语,只能绑定Mac地址了。(配置方法,指令等,因为蓝牙版本不一而不同,参见产品资料库。)
调试要用到usb转uart,购买链接。
2 调好之后,该把开关拨到Norm位置的别忘了 。用手机蓝牙调试软件(到处都可以下到,注意蓝牙BLE的也就是4.0的不能和2.0的通用哦!)连接自己的蓝牙模块。
3 对了 在第二步之前,上传程序。
<font color="#000000"><font face="微软雅黑" size="2">/*
Bluetooth PWM control
NOTE:set your BT rate 115200 //BT(bluetooth)
Apply the BT on your romeo, using the phone BT as the controler.
Could realize the 4 direction control with key "a" "s" "d" "w"
and Stop with "q" .
https://www.dfrobot.com/
https://mc.dfrobot.com.cn
created on 17 Mar 2015
by Leff Wei @DFRobot
*/
int E1 = 5; //define M1 enable pin
int E2 = 6; //define M2 enable pin
int M1 = 4; //define M1 speed pin
int M2 = 7; //define M2 speed pin
void stop(void){ //stop
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void advance(char a,char b){ //forward
analogWrite (E1,a); //PWM speed control
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void back_off (char a,char b) { //back
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void turn_L (char a,char b) { //turn left
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void turn_R (char a,char b) { //turn right
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void setup(void) {
int i;
for(i=4;i<=7;i++)
pinMode(i, OUTPUT);
Serial1.begin(115200); //serial1 baud rate for BT
//NOTE:set your BT rate 115200
Serial.begin(57600); //serial baud rate for IDE monitor
}
void loop(void) {
if(Serial1.available()>0){//if received data from phone
char val = Serial1.read();
Serial.print("The command you input is:"); // display the command
//on your IDE monitor
Serial.println(val);
if(val!=-1){
switch(val){
case 'w'://forward
advance (100,100); //PWM speed control
break;
case 's'://backward
back_off (100,100);
break;
case 'a'://turn left
turn_L (100,100);
break;
case 'd'://turn right
turn_R (100,100);
break;
case 'q'://stop
stop();
break;
default : break;
}
delay(40);
}
Serial1.flush();
}
}</font></font>
4 用手机的蓝牙串口助手,发送wasd q分别可以控制电机了。file:///C:\Users\leffWei\AppData\Local\Temp\SGTpbq\6780\0009EDAF.gif
知识点拨:
1 蓝牙通讯原理
串口通讯,用Serial1.read()读完后,最好清理一下串口Serial1.flush().
2 自动连接,绑定的问题
之前的蓝牙模块如2.0的,可以设置密码,配对时用得着,但4.0的BLE就不行了,槽槽:设置密码纯属虚构,设置完了完全没用,怎么连怎么不要密码,希望以后有改进……,如果你的周围一堆BLE模块,最好用蓝牙绑定Mac地址这个功能。灰常适用于:蓝牙小车和蓝牙手柄的连接。
3 通信速率
这个比较容易忽视,蓝牙通讯的速率,arduino程序编写的串口速率一定要一致。
4 手机app的问题
蓝牙2.0模块,支持2.0的APP, 其他APP可能无法使用。而谈到BLE,也就是bluno等, 目前仅支持DFRobot出品的APP。另外:你要确定你的手机支持否?
1 手机系统: IOS 7.0+, Android 4.3+,WIN就只能哭了BLE可以通过普通蓝牙串口调试软甲连接非BLE的蓝牙模块;
2 Android SDK 兼容性,通俗点讲就是来源,本人红米,之前刷过多个非官方4.3+的系统,测试都没有成功,感觉机子都要刷残了!直到最近小米放出的红米MIU6测试版,竟然成功了。
另外,推荐两个BT 2.0的APP:上边的可以简单地测试IO收发,下边的可以有多种控制模式(包括键盘、手柄、以及调用手机加速度传感器信息进行手势控制)
5 配对码的问题
可能由于固件的问题(现在最新为1.9.X),有的蓝牙与手机连接时需要配对码,默认为 6个0,不是密码(当然,试试无妨)。
6 电脑蓝牙是否支持?
由于蓝牙协议的问题(官方解释,不解释),需要用这个蓝牙2.0或这个蓝牙4.0BLE。方可与电脑连接。
& so on—— 经验人士,请跟帖自己的蓝牙经验,和大家分享下吧~
"Ever tried. Ever failed. No matter. Try again. Fail again. Fail better"
_ Samuel Beckett
好贴顶一个,很实用。蓝牙连接上的各种问题都回答了 顶一发好贴~~
话说这次的帖子里居然没有标志性的逗比表情,我表示好不习惯呀~ 赞一个。 Cain 发表于 2015-3-20 13:47
好贴顶一个,很实用。蓝牙连接上的各种问题都回答了
随着蓝牙不断地更新换代,相信越来越多的bug会接踵而来:lol heinau 发表于 2015-3-20 16:48
顶一发好贴~~
话说这次的帖子里居然没有标志性的逗比表情,我表示好不习惯呀~ ...
那时候网络瘫痪,因此……:'(让我哭会…… hnyzcj 发表于 2015-3-20 22:05
赞一个。
多谢多谢,您是前辈呐~ 牛帖,果断收藏! 很不错的想法 Youyou 发表于 2015-3-22 21:17
牛帖,果断收藏!
:lol (回复竟然有字数限制)
页:
[1]