HC05蓝牙点亮LED

article/2025/10/30 12:17:51

 本文是对基于STM32的HC05蓝牙点灯实验,目的在于认识HC05蓝牙模块,学会配置HC05,知道怎么用蓝牙在手机上控制单片机并且传输数据,虽然本文只控制led,但是点灯就是基础,主要在于学习hc05蓝牙模块。

 1.认识一下HC05模块

6根引脚,名称与功能如下;
VCC 接电源的正极,电压的范围为3.3v到5.0v;
VDD 为外接供电电源输入端;
GND 地线;
TXD:模块串口发送引脚(TTL电平,不能直接接RS232电平),可直接接单片机的RXD引脚;
RXD:模块串口接收引脚(TTL电平,不能直接接RS232电平),可直接接单片机的TXD引脚;
KEY:用于进入AT状态;
LED:这个引脚是用来检测蓝牙模块是否已经连接上了其他蓝牙设备;

原理啥的可以看参考手册,但是我觉得HC蓝牙本质上就是控制串口,所以学好串口就会这玩意。

2.hc05使用前的配置

1.首先你需要有转TTL口和两个蓝牙模块,连接方式就是tx和RX都反接,VCC对VCC,GND也是
2.将TTL插到电脑上打开串口助手(插得时候记得把蓝牙模块上面有个小按键按住,这是为了让蓝牙模块进入AT模式)
3.配置参数

 1.HC-T串口助手

这是我买的HC05提供是上面的一个串口助手,按图片来操作,先进AT模式再配置,

这个串口助手把指令封装好了,测试AT指令会返回OK,波特率再调试到9600,因为我使用的是STM32F103C8T6,另外还可以给你的蓝牙起名字还有配对密码,设置好之后可以在手机上安装一个蓝牙调试器,先实现手机与电脑串口的数据传输。

这个蓝牙调试软件可以修改你的字符编码和换行符,根据需要修改。

2.XCOM串口软件  

这个XCOM串口指令配置蓝牙指令可以参考这个 配置指令

3.STM32与HC05(重点)

我用的是USART1,所以连接的是A9和A10 

话不多说直接上代码

Serial.h 

#include "stm32f10x.h"                  
#include <stdio.h>
#include <stdarg.h>char Serial_RxPacket[100];	//定义一个接收存放		
uint8_t Serial_RxFlag;      //接收标志位void Serial_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     //开启串口与GPIO时钟GPIO_InitTypeDef GPIO_InitStructure;               GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         //tx发送引脚  输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);                   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;           //rx接收  出入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);                     //初始化GPIOUSART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 9600;                   //波特率USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不使用硬件流USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;   //发送接收模式USART_InitStructure.USART_Parity = USART_Parity_No;       //无奇偶校验位USART_InitStructure.USART_StopBits = USART_StopBits_1;    //1位停止符USART_InitStructure.USART_WordLength = USART_WordLength_8b;    //配置帧数据字长USART_Init(USART1, &USART_InitStructure);                     //usart结构体初始化USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);         //开启中断控制 使能串口NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //NVIC优先级NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);                       //NVIC结构体配置USART_Cmd(USART1, ENABLE);          //开启USART1
}void USART1_IRQHandler(void)            //串口中断
{static uint8_t RxState = 0;             static uint8_t pRxPacket = 0;       //用于数据存储次数if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)   //判断是否接收到数据{uint8_t RxData = USART_ReceiveData(USART1);       //暂存到RxDataif (RxState == 0){if (RxData == '@' && Serial_RxFlag == 0)     //当接收到@字符而且标志位为0是{RxState = 1;               pRxPacket = 0;                 }}else if (RxState == 1)             { if (RxData == '\r')             //当接收到\r时{RxState = 2;}else{Serial_RxPacket[pRxPacket] = RxData; //数据传给Serial_RxPacket[pRxPacket]pRxPacket ++;             //同时pRxPacket 的位置++}}else if (RxState == 2){if (RxData == '\n')        {RxState = 0;Serial_RxPacket[pRxPacket] = '\0'; //给字符数组加一个结束标志位Serial_RxFlag = 1;}}USART_ClearITPendingBit(USART1, USART_IT_RXNE);  //清除}
}

mian.c

#include "stm32f10x.h"                  
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include "LED.h"
#include "string.h"int main(void)
{OLED_Init();LED_Init();Serial_Init();OLED_ShowString(1, 1, "TxPacket");OLED_ShowString(3, 1, "RxPacket");while (1){if (Serial_RxFlag == 1){OLED_ShowString(4, 1, "                ");OLED_ShowString(4, 1, Serial_RxPacket);if (strcmp(Serial_RxPacket, "ON") == 0){LED1_ON();Serial_SendString("LED_ON_OK\r\n");OLED_ShowString(2, 1, "                ");OLED_ShowString(2, 1, "LED_ON_OK");}else if (strcmp(Serial_RxPacket, "OFF") == 0){LED1_OFF();Serial_SendString("LED_OFF_OK\r\n");OLED_ShowString(2, 1, "                ");OLED_ShowString(2, 1, "LED_OFF_OK");}else{Serial_SendString("ERROR\r\n");OLED_ShowString(2, 1, "        ");OLED_ShowString(2, 1, "ERROR");}Serial_RxFlag = 0;}}
}

