概述
温湿度节点概括:
I2C通信协议
1.数据传送:
SDA引脚用于传感器的数据输入和输出。当向传感器发送命令时,SDA 在串行时钟(SCL)的上升沿有效,且当 SCL为高电平时,SDA 必须保持稳定。在下降沿之后,SDA值可被改变。
2.起始和终止信号 :
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
发送命令:
在启动传输后,随后传输的 I2C 首字节包括 7 位的I2C 设备地址(B-范例地址‘1000’000’)和一个 SDA方向位(读 R: ‘1’,写 W: ‘0’)。在第8 个 SCL时钟下降沿之后,通过拉低 SDA 引脚(ACK 位),指示传感器数据接收正常。在发出测量命令之后( ‘1110’0011’代表温度测量,‘1110’0101’
代表相对湿度测量), MCU 必须等待测量完成。基本的命令在下表 中进行概述。有两种不同的方式可选,主机模式或非主机模式。
温湿度代码流程:
1.进行对延时函数、串口1、串口3、LED、RS485 、HC-12、定时器2、温湿度模块以及LCD1602显示屏的初始化。读取网关ID、节点ID、节点名字以及节点状态.
2.定时器2的中断,若定时器2未被重置,进行对HC-12发送到的数据进行解析,即函数receiveuart3();receiveuart3()里面含有对消息头、消息体与
命令的解析,不同的指令执行不同的代码:
void receiveuart3(void)
{
while(read_COM_HC12_data_cp!=COM_HC12_data_cp)
{
ND_time_count=1;
temp = COM_HC12_data[read_COM_HC12_data_cp];
read_COM_HC12_data_cp++;
if(read_COM_HC12_data_cp>=U3bufsize)
read_COM_HC12_data_cp=0;
printf(" %02x ",temp);
if(bbbb==0)
{
bbbb=1;
ccoouunntt++;
}
switch(receive_check_ndmsgheadok)
{
case receive_msghead:
receive_msghead_nd();
break;
case receive_msgbody:
receive_msgbody_nd();
if(receive_check_ndmsgheadok==receive_command)
{
Execute_command_nd();
}
break;
default:
break;
}
}
}
3.命令的执行:
①Execute_command(); 命令的执行,温湿度模块采集数据,进行对数据的处理、打印;
void Execute_command()
{
u8 EEPROM[4];
if(Command_exe_flag==ON_command)
{
SHT2x_Test();
temperature=g_sht2x_param.TEMP_POLL*100;
humidity=g_sht2x_param.HUMI_POLL*100;
B2G_NodeStation.kid1_Value0=(temperature>>8) & 0x00ff;
B2G_NodeStation.kid1_Value1=temperature;
B2G_NodeStation.kid2_Value0=(humidity>>8) & 0x00ff;
B2G_NodeStation.kid2_Value1=humidity;
printf("rn读取DHT11成功!rnrn湿度为%d%RH,温度为%d°Crn",humidity,temperature);
②switch (ND_station) ; 分析节点状态,并将状态进行重新赋值,与采集的温湿度数据一起打包上传给网关;
③LCD1602显示数据对消息头,消息体进行打包,并存储与eeprom指定地址中sub_toND_msghead(ND_Command_Id);
sub_toND_msgbody();
④通过串口3进行数据回传至网关:
USART3_Send_str(B2G_NDsta_send_ msghead,9);
USART3_Send_str(B2G_NDsta_send_ msgbody,18);
最后
以上就是光亮钻石为你收集整理的IIC通信进行数据传输的温湿度传感器的全部内容,希望文章能够帮你解决IIC通信进行数据传输的温湿度传感器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复