如何在WinCE平臺下開發智能家居應用

WinCE的開發板成本低廉,又可以很好的處理各種複雜的應用,再加上很多人能運用自己熟悉的語言進行快速開發,所以一直是廣大系統集成開發商的首選。

 

使用WinCE作爲智能家居的開發平臺,可以快速方便的開發各類智能家居應用。並且可以很方便的將整個操作系統嵌入到牆面,讓用戶很方便的操作。

 

我們在這裏舉個Wince下控制4路電源開關和顯示房間溫度和溼度的例子。使用天邦登峯的Phidgets1014繼電器(4路)和1125溫度、溼度傳感器不需要配置任何端口,把各部件插入WinCE控制板的USB口插槽內就可以使用了。所需要用到的硬件如下:

 

WinCE 控制板(學習板)(在各電子城都很容易買到)

Phidgets 1014 - PhidgetInterfaceKit 0/0/4 (接口板-4口)

http://www.guigujianwen.com/2016/06/24/1014_2-phidgetinterfacekit-004/

產品編號: 1014

Ø  4 個繼電 (Relay) 輸出開關交直流電

Ø  等級爲: 250VAC、10 Amps (100VDC、 5 Amps) 可以接200多個電燈泡和電器

Ø  直接連接到計算機的 USB 傳輸端口(無需配置端口,即插即用)

含USB連接線.


 

Phidgets 1125 溫度溼度傳感器:http://www.guigujianwen.com/category/phidgets/


 


 

 

所需要的軟件:

Phidgets驅動

http://www.guigujianwen.com/2016/06/17/phidgets_drivers/

 

1..Net Framework 3.5 (Windows 7 自帶,Windows XP 請下載)

2. Visual Studio 2005 Express (下載)

本文範例源碼(C#)

http://download.csdn.net/detail/soft2buy/5489609

 

操作步驟:

1.    在WinCE系統內安裝Phidgets控制板驅動(在源碼文件夾內 –點擊install.CAB安裝);可以把文件通過U盤插入wince板安裝,也可以通過(Windows Mobile 設備中心,從你的Windows 系統把文件上傳到wince板子內安裝)

2.    本文的程序範例代碼以C#爲例,您可以在http://www.guigujianwen.com/2016/06/17/phidgets_programming/

找到更多編程語言的範例。在各編程語言的 InterfaceKit-full 文件夾裏可以找到。

 

用Visual Studio 2008 新建一個項目工程命名爲:SmartHome

在項目下新建一個文件夾“dll”用於存放WinCE下驅動的動態庫

把“動態庫”的文件夾內的文件全部拷貝到這個文件夾下,並在工程內添加對“Phidget21CE.NET.dll”文件的引用。


 

界面佈局範例如上圖所示。


關鍵代碼如下:

 

連接Phidgets控制設備。(WinCE下的連接方式和在Windows平臺下的連接方式略有區別,請仔細看代碼。)

 

在窗體加載的時候根據各個控制板的序列號定義控制板(Phidgets板子上都有一個白色的標籤,S/N:後面的那串數字就是控制板的序列號)

private void frmMain_Load(object sender, EventArgs e)

{

try

{

//初始化1014

ifkit_1014_1 = new InterfaceKit();

ifkit_1014_1.Attach += new AttachEventHandler(ifkit_1014_1_Attach);          

ifkit_1014_1.open(SysInfo.SN_1014_1);// SysInfo.SN_1014_1是從配置文件獲取的控制板序列號

 

//初始化1125

                ifkit_1125 = new InterfaceKit();

                ifkit_1125.Attach += new AttachEventHandler(ifkit_1125_Attach);

                ifkit_1125.Detach += new DetachEventHandler(ifkit_1125_Detach);

                ifkit_1125.SensorChange += new SensorChangeEventHandler(ifkit_1125_SensorChange);

                ifkit_1125.InputChange += new InputChangeEventHandler(ifkit_1125_InputChange);

                ifkit_1125.open(SysInfo.SN_1011); // SysInfo.SN_1011是從配置文件獲取的控制板序列號

 

}

            catch

            {

                MessageBox.Show("初始化設備失敗!");

            }

}

//1014的連接事件

private void ifkit_1014_1_Attach(object sender, AttachEventArgs e)

{

            if (InvokeRequired)

                Invoke(new AttachEventHandler(ifkit_1014_1_Attach),

                            new object[] { sender, e });

            else

            {

             

            }

}

//1125的連接事件

#region 1125 events

        private void ifkit_1125_Attach(object sender, AttachEventArgs e)

        {

            if (InvokeRequired)

                Invoke(new AttachEventHandler(ifkit_1125_Attach),

                            new object[] { sender, e });

            else

            {

                InterfaceKit ifkit_1125 = (InterfaceKit)sender;

                ifkit_1125.ratiometric = true;

                if (ifkit_1125.sensors.Count > 0)

                {

                    for (int i = 0; i < ifkit_1125.sensors.Count; i++)

                    {

                        ifkit_1125.sensors[i].DataRate = 32;//數據傳輸率

                        ifkit_1125.sensors[i].Sensitivity = 5;//敏感度 1=1秒刷新一次,10=10秒刷新一次

                    }

                }

 

            }

        }     

       

        void ifkit_1125_Detach(object sender, DetachEventArgs e)

        {

            if (InvokeRequired)

                Invoke(new DetachEventHandler(ifkit_1125_Detach),

                            new object[] { sender, e });

            else

            {

                //attachedLabel.Text = "Not Attached";

            }

        }

//接收並顯示溫度和溼度

        void ifkit_1125_SensorChange(object sender, SensorChangeEventArgs e)

        {

            if (InvokeRequired)

                Invoke(new SensorChangeEventHandler(ifkit_1125_SensorChange),

                            new object[] { sender, e });

            else

            {

                switch (e.Index)

                {

                    case 0:

                        double tmp = (e.Value * 0.22222) - 61.11;

                        lblTemp.Text = tmp.ToString("0.####") + "℃";

                        //sense0.Text = "" + e.Value;

                        break;

                    case 1:

                        double hum = (e.Value * 0.1906) - 40.2;

                        lblHumb.Text = hum.ToString("0.####") + "%溼度";

                        //sense1.Text = "" + e.Value;

                        break;                  

                }

            }

        }

        void ifkit_1125_InputChange(object sender, InputChangeEventArgs e)

        {

            if (InvokeRequired)

                Invoke(new InputChangeEventHandler(ifkit_1125_InputChange),

                            new object[] { sender, e });

            else

            {

               

            }

        }

 

        #endregion

 

//實現按鈕開關電源事件:

 

private void bt1014_1_1__switchButtonClick(int switchStatus)

        {

            //switchStatus == 1 ? this.ifkit_1014_1.outputs[0] = true : this.ifkit_1014_1.outputs[0] = false;

            try

            {

                if (switchStatus == 1)

                {

                    this.ifkit_1014_1.outputs[0] = true;//打開電源

                }

                else

                {

                    this.ifkit_1014_1.outputs[0] = false;//關閉電源

                }

            }

            catch { }

        }

 

Phidgets1014的連線及其使用方法請參考:

http://wenku.baidu.com/link?url=isVI8BI63qUCN8OHAkjiJwz2ih7ed4c5pLfd4OeSM0DBN59s7pgraHpNil6O4y18HtWPwe8K8DJyClERFugasLa7E_XOLdmi0fncfIpQH2e

 

本文完整源碼和驅動文件(C#)

http://download.csdn.net/detail/soft2buy/5489609


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章