机器人蓝牙通信绕坑

为机器人添加手机和语音控制是很有必要的,其中蓝牙通信有很多的坑。

一个是蓝牙模块版本,流行的2.0,4.0,5.0一旦买错,会十分麻烦,如果不懂编程,无法和板子通信,又连不上电脑和手机,排错十分困难。

看视频买了一块hc08,不能直接连mac和android手机,需要自己写程序搞定,折腾了半天,一直无法与arduino通信,浪费了大量时间和精力。如果学习开发,最好找兼容2.0和4.0的模块学习,单独的支持一种如果代码选的不对会浪费很多时间,搞懂了不同版本的蓝牙编程的区别后,产品上可以根据需要上低功耗蓝牙或者更。

hc08不支持2.0,不能直接用手机连接。可以使用串口助手(win或者mac)用AT设置板子参数,借助ble蓝牙助手(android)或者lightblue(iphone)做读写测试,初步借助第三方软件确定我们的蓝牙模块没问题,这一步是很重要的,万一有问题,可以及时找商家调换,第三方工具的抓图可以做为板子有问题的证据,最主要是的万一有问题,你写半天代码调不通,不管怎么检查代码都是白浪费时间,所以这一步非常的重要,板子是很容易损坏的,插错导线可能就废了,你还在检查代码完全没用。

使用串口助手对板子简单设置,也可以不设置使用板子默认的参数,如果没办法通信,还是需要借助串口助手研究,板子插到电脑,选择相应串口,波特率设置为9600,因为板子默认是9600,其他不变,输入法调整到英文,中文字符AT指令不支持,这一步是要注意的,搞半天有些指令有效有些没效,急得冒汗了就检查一下你的输入法是不是英文吧。

先输入AT,回显OK,说明一切正常,如果不回显OK,检查串口对不对,波特率对不对,下面是HC08的AT命令,这个模块他不支持设置密码。

常用的AT命令。

AT+RX,输出板子的一些参数

AT+VERSION,输出固件版本,如果发现有BUG,需要针对固件版本确认。

AT+DEFAULT,恢复出厂,如果改了什么东西出了问题,比如连不上,又找不到原因,就恢复出厂设置

AT+ROLE,设置主从机角色,如果设置等待手机连接,那手机就是主,设备就是从,默认是从机,修改为AT+ROLE=M,改为主机,AT+ROLE=S,改为从机。手机电脑发现不了,有可能是主从设置不对,也有可能是蓝牙不兼容,需要使用蓝牙助手确认。

AT+NAME,有两种用法,一种是查询名字,一种是修改名字。AT+NAME=?是查询当前名字,一种是AT+NAME=XXX,修改名字为XXX,大部分指令都可以加个=?来查询原来的值。这个指令用的也多,手机连接可以通过名字过滤自己的设备。

AT+ADDR,这个可以修改mac地址,一般不改就可以,通过name和mac可以防止连接错了重名或者重mac地址的设备。同样如果用到mac,可以使用AT+ADDR=?来查询当前的mac地址。

AT+BAUD,这个是设置波特率,不懂不要改,一改也会导致收发出问题,程序需要再改。

其他几个重要的就是UUID,

AT+LUUID,AT+SUUID,AT+TUUID这几个程序中会用到,使用手机连接就是读写这几个UUID的服务。HC08默认的三个UUID是FFF0,FFE0,FFE1,分别对应搜索等三个服务,如果透传,手机需要读写ffe1对应的服务。如下,最下面的三个服务,开头的0000fff0,0000ffe0,0000ffe1

要正常通信,还有十分麻烦的字符编码问题,是ascII还是utf8都需要按照需要来。

如果你的蓝牙模块没有对应的调试板,你可以把他接到arduino上,两个板子RX 对应TX,TX对应RX,然后使用下面的代码来修改,AT命令也可以通过代码来执行,arduino IDE编写以下代码,修改hc08的名字和波特率,下面的代码要烧录到arduino的板子里。

cpp 复制代码
int ArduLED = 13;            //Internal Arduino´s LED
char ssid[10] = "Zowi";      // Name for Bluetooth.
char baudios = '8';          // 1=>1200 baudios, 2=>2400, 3=>4800, 4=>9600 (default), 5=>19200, 6=>38400, 7=>57600, 8=>115200
char password[10] = "1234";  // Password for pairing

void setup() {
  Serial.begin(9600);  //9600bauds is the deafult baudrate for these modules.
                       //if it´s not working try changing this baudrate to match your HC-06 initial setup

  // Waiting time (10 seconds) onboard LED is ON:
  pinMode(ArduLED, OUTPUT);
  digitalWrite(ArduLED, HIGH);
  delay(10000);
  digitalWrite(ArduLED, LOW);

  Serial.print("AT");
  delay(1000);  // Now configuration start

  Serial.print("AT+NAME="+String(ssid));
  //Serial.print(ssid);
  delay(1000);  // Change Name of BT

  Serial.print("AT+BAUD="+String(baudios));
  //Serial.print(baudios);
  delay(1000);  // Change Baud

}

void loop() {
  // After programing bluetooth, onboard LED will Blink.
  digitalWrite(ArduLED, !digitalRead(ArduLED));
  delay(500);
}

一旦你的板子和arduino或者其他mcu相连了,你就可以使用ble的uuid连接向其他的arduino发送命令,包含字符串和数字,字符等。如果你的开发相关的app来控制,那可以使用fastble,这是一个功能十分强大的ble框架,支持蓝牙搜索,连接,读写等操作,大大的减少了我们开发相应app的概率。

fastble地址:

GitHub - Jasonchenlijian/FastBle: Android Bluetooth Low Energy (BLE) Fast Development Framework. It uses simple ways to filter, scan, connect, read ,write, notify, readRssi, setMTU, and multiConnection.

相关推荐
EveryPossible44 分钟前
穿透iframe
学习
檐下翻书1731 小时前
产品开发跨职能流程图在线生成工具
大数据·人工智能·架构·流程图·论文笔记
杜子不疼.1 小时前
计算机视觉热门模型手册:Faster R-CNN / YOLO / SAM 技术原理 + 应用场景对比
人工智能·计算机视觉·r语言·cnn
GitCode官方1 小时前
具身智能时代,从“白虎”开始:白虎数据集构建通用机器人数据底座
机器人·具身智能·atomgit
木木木一1 小时前
Rust学习记录--C7 Package, Crate, Module
开发语言·学习·rust
腾视科技2 小时前
腾视科技TS-SG-SM7系列AI算力模组:32TOPS算力引擎,开启边缘智能新纪元
人工智能·科技
极新2 小时前
深势科技生命科学高级业务架构师孟月:AI4S 赋能生命科学研发,数智化平台的实践与落地 | 2025极新AIGC峰会演讲实录
人工智能
落羽凉笙7 小时前
Python学习笔记(3)|数据类型、变量与运算符:夯实基础,从入门到避坑(附图解+代码)
笔记·python·学习
Light607 小时前
破局而立:制造业软件企业的模式重构与AI赋能新路径
人工智能·云原生·工业软件·商业模式创新·ai赋能·人机协同·制造业软件
Quintus五等升7 小时前
深度学习①|线性回归的实现
人工智能·python·深度学习·学习·机器学习·回归·线性回归