蓝牙模块:jdy23

1.介绍:

JDY-23 透传模块是基于蓝牙 5.0 协议标准,工作频段为 2.4GHZ 范围,调制方式为 GFSK,
最大发射功率为 4db,最大发射距离 60 米,采用进口原装芯片设计,支持用户通过 AT 命令
修改设备名、波特率等指令,方便快捷使用灵活。
JDY-23 蓝牙模块可以实现模块与手机数据传输,默认无需配置即可快速使用 BLE 蓝牙
进行产品应用。

2.硬件电路:

如透传不需要低功耗或在连接状态下不需要发断开指令,PWRC 引脚可以不接。 如不需要低功耗,不需要检测连接状态的话,只需要连接 VCC、GND、RXD、TXD 4 个引脚

3.AT指令的使用:

1.首先蓝牙模块直接和转串口模块链接 rx ==》tx  tx===》rx
2.使用电脑串口助手 打开串口 波特率9600
3.注意蓝牙模块需要在断开连接时才能进入AT调试模式
4.发送记得得加换行 勾选上串口助手发送的换行

4.模块使用:

1.与串口配置一模一样 直接使用串口配置即可 串口的rx tx 直接连接蓝牙模块
2.使用手机连接蓝牙 发送指令 手机app好像换行不了 所以程序代码的内容标志位符号得换成别的
3.检查插线 最后换了根线 解决了只接不发问题 

5.实物接线:

stm32f103c8t6最小系统板 小灯泡 oled显示屏幕 蓝牙模块

蓝牙模块接PA9 PA10 tx rx互相接起来

oled SCL接PB8 SDA接PB9

灯泡接PA1

手机使用蓝牙助手连接后 发送@LED_ON*# 为开灯 @LED_OFF*#为关灯

6.实现代码

main.c

#include "stm32f10x.h"                  // Device header
#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, "LED_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, "LED_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_COMMAND\r\n");OLED_ShowString(2, 1, "                ");OLED_ShowString(2, 1, "ERROR_COMMAND");}
​
​Serial_RxFlag = 0;}}
}

Serial.c

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>
​
char Serial_RxPacket[100];              //"@MSG\r\n"
uint8_t Serial_RxFlag;
​
void Serial_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;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);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_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;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_Init(USART1, &USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);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);USART_Cmd(USART1, ENABLE);
}
​
void Serial_SendByte(uint8_t Byte)
{USART_SendData(USART1, Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
​
void Serial_SendArray(uint8_t *Array, uint16_t Length)
{uint16_t i;for (i = 0; i < Length; i ++){Serial_SendByte(Array[i]);}
}
​
void Serial_SendString(char *String)
{uint8_t i;for (i = 0; String[i] != '\0'; i ++){Serial_SendByte(String[i]);}
}
​
uint32_t Serial_Pow(uint32_t X, uint32_t Y)
{uint32_t Result = 1;while (Y --){Result *= X;}return Result;
}
​
void Serial_SendNumber(uint32_t Number, uint8_t Length)
{uint8_t i;for (i = 0; i < Length; i ++){Serial_SendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0');}
}
​
int fputc(int ch, FILE *f)
{Serial_SendByte(ch);return ch;
}
​
void Serial_Printf(char *format, ...)
{char String[100];va_list arg;va_start(arg, format);vsprintf(String, format, arg);va_end(arg);Serial_SendString(String);
}
​
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);if (RxState == 0){if (RxData == '@' && Serial_RxFlag == 0){RxState = 1;pRxPacket = 0;}}else if (RxState == 1){if (RxData == '*'){RxState = 2;}else{Serial_RxPacket[pRxPacket] = RxData;pRxPacket ++;}}else if (RxState == 2){if (RxData == '#'){RxState = 0;Serial_RxPacket[pRxPacket] = '\0';Serial_RxFlag = 1;}}USART_ClearITPendingBit(USART1, USART_IT_RXNE);}
}
​

