51单片机hc-05蓝牙模块不能完成指定任务

连接好hc05蓝牙模块后用想实现点亮LED无法成功,发送有回馈,但发送文本数据收到乱码,蓝牙模块可以被,事先设置了at改波特率为9600了,困扰几天了希望能得到解决,各位可以发我你们之前蓝牙点亮LED的代码或者App

img


#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,上面两步都没问题后,把蓝牙串口接到单片机,电脑连蓝牙,再用串口调试助手试试。

你说文本数据有乱码,我觉得可能是串口的波特率或其他参数没有设置正确,当然也可能是单片机的返回数据本身有问题。

两个蓝牙模块之间的字节发送和接收已经实现了吗?

  • 这篇文章讲的很详细,请看:蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输)
  • 除此之外, 这篇博客: 51单片机与HC-05蓝牙模块连接使用中的 1.简单的红外控制LED灯 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码如下(示例):

    // 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,最好确认下