IIC通信进行数据传输的温湿度传感器

温湿度节点概括:
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("\r\n读取DHT11成功!\r\n\r\n湿度为%d%RH,温度为%d°C\r\n",\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);

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值