如何在WinCE平台下开发智能家居应用

来源:互联网 发布:vb与三菱plc通讯 编辑:程序博客网 时间:2024/06/05 04:36

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


 

原创粉丝点击