小学期一门课名为硬件综合训练,一直到了第二周才开课,一开始我还以为又是什么水到不行的课,交个报告就完事。当我见到那物联网教学科研平台时,就改变了我的看法。六个传感器,一个LINUX网关,传感器通过ZIGBEE网络发送数据,网关接收并用图形化界面显示出来。而我们要做的,就是在此基础上模拟一些功能,使其能用在智能家居上。就比如有个温湿度传感器,我们可以利用这个传感器对家庭的温湿度进行监控,一旦发现家里温度过高,就可以控制空调自动开启。这是一个计算机科学与技术专业的软件狗第一次接触到硬件的过程。(据说,全国高校本专业只有本校开设了这门课。。。)
闲话就说到这里,今天距离第一次课刚好一周,距离我拿到实验平台共计四天的时间,对平台也熟悉的差不多了,经过一次次折腾,大致了解了Zigbee网络的工作方式,以及代码写法,明天就可以开始真正的开发智能家居的应用。
7月7号下午:
这不就是一个已经可以使用的平台了吗,我们不用在对硬件进行编码了吧,我只要把传感器采集到的数据通过串口读取到我的电脑上不就完了。(ps:平台网关和Zigbee协调器模块是通过串口进行通信的)网关是up-cup6410型号,传感器均来自于北京博创兴盛科技有限公司。百度搜了C语言读串口的代码,其实这个还真不好搜,费了好大劲才找到,可能是我关键字不太对吧,也可能是我对c语言理解不够深刻,搜到了说直接用CreateFile把串口当成文件来读的。可是细数我两年的编程经历,读文件还只用过FILE类。。。这个部分贴个代码,方便跟我一样的初学者。
<span style="font-family:KaiTi_GB2312;font-size:18px;">HANDLE test = CreateFile(_T("COM3"), GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL); //打开串口
if (test == INVALID_HANDLE_VALUE) //打开失败
{
cout << "open filed\n";
system("pause");
exit(-1);
}
DCB *dcb = new DCB(); //设置串口状态所用的控制块
GetCommState(test, dcb);
dcb->BaudRate = 115200; //波特率
dcb->ByteSize = 8; //字长
dcb->Parity = 0; //奇偶校验方式
dcb->fOutxCtsFlow = false; //无硬件流中断
SetCommState(test, dcb); //设置串口状态
DWORD readSize;
DWORD fileSize = 1;
char *buffer = new char[fileSize];
char *data = new char[17];
ReadFile(test, buffer, fileSize, &readSize, NULL); //从串口读数,test是串口的句柄,buffer数据缓冲区,filesize要读取的大小,readsize实际读取大小</span>
读完串口后数据即存放在buffer中。
找代码找的心力交瘁,然后开始进行测试,代码运行好久,控制台并没有输出,难道是波特率出错了(PS:后来才知道波特率不对也会有输出ÿ