有需要完全代码可联系我 一起学习交流!

基于stm32f103c8t6与jdy23蓝牙模块实现手机app点亮灯相关推荐

  1. 单片机HC06蓝牙模块与手机APP

    学习HC06蓝牙模块遇到一些问题,特此写下作为记录. 用USB转TTL连接,插到电脑上,发AT怎么也不回 USB转TTL与蓝牙模块连接图 打开串口助手: 一开始用的是丁丁串口助手,发·AT不回OK. ...

  2. HC05蓝牙模块与手机APP连接

    说明:我们可以通过TTL转USB模块使电脑和HC05相连 ,通过电脑蓝牙串口进行调试 我们上电时应该按住复位键再上电,这样才能进入AT模式(下图软件设置也能进入AT模式),否则是配对模式. 另外我们电 ...

  3. 通过LY-WIFI-1智能WiFi模块实现手机APP控制LED灯————uno端

    uno端 android端完成后,开始实现uno端,主要工作就是接板子和上传代码到单片机.在编写代码前,我们先来了解一下wifi传感器的常用命令 1.wifi传感器常用AT指令 2.针脚接线 1.wi ...

  4. 【JDY-23蓝牙模块调试】

    JDY-23蓝牙模块调试 整体说明 工欲善其事,必先利其器(JDY23蓝牙模块的购买) 电路原理图的设计 原理图的设计 PCB的设计 手机APP的设计 主窗口设计 IO控制窗口 串口透传功能 视频及开 ...

  5. 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  6. Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  7. arduino nano 蓝牙_Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  8. arduino nano 简单实现蓝牙模块与手机进行通信

    1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...

  9. 实现蓝牙模块与手机进行通讯

    之前做过一个Zigbee通信的实验,需要用到蓝牙模块与手机蓝牙模块之间的通信用以接收RSSI,很长时间没有解决就收数据乱码的问题,最后无意间了解到手机蓝牙的baudrate为9600,乱码的问题也就迎 ...

最新文章

  1. 如何用纯 CSS 创作一个荧光脉冲 loader 特效
  2. webpack 3 零基础入门教程 #4 - webpack 的配置文件 webpack.config.js
  3. .ASP NET Core中缓存问题案例
  4. iOS 配置pch文件
  5. Visual Basic团队透露将为VB添加迭代器
  6. leetcode1249. 移除无效的括号(栈)
  7. 分布式架构下的“负载均衡”
  8. Windows下利用C++实现Git自动克隆项目
  9. 会声会影保存的文件在哪里
  10. C语言航空订票系统课程设计
  11. Python给指定QQ好友自动发送信息和图片
  12. 文法规则自顶向下分析
  13. 电脑桌面两个计算机图标怎么删除,电脑桌面上有个图标删除不掉|?怎么处理?
  14. java基础—输入/输出
  15. php 正则 零宽断言,正则表达式之零宽断言实例详解_正则表达式
  16. 计算机毕设-学籍管理系统
  17. Tableau可视化项目
  18. 无线路由器经常掉线怎么办
  19. EditPlus正则表达式替换字符串详解
  20. java 国家法定节假日和双休日判断工具类

热门文章

  1. 几种民间排毒养颜祛痘DIY自制面膜 - 生活至上,美容至尚!
  2. 离散数学(1)---集合论
  3. Apache JMeter 下载安装以及使用的详细图文教程
  4. [Linux入门系列].1.2.VMWare WorkStation和VMPlayer的安装
  5. 直线检测之Hough变换(霍夫变换)
  6. emu8086:如何实现数组的倒置
  7. java对对碰游戏设计报告_手把手带你用Java打造一款对对碰游戏(下篇)
  8. mysql能用localhost连接不能使用127.0.0.1连接的解决办法
  9. 第九章 指针 【SEARCH】
  10. Photoshop新手学堂:ps消除锯齿在哪里