DIY智能插座(四) -- 蓝牙POS编码
来源:互联网 发布:淘宝买家素质差 编辑:程序博客网 时间:2024/05/19 13:27
TC35661蓝牙芯片要正常使用的话,必须先要进行一系列配置,GD32F芯片通过串口和该蓝牙芯片相连,首先需要通过串口将配置命令一条一条的写进去。这些命令就是所谓的 HCI Command。
如果不写程序,单纯就可以通过串口助手发送这些命令即可完成初始化,
大致分为几个阶段 : HCI命令 –> MNG配置 –> SPP 配置
主要是配置MAC地址、设备类型、配对密钥、链路密钥、射频参数等。
这些都涉及到具体的蓝牙协议了,本文就不详细描述了。
下面会放上具体的代码地址。本文主要探讨和C51单片机交互的部分,即初始化完成之后如何通过串口和51单片机交互,也即如何完成数据透传。
GD32F芯片,和蓝牙交互的部分利用了USART3,和单片机交互的利用了USART1,还是直接放上相关部分代码:
#define TX_STR_SIZE 128volatile uint8_t Uart1_pos=0;char rx_char[TX_STR_SIZE] = {0x0};uint8_t count = 0;uint8_t uart1_is_rx_buffer_empty(void){ return !(Uart1_RcvCnt - Uart1_pos);}uint8_t uart1_read(void){ uint8_t c; c = Uart1_Buff[Uart1_pos++]; if(Uart1_RcvCnt == Uart1_pos){ Uart1_RcvCnt = Uart1_pos = 0; } return c;}/** 处理单片机发来的消息,然后通过蓝牙发送出去 **//** 单片机 --> 手机 ,主要通过该函数进行透传 **/void msg_process(void){ while(!uart1_is_rx_buffer_empty()&& count < TX_STR_SIZE) rx_char[count++] = uart1_read(); if(count >= TX_STR_SIZE) { count = 0; return; } if(count > 0 && rx_char[count-1] == ':') //判定分隔符 { rx_char[count-1] = 0x0 ;//读到分隔符后,将':'修改为'\0',字符串结束标志 C_bt_send(rx_char); //将字符串通过蓝牙发送出去 count = 0 ; }}/** GD32主函数 **/int main ( void ){ SystemInit(); if(SysTick_Config(72000*1)) //配置TICK中断频率 while(1); IO_Init();//IO初始化 NVIC_Configuration();//中断级联初始化 Uart1Init ( 115200 ); //串口1初始化 Uart3Init ( 115200 ); //串口3初始化 if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)) //读取GPIOA6电平,判断是否进入充电模式 LED1_Blink_Start(1000); //如果有充电,则LED1闪烁 else { SYS_POWER_ON; //未进入充电模式,开启三极管,打开系统电源 LED1_ON; //LED1常亮 } BT_POWER_OFF; C_bt_init(); //蓝牙初始化 BT_POWER_ON; //打开蓝牙电源 printf("\nInitial OK !\n"); while(1) { if((ms_timer % 1) == 0) { C_bt_step(); //蓝牙模块交互 msg_process(); //USART1消息处理 } }}
手机 –> 单片机方向 主要通过下面代码实现透传,代码在pan1026.cpp中,蓝牙协议处理部分代码:
case(0x48): //收到SPP数据{ uint16_t spplength = ((uint16_t)parser_buffer[6]<<8) | parser_buffer[5]; if(spplength) { uint16_t datalength = ((uint16_t)parser_buffer[8]<<8) | parser_buffer[7]; //将有效数据部分转发到USART1 this->RawSendStaticBinary(&parser_buffer[9],datalength); }}break;
基本上透传就这么点东西,很简单。主要是蓝牙协议相关的比较复杂。另外该POS机按键中断、充电判断都需要看电路板引线才分析出来,已经在代码中实现了~
附上完整代码: https://github.com/lonely-geek/bluetooth-bm77
0 0
- DIY智能插座(四) -- 蓝牙POS编码
- DIY智能插座(三) -- 蓝牙POS机改造
- DIY智能插座(二) -- C51单片机编码
- DIY智能插座(一) -- 硬件搭建
- DIY智能插座(五) -- Android客户端
- 一个可以DIY的智能插座 stm32+8266
- DIY智能插座(六) -- 利用网易云信实现外网控制
- 智能POS
- 小米智能插座拆解
- 智能插座远程控制系统
- 智能插座那些事儿
- 最迷你wifi智能插座
- 基于ESP8266的智能插座
- 现在的智能插座技术
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- C++宏,普通函数,内联函数的运行速度以及三者的差异
- [知其然不知其所以然-35] nvdimm[0] using systemtap
- hdu 1002 解析
- OOP面向对象——实例——学生数组
- js之二
- DIY智能插座(四) -- 蓝牙POS编码
- AsyncTask使用详解
- HDU5821之映射
- Spring 配置过程遇到问题锦集
- 大数据IMF传奇行动绝密课程第20课:Top N彻底解秘
- Markdown语法图
- taglist
- unity实现拖拽
- Android开发中进程和线程