这部分代码都是江科大讲串口传输数据包的代码,刚开始我自己做的是传输一个字符让LED点亮,后面发现一些传感器的数据都是多个的,就想先使用字符串来控制LED,后面因为没有设置好包头包尾容易乱码,而数据包的传输可以把多个单独数据打包起来,方便进行多字节的数据通信,建议大家可以看一下也江科大的32视频,受益匪浅 。

本代码使用@当包头,\r\n当包尾,在手机的蓝牙调试中记得加上,点灯都会了,其他关于此模块都差不多。

 


http://chatgpt.dhexx.cn/article/2xFBFnxJ.shtml

相关文章

两个hc05蓝牙模块在两块单片机上通信(附完整代码)

目录 第一步&#xff1a;进入AT模式 第二步&#xff1a;同时插在电脑上实现通信 第三步&#xff1a;单片机上通信 代码链接 所需材料&#xff1a;两个hc05蓝牙&#xff0c;两个usb转串口模块&#xff0c;两块单片机 第一步&#xff1a;进入AT模式 接线图如下所示 HC-05蓝牙…

stm32+hx711+蓝牙hc05 称重系统(蓝牙电子秤)

stm32称重模块hx711蓝牙模块hc05 本项目使用主控stm32f103c8t6&#xff0c;称重模块hx711&#xff0c;蓝牙模块hc05上传至手机app/电脑app显示数值 模块 1、stm32f103c8t6最小系统板 2、hx711 HX711 模块 A 通道带有 128 倍信号增益&#xff0c;可以将 5mV 的电压放大 …

蓝牙模块HC05遇到的一些常见的问题

调模块总是让人很头疼&#xff0c;有时候遇到一些其实很简单的问题也找不到原因&#xff0c;着实难受。这里写一点我在配置HC05遇到的一些常见的问题和对一些问题的理解。 如果你觉得对你有帮助&#xff0c;希望点个赞再走&#xff0c;如果按照本文没解决你的问题&#xff0c;下…

51单片机蓝牙模块(HC05)运行原理

51单片机蓝牙模块&#xff08;HC05&#xff09;及其运行原理 目录 51单片机蓝牙模块&#xff08;HC05&#xff09;及其运行原理一、测试蓝牙模块二、配置蓝牙模块三、烧写程序四、测试参考博文 一、测试蓝牙模块 在所有工作进行之前首先看一看自己的蓝牙模块是否是正常的&…

HC-05的使用-详细

蓝牙转串口模块HC-05模块使用记录 最近在弄一个需要无线传输数据的项目&#xff0c;虽然以前也接触过HC-05这个模块&#xff0c;但是始终只是知道简单的使用&#xff0c;借这个机会更加深入的学习一下这个模块。 初识HC-05 BLK-MD-HC-05蓝牙模块是专为智能无线数据传输而打造…

STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

前言 不论是HC05还是HC06&#xff0c;我们用到的都是蓝牙模块的透传功能&#xff0c;只需要用到4个引脚&#xff1a;RXD、TXD、VCC&#xff08;5V&#xff09;、GND。 HC-05的使用 1、HC-05有6个引脚&#xff0c;但是我们只用到4个。 2、HC-05正面有一个按键。与HC-06的区别是&…

基于 OSGi的企业级开发框架实践——认识OSGi和SpringDM

一. OSGi基础 1. 什么是OSGi OSGi——Open Service Gateway Initiative&#xff0c;最初的目的是为各种嵌入式设备提供通用的软件运行平台。后来经过10年的发展和壮大&#xff0c;OSGi已经不只是在嵌入式设备中应用&#xff0c;而是被推广到各种其他的应用领域&#xff0c;比如…

Kotlin + Spring Boot: 下一代企业级开发

Kotlin Spring Boot: 下一代企业级开发 前端 React UXCore &#xff08;使用 nowa&#xff09;学习 Jietu20171210-022532.jpg Jietu20171210-022551.jpg image.png 工程源代码&#xff1a;https://github.com/KotlinSpringBoot/wekool

《Qt 企业级开发》

作者&#xff1a; 一去、二三里 个人微信号&#xff1a; iwaleon 微信公众号&#xff1a; 高效程序员 《Qt 企业级开发》 是亮哥专门打造的一个 Qt 终极篇 专栏&#xff0c;主要面向企业级一站式开发&#xff0c;包括&#xff1a;模块化开发、日志输出、打包发布、单元测试、自…

