【含代码】STM32F1+JDY-31蓝牙模块,JDY-31和手机蓝牙APP通信(可控制小车运动),蓝牙遥控小车、智能小车

引言

本教程以STM32F103C8T6单片机和JDY-31蓝牙模块为核心,系统讲解从硬件搭建、AT指令配置到串口通信代码实现的完整流程。通过本教程,你将掌握以下内容(离成为大佬又近一步了):

  1. JDY-31蓝牙模块的核心特性与硬件连接要点

  2. AT指令的灵活配置方法(设备名称、配对密码、波特率等)

  3. 基于STM32标准外设库的串口通信代码实现与数据交互


代码、手机蓝牙APP、串口调试助手获取方式放在文末,需要的自行获取。

 

步骤:

  1. 给JDY-31蓝牙模块配参数(AT指令)

  2. 编写STM32F1串口通信代码

  3. 配置APP发送数据按钮

一、JDY-31蓝牙模块介绍

1.1 模块简介

JDY-31 蓝牙基于蓝牙 3.0 SPP 设计,这样可以支持 Windows、Linux、android 数据透传,工作频段 2.4GHZ,调制方式 GFSK,最大发射功率 8db,最大发射距离 30米,支持用户通过AT 命令修改设备名、波特率等指令,方便快捷使用灵活。

1.2 基本参数

    • 蓝牙版本:BLE4.2

    • 通信距离:20-30米(开阔环境)

    • 工作模式:主从一体

    • 供电电压:3.3V-6V

    • 接口类型:UART(默认波特率9600)

    • 工作频率:2.4GHz ISM波段

    1.3 引脚定义

     

    STATE

    连接状态引脚(未连接低电平,连接后高电平)

    RXD

    串口输入引脚(TTL 电平)

    TXD

    串口输出引脚(TTL 电平)

    GND

    电源地

    VCC

    电源(支持3.6-6V)注意:3.3V供电不行

    EN

     


     

    上面为JDY-31的一些介绍,下面直接加入主题:

    二、给JDY-31蓝牙模块配参数(AT指令)

    JDY-31串口AT指令集

     

    注意:JDY-31 模块串口发送 AT 指令务必加上\r\n

    2.1 首先把JDY-31和USB转TTL连接上,接线如下

     

    接好线后把USB转TTL插到电脑USB口上,可以在设备管理器上看到一个串口设备,我的是接在了COM15上(每个人的可能会不一样,具体需要到电脑设备管理器里面查看)

     

    2.2 打开“串口调试工具”,如下图(软件工具在文末可以获取

     

    打开后选择串口号(我的是COM15),选择波特率(默认波特率为9600,要是后面发送参数没反应可以换其它的都试一下),  把“回车发送”勾上,然后点击打开串口,具体如下图所示:

     

    2.3 编辑AT指令,发送参数

    配对密码:8888(需为4位,手机连接蓝牙模块是需要输入)

    蓝牙名称:JiaYou-chen(自己定,需为英文、中文手机显示不到名字)

    波特率:9600(这个参数要和STM32串口波特率对应)

    *波特率参数对应如下表:(更多的配置参数可以看JDY-31数据手册,文末有资料,可以自行获取)

     

    配置参数详细操作如下:

     

    配置完参数也可以查询参数,指令后面不加参数即为查询指令,如下图所示:

     

    2.4 配置完把USB转TTL从电脑上拔下来即可

          配置参数完成!

    三、STM32F1代码实现

    3.1 JDY-31蓝牙模块和STM32F1接线

    STM32F103

    JDY-31蓝牙模块

    PA9

    RXD

    PA10

    TXD

    注:JDY-31蓝牙模块5V供电,且需要和单片机共地

    实物接线如下:

     

    (关于供电:博主这里使用了自己设计的降压模块,由12V锂电池经过降压模块降为5V给单片机最小系统和JDY-31供电,模块引出10路5V引脚、做小车再也不用担心电源不够了)

    需要购买的话,打开“某宝”搜索:JiaYou电子即可找到,如下:

     

    3.2 STM32代码

    3.2.1 串口初始化代码(重要!) 

    #include "myUsart1.h"
    #include "sys.h"
    
    u8 RxData=0x00;
    
    /*
    *** USART1  配置串口1与JDY-31通信 ***
    
    *** 波特率:115200,8位数据位,1位停止位,无奇偶校验位 ***
    
    *** 接口:PA9->TX   PA10->RX ***
    
    *** 作者:陈加油嗯 ***
    
    ***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
    
    */
    void USART1_Init(uint32_t bound)
    {
    	GPIO_InitTypeDef GPIO_Initstructure;
    	NVIC_InitTypeDef NVIC_InitStruct;
    	USART_InitTypeDef USART1_InitStructure;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 
    
    	// USART1_TX     PA9
    	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
    	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;
    	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_Initstructure);
    
    	// USART1_RX     PA10
    	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
    	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10;
    	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_Initstructure);
    
    	USART1_InitStructure.USART_BaudRate = bound;
    	USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
    	USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //收模式
    	USART1_InitStructure.USART_Parity = USART_Parity_No;                             //无奇偶校验位
    	USART1_InitStructure.USART_StopBits = USART_StopBits_1;                          //一个停止位
    	USART1_InitStructure.USART_WordLength = USART_WordLength_8b;                     //字长为8位数据格式
    	USART_Init(USART1, &USART1_InitStructure);
    	USART_Cmd(USART1, ENABLE); //使能USART1
    
    	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
    	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
    	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
    
    	NVIC_Init(&NVIC_InitStruct);
    //	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    	USART_ClearFlag(USART1, USART_FLAG_TC);
    }
    
    void USART1_IRQHandler(void)
    {
    	if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
    	{
    			USART_ClearFlag(USART1, USART_FLAG_RXNE);
    			RxData = USART_ReceiveData(USART1);  //接收到的数据存到 RxData
    
    //    USART_SendData(USART1, RxData);
    //    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) //等待数据发完
    //            ;
    	}
    }

     

    3.2.2 主函数代码

    #include "stm32f10x.h"                  // Device header
    #include "Delay.h"
    #include "LED.h"
    #include "myUSART1.h"
    
    /*
    *** main 主函数代码 ***
    
    *** 串口初始化 LED初始化 ***
    
    *** 作者:陈加油嗯 ***
    
    ***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
    
    */
    int main(void)
    {
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	
    	USART1_Init(115200);  //初始化串口1,接JDY-31蓝牙模块
    	LED_Init(); //LED灯初始化
    	
    	while(1)
    	{
    		if(RxData == 0x00) LED_Close();   //关灯
    		if(RxData == 0x01) LED_Open();    //开灯
    	}  
    }

    四、代码、资料获取

    4.1 获取APP、教程全套资料附在文末,下载后把APP安装到手机,APP所在文件中如下图所示。

     

     

    4.2 APP参数设置

    4.2.1 手机下载、安装APP,安装完成图标如下。

     

    4.2.2 打开APP,操作如下图所示:

     

     

    4.2.3 设置好参数,关闭“编辑模式”按钮,给蓝牙模块和单片机供电,手机APP搜索蓝牙,连接上蓝牙APP即可控制LED灯的亮灭。(注:第一次连接蓝牙需要配对蓝牙,根据AT指令设置的配对密码正确输入即可)

     

    五、资料获取(代码、APP、串口调试助手、蓝牙数据手册)

    获取方法:

    关注微信公众号<陈加油嗯>,回复"JDY31蓝牙模块"即可获取源代码、APP、串口调试助手、蓝牙数据手册。

     

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值