DHT12温湿度传感器IIC,I2C接口调试心得和代码说明

来源:http://www.fuhome.net/bbs/forum.php?mod=viewthread&tid=2141



DHT11那个单总线的温湿度传感器用的很多了,aosong推出了DHT12,这个精度更高,原来DHT11温度误差2°,这个12为0.5°,温度范围也从0-50°提高到-20-60°,这个就可以测量冬天的一般家里的室温了。


废话不多说,这个DHT12主要是比DHT11多了I2C接口,我用的stm32F103,文档说频率不超过400KHz,不过我用原子的at24c这个驱动来该,读不出来,waitack都不对,经过跟厂家技术沟通,实验,问题主要在与waitack时间要等待一会,否则就会出错,而且读取函数也要相应延时等待。


原子的程序基本是us,我实验得出了这个数据,见程序,亲测读出了温度 26°左右(空调坏了将就把),湿度54%


//等待应答函数很重要


u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();      //改变方向为输入  (这里原子的某版本代码有点不对劲,输入了竟然还赋值)
        
        delay_us(4);           
        IIC_SCL=1;
        delay_us(4);         
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
                delay_us(1);
        }
        IIC_SCL=0;
  delay_us(50);        //这个是最需要的,没有就不行了。
        return 0;  
} 








//读取函数,延时50us,太多ms级别貌似也有问题
u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();
    for(i=0;i<8;i++ )
         {
        IIC_SCL=0; 
        delay_us(50);
        IIC_SCL=1;
         delay_us(50);
        receive<<=1;
        if(READ_SDA)
        receive++;        
                                
    }                                         
    if (!ack)
        IIC_NAck();//nACK
    else
        IIC_Ack(); //ACK   
    return receive;
}




附:


DHT12文档

http://www.aosong.com/pdf/DHT12%E6%95%B0%E5%AD%97%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%88V1.3-20160315%EF%BC%89.pdf



奥松官方DHT12 STM32例程

https://pan.baidu.com/s/1o7BUASE   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值