机器人蓝牙通信绕坑

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

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

相关推荐
我们的五年18 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
陈鋆19 分钟前
智慧城市初探与解决方案
人工智能·智慧城市
qdprobot20 分钟前
ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
网络·人工智能·百度·文心一言·arduino
QQ395753323720 分钟前
金融量化交易模型的突破与前景分析
人工智能·金融
QQ395753323721 分钟前
金融量化交易:技术突破与模型优化
人工智能·金融
-一杯为品-23 分钟前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
The_Ticker33 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
程序猿阿伟34 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
Elastic 中国社区官方博客40 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
jwolf240 分钟前
摸一下elasticsearch8的AI能力:语义搜索/vector向量搜索案例
人工智能·搜索引擎