arduino 蓝牙控制LED灯实验

实验目标:使用手机的蓝牙功能控制LED灯,单片机使用arduino UNO。

物料准备: 单片机arduino UNO 1个;

蓝牙模块HC-05 1个;

串口模块 1个;

LED灯 1个

一、用串口模块配置HC-05蓝牙模块,把蓝牙模块通过串口助手连接于笔记本电脑。

二、蓝牙模块上有个按键,手按着它再通电,这样蓝牙模块进入配置模式。 此时灯闪的频率很慢。

三、在笔记本上打开串口助手。笔者用的是SSCOM V5.

在加回车换行前打勾。

发送以下指令。

四、最后一个指令 AT+RESET蓝牙模块就退出配置模式了。

五、单片机Arduino编程。

复制代码
#include <SoftwareSerial.h>  // 包含软串口库

// 定义软串口引脚 (RX, TX)
SoftwareSerial BT(10, 11);  // HC-05的TX接Arduino的Pin2,RX接Pin3

// LED引脚定义
const int ledPin = 13;
char btData;  // 存储蓝牙接收的数据

void setup() {
  // 初始化硬件串口(用于电脑调试)
  Serial.begin(38400);
  
  // 初始化软串口(用于蓝牙模块)
  BT.begin(38400);  // HC-05默认波特率9600
  
  // 设置LED引脚
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  
  // 打印启动信息
  Serial.println("=== Bluetooth LED Control System ===");
  Serial.println("System initialized successfully!");
  Serial.println("Bluetooth module is ready.");
  Serial.println("Send commands via Bluetooth:");
  Serial.println("  '1' - Turn ON LED");
  Serial.println("  '0' - Turn OFF LED");
  Serial.println("  '?' - Get status");
  Serial.println("==============================");
  
  // 也向蓝牙模块发送欢迎信息
  BT.println("Bluetooth Connected!");
  BT.println("Send commands:");
  BT.println("1 - LED ON");
  BT.println("0 - LED OFF");
  BT.println("? - Status");
}

void loop() {
  // 检查蓝牙是否有数据
  if (BT.available() > 0) {
    btData = BT.read();  // 读取蓝牙数据
    
    // 打印接收到的数据到串口监视器
    Serial.print("Bluetooth received: ");
    Serial.println(btData);
    
    // 处理命令
    processCommand(btData);
  }
  
  // 检查串口监视器是否有数据(从电脑发送到蓝牙)
  if (Serial.available() > 0) {
    char dataFromPC = Serial.read();
    BT.write(dataFromPC);  // 转发到蓝牙模块
    Serial.print("Sent to Bluetooth: ");
    Serial.println(dataFromPC);
  }
}

void processCommand(char cmd) {
  switch(cmd) {
    case '1':  // 打开LED
      digitalWrite(ledPin, HIGH);
      BT.println("LED turned ON");
      Serial.println("LED: ON");
      break;
      
    case '0':  // 关闭LED
      digitalWrite(ledPin, LOW);
      BT.println("LED turned OFF");
      Serial.println("LED: OFF");
      break;
      
    case '?':  // 查询状态
      BT.print("LED status: ");
      BT.println(digitalRead(ledPin) ? "ON" : "OFF");
      Serial.print("LED status: ");
      Serial.println(digitalRead(ledPin) ? "ON" : "OFF");
      break;
      
    default:  // 未知命令
      BT.println("Unknown command. Use: 1, 0, ?");
      Serial.println("Unknown command received");
      break;
  }
}

六、把单片机、蓝牙模块、串口模块、LED灯连接好。

七、打开手机上的蓝牙APP,使用如下图的蓝牙模块,它可以搜索到经典蓝牙。

八、打开蓝牙APP,搜索蓝牙,连接上蓝牙模块,再发送1.

九、此时LED灯就亮了。

相关推荐
铅笔小新z1 小时前
【stm32】输入捕获-超声波测距
stm32·单片机·嵌入式硬件
Zw-awa1 小时前
PID 的花样:先看懂模糊 PID 和单神经元自适应 PID
stm32
铅笔小新z1 小时前
【stm32】全彩led灯(PWM)
stm32·单片机·嵌入式硬件
澄纸气2 小时前
STM32 外部中断实战:对射式计数器和编码器计数器,两个实验跑通 EXTI
stm32·单片机·嵌入式硬件
2501_922639582 小时前
率能半导体 SS6286L直流双向马达驱动芯片:18V/7A,覆盖电子锁、玩具、无线充电、机器人四大应用场景
stm32·单片机·嵌入式硬件·硬件工程
铅笔小新z4 小时前
【stm32】PWM呼吸灯
stm32·单片机·嵌入式硬件
深圳老胡4 小时前
RTX 与其他 RTOS 操作系统的差异及优缺点分析
笔记·stm32·单片机·代码规范
happygrilclh4 小时前
LVGL 移植整体流程
stm32
Brilliantwxx6 小时前
【STM32】 RTC 实时时钟详解:从概念到预分频器
stm32·单片机·嵌入式硬件·mcu·bash
lhbweilai9 小时前
分析FreeRTOS内核对象API的源码实现(四)
c语言·stm32·单片机