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的連線及其使用方法請參考:
本文完整源碼和驅動文件(C#)
http://download.csdn.net/detail/soft2buy/5489609