天天看點

【STM32 .Net MF開發闆學習-23】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

通道2

通道3

通道4

Timer2

PA0

PA1

PA2

PA3

Timer3

PA6

PA7

PB0

PB1

Timer4

PB6

PB7*

PB8*

PB9

Timer5

注:以上資訊,可以通過查原理圖獲知,其中帶“*”的管腳實際測試未能成功擷取資料。

【STM32 .Net MF開發闆學習-23】DHT11溫濕度傳感器通信(下)

裝置接線,我們的示例程式選擇的是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開發環境中,我們已經看到,溫濕度資料已經成功采集。

【STM32 .Net MF開發闆學習-23】DHT11溫濕度傳感器通信(下)

  注:本文示例,需要紅牛開發闆固件在 V1.1.1以上

MF快速參考: .NET Micro Framework 快速入門

繼續閱讀