机器人蓝牙通信绕坑

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

一个是蓝牙模块版本,流行的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.

相关推荐
qq_153214526429 分钟前
Openai Dashboard可视化微调大语言模型
人工智能·语言模型·自然语言处理·chatgpt·nlp·gpt-3·transformer
FL162386312934 分钟前
[C++]使用纯opencv部署yolov12目标检测onnx模型
c++·opencv·yolo
JenKinJia40 分钟前
Windows10配置C++版本的Kafka,并进行发布和订阅测试
开发语言·c++
青松@FasterAI1 小时前
【Arxiv 大模型最新进展】PEAR: 零额外推理开销,提升RAG性能!(★AI最前线★)
人工智能
huoyingcg1 小时前
武汉火影数字|VR沉浸式空间制作 VR大空间打造
人工智能·科技·vr·虚拟现实·增强现实
冷冷清清中的风风火火1 小时前
本地部署DeepSeek的硬件配置建议
人工智能·ai
wen__xvn1 小时前
每日一题洛谷P1914 小书童——凯撒密码c++
数据结构·c++·算法
sauTCc1 小时前
RAG实现大致流程
人工智能·知识图谱
lqqjuly1 小时前
人工智能驱动的自动驾驶:技术解析与发展趋势
人工智能·机器学习·自动驾驶
liujingtech2 小时前
Kotlin实践下来 takeIf 并不是所有场景的银弹
android