机器人蓝牙通信绕坑

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

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

相关推荐
ULTRA??1 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
HerayChen7 分钟前
HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac
android·macos·智能手机
顾北川_野8 分钟前
Android 手机设备的OEM-unlock解锁 和 adb push文件
android·java
艾派森8 分钟前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
hairenjing112310 分钟前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小蜗子15 分钟前
Multi‐modal knowledge graph inference via media convergenceand logic rule
人工智能·知识图谱
SpikeKing27 分钟前
LLM - 使用 LLaMA-Factory 微调大模型 环境配置与训练推理 教程 (1)
人工智能·llm·大语言模型·llama·环境配置·llamafactory·训练框架
小黄人软件36 分钟前
android浏览器源码 可输入地址或关键词搜索 android studio 2024 可开发可改地址
android·ide·android studio
凌云行者36 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者40 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl