连接好hc05蓝牙模块后用想实现点亮LED无法成功,发送有回馈,但发送文本数据收到乱码,蓝牙模块可以被,事先设置了at改波特率为9600了,困扰几天了希望能得到解决,各位可以发我你们之前蓝牙点亮LED的代码或者App
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
BTSerial.begin(9600); // 设置蓝牙模块波特率
pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出
}
void loop() {
if (BTSerial.available()) { // 如果蓝牙模块有数据可读
char c = BTSerial.read(); // 读取数据
if (c == '1') { // 如果收到的是字符'1'
digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
BTSerial.println("LED is on"); // 回复蓝牙模块
} else if (c == '0') { // 如果收到的是字符'0'
digitalWrite(LED_BUILTIN, LOW); // 关闭LED
BTSerial.println("LED is off"); // 回复蓝牙模块
} else { // 如果收到的不是'1'或'0'
BTSerial.println("Invalid command"); // 回复蓝牙模块
}
}
}
1,准备个串口调试软件,USB转TTL串口一个,蓝牙的串口线连接电脑的USB转TTL串口,电脑上开两个串口助手,一个打开蓝牙虚拟串口,一个打开USB串口,先通过电脑试验两个串口能否透传
2,单片机的串口,先接电脑的USB串口,电脑上用串口调试软件确认可以正常处理串口指令
3,上面两步都没问题后,把蓝牙串口接到单片机,电脑连蓝牙,再用串口调试助手试试。
你说文本数据有乱码,我觉得可能是串口的波特率或其他参数没有设置正确,当然也可能是单片机的返回数据本身有问题。
两个蓝牙模块之间的字节发送和接收已经实现了吗?
代码如下(示例):
// 51单片机 #include<reg52.h> typedef unsigned int uint; typedef unsigned char uchar; sbit led1 = P2^1; //根据各位实际的单片机上的小灯硬件连接,随便选择一个即可 uint pass = 0; //传递数据位 void UART_init() //设置串行通信 本晶振为11.0592MHZ,其他的就自己算一下应该设置多少 { TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; //波特率9600 SM0 = 0; SM1 = 1; // 串口工作方式1 10位异步 REN = 1; //串口允许接收 TR1 = 1; EA = 1; ES =1 ; //串口中断 } int main() { UART_init(); //波特率9600 while(1) { if(pass == 0x31) led1 = 0; //本单片机P2^1为小灯 else led1 = 1; if(pass == 0x41) P2 = 00; //本单片机P2^1为小灯 else led1 = 1; } } void UART_INTERRUPT() interrupt 4 { pass = SBUF; RI = 0; SBUF = pass; //手机和蓝牙模块通讯时,我们可以打开电脑串口调试工具查看我们的发送值) while(!TI); TI = 0; }
波特率和你的代码设置要一致的,你发送的和接收的都是utf-8,最好确认下