BladeX企业级开发平台商业版源码,BladeXAvue联合版

BladeX企业级开发平台 BladeX是一款精心设计的微服务架构&#xff0c;提供 SpringCloud 全套解决方案 开源中国首批完美集成 SpringCloud Alibaba 系列组件的微服务架构 基于稳定生产的商业项目升级优化而来&#xff0c;更加贴近企业级的需求 追求企业开发更加高效&#xff0c…

JAVA企业级开发技术

传统框架 SpringMVC(表现层)Struts2(表现层)Mybatis(数据层)Hibernate(数据层)SpringData Jpa(数据层) 开发中比较常见的组合: SSM : Spring-SpringMVC-MybaitsSSH :Spring-Struts2-hibernate 2017年热门开发框架 Springboot快捷开发,封装牛逼,简单入门 SpringCloud 通过Spr…

Spring Boot 企业级开发课后题答案

Spring Boot 企业级开发课后题答案 黑马程序员 加粗字体为答案 转发请注明出处【感谢】 第一章 1.1 填空题 Pivotal 团队在原有 spring 框架的基础上开发了全新的Spring Boot框架。Spring Boot框架在开发过程中大量使用 约定优先配置 的思想来摆脱框架中各种复杂的手动配置。…

SpringBoot企业级开发

根据书籍《SpringBoot企业级开发教程》梳理SpringBoot开发框架&#xff0c;代码在本人Mac运行通过&#xff0c;IDE是IntelliJ。 SpringBoot知识图谱&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1CXMCMBimTPk8kUYir4JETg 提取码&#xff1a;bnpb 部分截图&#…

企业级应用开发(SSM) Spring

目录 一&#xff1a;引言 1.1企业级系统&#xff1a; 1.2那么如何去应对企业级应用开发 1.3 Spring的绿草丛 二&#xff1a;Spring的绿草丛 2.1 Spring 介绍 2.2 Spring两大核心技术 a.控制反转&#xff08;IoC(Inversion of Control) / 依赖注入&#xff08;DI)&#xf…

2019泰迪杯C题案例分析-python大数据自动化数据挖掘

第七届“泰迪杯”数据挖掘挑战赛——C 题&#xff1a;运输车辆安全驾驶行为的分析 一、问题背景二、研究问题三、分析问题excel的批量处理时间、速度、方向角的处理经纬度的处理大数据处理的优化 一、问题背景 车联网是指借助装载在车辆上的电子标签通过无线射频等识别技术&am…

利用SPSS Modeler进行数据挖掘——探究不同程序语言的就业情况

欢迎加入程序员QQ交流群&#xff5e;&#xff5e;&#xff1a;859022876 程序员 本次SPSS Modeler项目实战&#xff0c;是我个人课余做的一个简单案例&#xff0c;因为本人也是互联网大家庭中的一员&#xff0c;因此最关心的必定是程序语言的未来走势和就业情况&#xff0c;于是…

数据挖掘实战—餐饮行业的数据挖掘之数据探索(EDA)

文章目录 引言一、前期准备1.目标定义与任务理解 二、数据采集与抽样三、数据探索1.数据质量分析1.1缺失值分析1.1.1缺失值可视化1.1.2描述性统计1.1.3统计缺失数与缺失率 1.2异常值分析1.2.1 3σ原则1.2.2箱型图分析 1.3一致性分析1.4重复数据处理 2.数据特征分析2.1分布分析2…

数据挖掘实战—餐饮行业的数据挖掘之数据预处理

文章目录 引言一、数据清洗1.缺失值处理1.1 拉格朗日插值法1.2牛顿差值法 2.异常值的处理 二、数据集成1.实体识别2.冗余属性识别3.数据变换3.1 简单函数变换3.2 规范化3.2.1 最小-最大规范化3.2.2 零-均值规范化&#xff08;标准化&#xff09;3.2.3 小数定标规范化 3.3 连续属…

数据挖掘案例:建立客户流失模型

随着市场竞争的加剧&#xff0c;中国电信面临的压力越来越大&#xff0c;客户流失也日益增大。从统计数据看&#xff0c;今年固话小灵通的销户数已经超过了开户数。面对如此严峻的市场形式&#xff0c;当务之急就是要尽全力减少客户的流失。因此&#xff0c;利用数据挖掘方法&a…

数据挖掘实战案例——客户细分

我们首先来看看原始数据 具体代码与原始数据可以在我的GitHub中git clone一下学习 代码与数据github地址 共26663条数据 此次分析是想对根据客户的购买情况对客户进行细分 分析用户的购买消费行为 首先读取csv import pandas as pd #import numpy as np trad_flow pd.read_…