基於樹莓派的微型氣象站設計與開發(Windows 10 IoT Core)


前言

  樹莓派(Raspberry Pi,RPi)是專門為學生計算機編程教育而設計,只有信用卡大小的卡片式電腦,可以運行Linux或者Windows 10 IoT Core操作系統。本文將利用樹莓派和UWP(Universal Windows Platform)開發技術搭建一個可以實時監控的氣象站系統。

硬件和涉及技術

  

硬件部分:

  • 樹莓派2或3一塊,8G以上內存卡一張,讀卡器(或帶sd卡接口的電腦)一個;
  • Dht11溫濕度傳感器一個,GY-68 BMP180氣壓計一個;
  • LY-69 土壤濕度計一個,MQ-2 煙霧氣敏傳感器一個,雨滴傳感器一個;
  • 公母杜邦線若干,面包板一個,micro USB線一根,電源一個;
  • HDMI接口顯示器一台(或HDMI轉其它接口)。

 

 

開發部分:

  • 集成開發環境: Visual Studio 2017(建議使用社區版);
  • 開發語言:C#;
  • 開發平台:UWP;
  • 通信協議:MQTT;
  • 樹莓派操作系統:WIndows 10 IoT Core;
  • 數據庫:Sqlite

操作系統的下載與安裝:

  • 安裝Windows 10 IoT Core Dashboard 應用, 訪問微軟開發者中心https://developer.microsoft.com/en-us/windows/iot/GetStarted. 依次選擇Raspberry Pi 3,Install onto my blank microSD card,Windows10 IoT core,點擊Next按鈕來到新頁面,點擊Download Dashboard按鈕下載,然后安裝。
  • 燒錄操作系統到MicroSD卡,安裝完成后選擇設置新設備項進入燒錄頁面。設備類型選擇Raspberry Pi 2&3;OS內部版本選擇Windows 10 IoT Core(15063);驅動器選擇插入的MicroSD卡;輸入設備名稱、密碼、確認密碼;勾選WLAN網絡連接(勾選此項后可以將當前電腦連接的WLAN信息復制給樹莓派開發板的操作系統,省去再次配置的麻煩);至此,樹莓派安裝Windows 10 IoT操作系統完成。

如下圖:

  Windows Device Portal:

  在同一網絡環境下的瀏覽器輸入樹莓派的IP地址,端口為8080,回車后會提示輸入用戶名和密碼。默認用戶名為Administrator,密碼為燒錄操作系統時設置的密碼,如果忘記密碼則只能重新安裝。登陸成功后會看到樹莓派開發板的當前操作系統下的詳細信息,應用程序管理界面,設置默認程序以及開機自啟動等。

 

實現

 

MQTT通信:

 

  MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議。經過多年的發展,MQTT在各個領域的應用均有凸顯,它可以作為手機客戶端的消息推送工具,並且在安卓應用中有比較大的占比。作為一款專為物聯網設計的通信協議,MQTT具有在低帶寬、不穩定的網絡環境下正常工作的特性。它的消息傳遞有三種模式:

 

  1. 至多一次,會發生消息丟失或重復,這種模式適合傳感器類的數據傳輸,即使消息丟失,很快會再次發送。
  2. 只有一次,確保消息到達且不發生重復數據,適合需要精確數據的系統,例如計費系統。
  3. 至少一次,確保消息可以到達,但可能發生重復。

關於MQTT服務器的搭建可以參考:http://blog.csdn.net/yannanxiu/article/details/52703946

MQTT在UWP下的使用可以參考:http://www.cnblogs.com/Yixin-ran/archive/2016/10/21/mqtt.html

要在UWP下使用MQTT需要安裝nuget包m2mqtt

在這里我還是貼一下MQTT的連接代碼:

 

 public class Mqtt : MqttClient
    {

        public Mqtt(string host) : base(host, 61613, false, MqttSslProtocols.None)
        {
            Connect(Guid.NewGuid().ToString(), "admin", "password");
            Subscribe(new string[] { "atmo" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
           // PostData("Hello World!");
        } 
        public void RequestData(string msg)
        {
            Publish("atmo", Encoding.UTF8.GetBytes(msg));
        }
        public void PostData(string msg)
        {
            Publish("atmo", Encoding.UTF8.GetBytes(msg));
        }
    }

 

Sqlite實現:

要在UWP下使用Sqlite需要先安裝VS擴展Sqlite for Universal Windows Platform和Nuget包SQLite.Net-PCL。關於sqlite的詳細使用方法參照:http://www.cnblogs.com/yanxiaodi/p/4941312.html

下面是本系統中Database類:

  public class DataBase : SQLiteConnection
    { public static string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "atmo.db");public DataBase() : base(new SQLitePlatformWinRT(), path)
        {
            CreateTable<DataModel>();
        }
    }

INotifyPropertyChanged接口實現

 public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName]string name = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    }

 

樹莓派GPIO圖

 

硬件連接圖:

傳感器引腳圖:

項目地址:https://github.com/yixinin/Yixin.Atom

該項目還不完善,歡迎大家補充和指正!

有任何問題可以聯系我的Email:xingran1994@live.com

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM