首页 » 通讯 » 干货——触摸按键旗子暗记用无线传输速成_模块_数据

干货——触摸按键旗子暗记用无线传输速成_模块_数据

落叶飘零 2025-01-19 08:24:16 0

扫一扫用手机浏览

文章目录 [+]

模块先容:

LC12S 采取 2.4G SOC 技能,特点是免开拓,视距可达100米,模块收发一体无需切换,串口透明传输,供应通信协议,可迅速调试成功。
用户只要理解串口通信,无需繁芜的无线通讯知识,就能完成RF遥控产品的开拓。
模块没有数据包大小限定,延时短,半双工通讯,抗滋扰能力强。

干货——触摸按键旗子暗记用无线传输速成_模块_数据 通讯

● 2.4GHz ISM 频段,利用无须申请

● 最大输出功率12dBm

● 吸收灵敏度-95dBm

● 发射事情电流 40mA@12dBm

● 吸收事情电流 24mA

● 就寝电流 9.5uA

● 标准 TTL 电平 UART 串口

● 事情频率可设置,多个模块频分复用,互不滋扰

● 通讯协议转换及射频收发切换自动完成,用户无须干预,大略易用

● 通讯速率 0.6kbps -38.4kbps,用户可通过 AT 指令配置

引脚先容:

引脚

功能

描述

VCC

电源正

2.8~3.6V,范例 3.3V

RXT

模块数据输出(TTL 电平)

串口通信数据吸收

TXD

模块数据输入(TTL 电平)

串口通信数据发送

SET

设置位

配置参数使能(低电平配置,高电平或悬空为数传)

CS

休眠

低电平时模块事情,高电平或悬空模块休眠

GND

电源地

接地

引脚功能描述VCC电源正2.8~3.6V,范例 3.3VRXT模块数据输出(TTL 电平)串口通信数据吸收TXD模块数据输入(TTL 电平)串口通信数据发送SET设置位配置参数使能(低电平配置,高电平或悬空为数传)CS休眠低电平时模块事情,高电平或悬空模块休眠GND电源地接地

引脚功能描述VCC电源正2.8~3.6V,范例 3.3VRXT模块数据输出(TTL 电平)串口通信数据吸收TXD模块数据输入(TTL 电平)串口通信数据发送SET设置位配置参数使能(低电平配置,高电平或悬空为数传)CS休眠低电平时模块事情,高电平或悬空模块休眠GND电源地接地

基本配置:

设置模式:

一旦进入设置状态,SET 引脚配置必须是低电平,CS 引脚必须接低电平,模块串口参数会自动变为:数据位 8,波特率 9600,校验位 N,停滞位 1。
您的主控也要与此相同。

数传模式:

上电后,当 CS引脚接低电,进入数据传输模式,SET 脚是设置参数标志位,这个时候我们可以进行悬空或者拉高处理,让模块进入此模式。

设置模式数据的协议格式:

在官方的手册里面有关于协议内容的解释,个中有一些数据是保留位,默认发0x00就可以。

如图所示,我们可以看到数据长度是18个byte,个中包括设备ID(Self ID)、组网ID(Net ID )、发射功率(RF Power)、通讯波特率设置(Baud 1Byte)、无线通讯通道设置(RF CHN)、设置时的通讯数据长度(Lenght 1Byte)、累加校验位(CheckSum);个中设置时的通讯数据长度是固定的18byte以是此处默认为0x12。

其他部分的设置参数,在手册中各有表示,个中组网ID须要按照自己定义的ID区间进行设置,由于这个唯一性会影响到你的模块组网情形。

别的的设置我设置参数我就不进行截图表示了,大家可以看一下相应的手册。

测试设置发送数据:

0xaa+0x5a+模块 ID+组网 ID(ID 必须相同)+0x00+RF 发射功率+0x00+串口速率 +0x00+RF 信道选择+0x00+0x00+0x12(字节长度)+0x00+和校验字节 把稳:和校验字节=所有参数累加的字节

发送: AA 5A 22 33 11 22 00 01 00 04 00 64 00 00 00 12 00 07

--->

参考后面的数据表格,以上配置参数设置无线模块为:RF 发射功率:10dbm 串口速率:9600bps RF 信道:100 模块 ID:0x2233 组网 ID:0x1122 和校验字节:07

吸收: 设置完成后模块会返回相应数据 AA 5B 47 00 11 22 00 01 00 04 00 64 00 00 00 12 00 FA

<---

串口调试助手的信息:

实际设备连接情形:

设置模式接线示意图:

透传模式接线示意图:

代码实现:

