机器人蓝牙通信绕坑

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

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

相关推荐
飞哥数智坊4 小时前
从CodeBuddy翻车到MasterGo救场,我的小程序UI终于焕然一新
人工智能
AKAMAI7 小时前
跳过复杂环节:Akamai应用平台让Kubernetes生产就绪——现已正式发布
人工智能·云原生·云计算
新智元8 小时前
阿里王牌 Agent 横扫 SOTA,全栈开源力压 OpenAI!博士级难题一键搞定
人工智能·openai
新智元8 小时前
刚刚,OpenAI/Gemini 共斩 ICPC 2025 金牌!OpenAI 满分碾压横扫全场
人工智能·openai
用户2018792831678 小时前
Android黑夜白天模式切换原理分析
android
机器之心8 小时前
OneSearch,揭开快手电商搜索「一步到位」的秘技
人工智能·openai
阿里云大数据AI技术9 小时前
2025云栖大会·大数据AI参会攻略请查收!
大数据·人工智能
芦半山9 小时前
「幽灵调用」背后的真相:一个隐藏多年的Android原生Bug
android
YourKing9 小时前
yolov11n.onnx格式模型转换与图像推理
人工智能
卡尔特斯9 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin