zigbee&云服务器智能家居控制系统

现在正在做一个智能家居远控项目,我们选用的通信模块是zigbee模块,通过多功能遥控与Zigbee进行数据对接控制,为什么要用到云服务,因为我们市面上遥控器的类型太多,此次我们做到是Zigbee&红外遥控器,Zigbee遥控比红外传输距离远信号更稳定,只要在这个蜂窝信号内无论遥控指向何方都能准确控制。云端主要与手机APP方面对接。


首先我们将每个电器上装上一个zigbee端口,然后遥控这边发验证码过去进行匹配,本将本遥控器需要的红外数据库通过局域网发给手机端,手机进行选择遥控码的一些信息,并将请求发个云端服务器,云端服务器通过算法匹配后,将数据包发给手机,手机通过路由器传给每个zigbee端口,zigbee收到数据库后,此时遥控就能实时控制所有装有zigbee端口的电器。

此次我们网络云端底层用的是TCP/IP协议,在网络应用层我们选择用的是Http协议,数据库方面用的是JSON数据库模型。这样规范主要是为了与服务器云端那边好对接。

今天把网络终于调通了,现在主要的问题是我从云端数据库下载数据的时候总是出现掉数据和有些乱码的情况。

此次我们通信接口方面用到的是Zigbee,这个通信模块在以后的近距离通信方面应该会成为主流。






CString str;
int i;
for(i=0;i<20;i++)
{
str.Format(_T("com %d"),i+1);
m_comb1.InsertString(i,str);
}
m_comb1.SetCurSel(4);


CString str1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"),
_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")};
for(int j=0;j<12;j++)
{
int judge_tf=m_comb2.InsertString(j,str1[j]);
if((judge_tf==CB_ERR)||(judge_tf==CB_ERRSPACE))
MessageBox(_T("bulide baud error!"));
}
m_comb2.SetCurSel(10);


CButton *myButton= (CButton*)GetDlgItem( IDC_RADIO_GET );
myButton->SetCheck(1);


bFirstTime = true;


CString csAddress("www.baidu.com");
COleVariant vtEmpty;
m_Browser.Navigate(csAddress, &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);


UpdateData(false);

return TRUE;  // return TRUE  unless you set the focus to a control
}



HCURSOR CHTTPrequestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}


void CHTTPrequestDlg::PrintResults()
{
Request myRequest;
//char szMessage[8024];
//char szHeaderSend[1024];
//char szHeaderReceive[1024];
CString sHeaderSend, sHeaderReceive, sMessage;
UpdateData(true);


//look at get/post radio buttons
CButton *myButton;
intIsPost= 0;
myButton = (CButton*)GetDlgItem( IDC_RADIO_POST );
IsPost = myButton->GetCheck();

sHeaderSend = m_sData;


myRequest.SendRequest(IsPost, (LPCTSTR)m_sURL, sHeaderSend, sHeaderReceive, sMessage);


m_HTTPsend = sHeaderSend;
m_HTTPreceive = sHeaderReceive;
m_HTTPbody = sMessage;
UpdateData(false);


}


void CHTTPrequestDlg::OnButtonGo() 
{
UpdateData(true);


//look at get/post radio buttons
CButton *myButton;
intIsPost= 0;
myButton = (CButton*)GetDlgItem( IDC_RADIO_POST );
IsPost = myButton->GetCheck();

if ( IsPost )
{
PrintResults();
InsertHTML();
}
else
{
m_sData = "";


//PrintResults();
//InsertHTML();
m_Browser.Navigate(m_sURL, NULL, NULL, NULL, NULL);
InsertHTML();
}


}


BEGIN_EVENTSINK_MAP(CHTTPrequestDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CHTTPrequestDlg)
ON_EVENT(CHTTPrequestDlg, IDC_EXPLORER1, 250 /* BeforeNavigate2 */, OnBeforeNavigate2Explorer1, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
//}}AFX_EVENTSINK_MAP
ON_EVENT(CHTTPrequestDlg, IDC_MSCOMM1, 1, CHTTPrequestDlg::OnCommMscomm1, VTS_NONE)
END_EVENTSINK_MAP()






void CHTTPrequestDlg::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
{
m_sURL = URL->bstrVal;

//________________________________________________________
USES_CONVERSION;

VARIANT* vtPostedData= V_VARIANTREF(PostData);
CByteArray array;
if (V_VT(vtPostedData) & VT_ARRAY)
{
// must be a vector of bytes
ASSERT(vtPostedData->parray->cDims == 1 &&
vtPostedData->parray->cbElements == 1);

vtPostedData->vt|= VT_UI1;
COleSafeArray safe(vtPostedData);

DWORDdwSize= safe.GetOneDimSize();
LPVOID pVoid;
safe.AccessData(&pVoid);

array.SetSize(dwSize);
LPBYTE lpByte= array.GetData();

memcpy(lpByte, pVoid, dwSize);
safe.UnaccessData();


//is post, so signal this
CButton *myButton;
myButton = (CButton*)GetDlgItem( IDC_RADIO_GET );
myButton->SetCheck(0);
myButton = (CButton*)GetDlgItem( IDC_RADIO_POST );
myButton->SetCheck(1);


CString sPostData(lpByte);
m_sData = sPostData;
}// make real parameters out of the notification
else
{
CButton *myButton;
myButton = (CButton*)GetDlgItem( IDC_RADIO_GET );
myButton->SetCheck(1);
myButton = (CButton*)GetDlgItem( IDC_RADIO_POST );
myButton->SetCheck(0);
m_sData = "";
}
//________________________________________________________
UpdateData(false);

if (! bFirstTime )
{
PrintResults();
}
else
bFirstTime = false;
}


void CHTTPrequestDlg::OnButtonViewHttp() 
{

InsertHTML();
AfxMessageBox(m_HTTPbody);
}


void CHTTPrequestDlg::InsertHTML() 
{
//_____________________________________________________________
IHTMLDocument2*pHTMLDocument2;
LPDISPATCH lpDispatch;
lpDispatch = m_Browser.GetDocument();


    if (lpDispatch)
{
HRESULT hr;
hr= lpDispatch->QueryInterface(IID_IHTMLDocument2,
               (LPVOID*)
&pHTMLDocument2);
lpDispatch->Release();


IHTMLElement*  pBody;
hr= pHTMLDocument2 -> get_body(&pBody);


if (FAILED(hr)) return;


BSTRbstr;                
bstr= m_HTTPbody.AllocSysString();

  /// We insert a string of HTML to the end of the document
//pBody->insertAdjacentHTML(L"BeforeEnd",  bstr);
pBody->put_innerHTML(bstr);
  
SysFreeString(bstr);
pBody->Release();
}
//_____________________________________________________________
}




版权声明:本文为yyfwd原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。