由于模式利用比较大略,初始化好设备串口外设,再把CS引脚和SET配置一下,就可以开始利用了,如果你只是大略测试,那你可能只须要利用默认设置,只是进行数据的透传,那你可以直接忽略这部分设置的代码部分,直接看nrf_send_normal_data()函数。

设置模式下的代码:定义一个设置协议的构造体:

typedefstruct__attribute__((__packed__)){u16head;//u16self_id;//u16net_id;//u8nc1;//u8rf_power;//u8nc2;//u8rf_baud;//u8nc3;//u8rf_chn;//u16nc4;//u8nc5;//u8length;//u8nc6;//}SetSend;

拉低SET引脚,进入设置模式:

u8SetNrf(void)//{GPIO_ResetBits(SET_PORT,SET_PIN);GPIO_ResetBits(CS_PORT,CS_PIN);u8p1=malloc(18);memset(p1,0x00,18);SetSendp=(SetSend)p1;p->head=0xaa5a;p->self_id=0x2233;p->net_id=0x1122;p->rf_power=0x00;p->rf_baud=0x04;p->rf_chn=0x64;p->length=0x12;p1[sizeof(SetSend)]=CheckSum((u8)p,sizeof(SetSend));USART_Transmit_String(sizeof(SetSend)+1,p1);#ifDEBUG_DPRINTu8str=malloc(20);hex_str((u8)p,sizeof(SetSend)+1,str);USART_Transmit_String(20,str);//printf("--->:%s\r\n",str);free(str);#endiffree(p1);return1;}

数据透传的函数,这个时候SET引脚拉高,这个函数部分是我自己写的一个大略的3byte的sta状态发送。
大家可以按照自己的实际利用情形进行修正。

voidnrf_send_normal_data(u16sta){GPIO_SetBits(SET_PORT,SET_PIN);u8p1=malloc(3);memset(p1,0x00,3);memset(p1,0xAA,1);memcpy(p1+1,&sta,2);USART_Transmit_String(3,p1);free(p1);}

芯片初始化之后须要等待几十ms才能正常事情,以是须要轻微等待一下。

串口吸收解析部分,这部分代码就仁者见仁智者见智了,大家可以用很多种方法实现,我只是贴了一下我写的代码部分,仅供参考。
个中NRF_RestTime()函数是在定时器中计时,用来区分不同的数据帧。

u8USART_RX_BUF[USART_MAX_RECV_LEN];u16USART_RX_STA=0;u8NRF_RecvdData(void){u8ret=0;if((USART_RX_STA&(1<<15))!=0)ret=1;returnret;}u16NRF_RcvLen(void){return(USART_RX_STA&0x7FFF);}u8NRF_RcvBuff(void){returnUSART_RX_BUF;}voidNRF_ClsRecvd(void){USART_RX_STA=0;}typedefstruct__attribute__((__packed__)){u32stat:1;u32timOut:1;u32cunt:15;u32des:15;}TboxTimTypeDef;TboxTimTypeDefgNRFTimeManage;#defineTON(1)#defineTOFF(0)voidTimerManageInit(TboxTimTypeDeft,u8stat,u16destim){t->des=destim;t->stat=stat;t->cunt=0;t->timOut=0;}voidNRF_RestTime(void){if(gNRFTimeManage.stat==TON){(gNRFTimeManage.cunt<gNRFTimeManage.des)?(gNRFTimeManage.cunt++):\(TimerManageInit(&gNRFTimeManage,TOFF,0),USART_RX_STA|=1<<15);}}voidNRF_Irq(void){u8res;if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){res=USART_ReceiveData8(USART1);#if0USART_SendData8(USART1,res);#endifif((USART_RX_STA&~(1<<15))<USART_MAX_RECV_LEN){TimerManageInit(&gNRFTimeManage,TON,5);USART_RX_BUF[USART_RX_STA++]=res;}else{USART_RX_STA|=1<<15;}}USART_ClearITPendingBit(USART1,USART_IT_RXNE);}voidParse_NRF(void){if(NRF_RcvLen()>2){u16len=NRF_RcvLen();u8p=NRF_RcvBuff();u8pos=0;u16sta=(u16)(p+1);while(pos<len){if(p==0xAA){relay_ctrl(sta);p+=3;pos+=3;}else{p++;pos++;}}USART_RX_STA=0;}}设备展示

主机端:

从机端:

结语

这便是我分享的LC12S模块的利用,如果大家有更好的想法和需求,也欢迎大家分享互换哈。

标签:

相关文章

集成运放_运放_电压

集成电路的分类:按集成度高低可分为小规模(SSI)、中规模(MSI)、大规模(LSI)和超大规模(VLSI);按导电类型可分为双极...

通讯 2025-01-19 阅读0 评论0