【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)-阿里云开发者社区

开发者社区> KB小秘书> 正文

【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)

简介: 在上一篇《DHT11温湿度传感器通信(上)》中,我们介绍了DHT11的通信原理及实现通信的底层代码,当时由于没有封装成托管代码库,所以应用开发的用户还不能直接获取DHT11的数据。不过今天这个工作我们已经完成,用户仅需编写几行代码就可以获取传感器数据了。
+关注继续查看

在上一篇《DHT11温湿度传感器通信(上)》中,我们介绍了DHT11的通信原理及实现通信的底层代码,当时由于没有封装成托管代码库,所以应用开发的用户还不能直接获取DHT11的数据。不过今天这个工作我们已经完成,用户仅需编写几行代码就可以获取传感器数据了。

我们封装后的类库如下:   

public sealed class DHT11

    {

        public DHT11(DHT11.Timer timer, DHT11.Channels channel);

        public bool Read(out float temperature, out float humidity);

        public static bool ReadData(out float temperature, out float humidity);

        public enum Channels

        {

            CH1 = 0,

            CH2 = 1,

            CH3 = 2,

            CH4 = 3,

        }

        public enum Timer

        {

            T2 = 1,

            T3 = 2,

            T4 = 3,

            T5 = 4,

        }

     }

T2、T3、T4、T5四个时钟的四个通道都可以连接DHT11模块,进行数据采集,其和Pin脚的对应关系如下:   
1.png
注:以上信息,可以通过查原理图获知,其中带“*”的管脚实际测试未能成功获取数据。
image.png

 

设备接线,我们的示例程序选择的是Timer3的第三通道,所以我们连接的Pin脚是PB0

示例代码如下:

public static void Main()

      {

            //PB0

            DHT11 dht11 = new DHT11(DHT11.Timer.T3, DHT11.Channels.CH3);

            float temperature;

            float humidity;     

            while (true)

            {

                dht11.Read(out temperature, out humidity);

                Debug.Print(STR(temperature,2) + " " + STR(humidity,2));

 

                Thread.Sleep(100);

            }

}

值得一提的是,.NET Micro Framework的浮点数转换字符串函数存在BUG,在某些MCU的.NET Micro Framework平台上进行这个转换操作会出错,目前发现STM32F103和Atmel 9260芯片上都有这个BUG。由于和平台相关,BUG较难消除,所以我提供了一个简单的浮点数转字符串的函数。

      public static string STR(double f,int n)

      {

            if (n < 1 || n > 8) return "";

            bool sign = (f < 0);

            if (sign) f = -f;                           

            string f1 = ((uint)f).ToString();

            string f2 = ((uint)(f * System.Math.Pow(10,n) -((uint)f) * System.Math.Pow(10,n))).ToString();

            return (sign ? "-" : "") + f1 + "." + "00000000".Substring(0,n-f2.Length) + f2;

 } 

程序运行后,在VS2008开发环境中,我们已经看到,温湿度数据已经成功采集。

image.png

 

注:本文示例,需要红牛开发板固件在 V1.1.1以上

本文源码:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/DHT11Test.rar

MF快速参考: .NET Micro Framework 快速入门

MF中文讨论组:http://space.cnblogs.com/group/MFSoft/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《ASP.NET 开发从入门到精通》----1.4 ASP.NET基础
ASP是微软公司推出的一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,指动态服务器页面(Active Server Pages,ASP)运行于IIS之中的程序。在2000年第二季度时,微软公司正式推动.NET策略,ASP也顺理成章地改名为ASP.NET。
2614 0
【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
从2002年就开始接触Modbus协议,以后陆续在PLC、DOS、Windows、.Net Micro Framework等系统中使用了该协议,在我以前写的一篇博文中详细记载了这一段经历,有兴趣的朋友可以看一看《我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)》。
582 0
HaaS轻应用(Python): si7006温湿度传感器案例
HaaS轻应用(Python): si7006温湿度传感器案例
125 0
独家 | ARIMA/Sarima与LSTM的时间序列数据集成学习(附链接)
本文探讨了简单的ARIMA/Sarima与LSTM的时间序列数据集成学习方面的问题。
1536 0
《ASP.NET 开发从入门到精通》----1.2 Web技术简介
学习Web开发,不得不提到本地计算机和远程服务器的概念。顾名思义,本地计算机是指用户正在使用的、浏览站点页面的机器。对于本地计算机来说,最重要的构成模块是Web浏览器。
1289 0
+关注
1090
文章
1253
问答
来源圈子
更多
阿里云最有价值专家,简称 MVP(Most Valuable Professional),是专注于帮助他人充分了解和使用阿里云技术的意见领袖阿里云 MVP 奖项为我们提供了这样一个机会,向杰出的意见领袖表示感谢,更希望通过 MVP 将开发者的声音反映到我们的技术路线图上。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载