巅峰国际pg平台官网 硬件综合训练中期总结

有一门在小学期开设的名为硬件综合训练的课程,一直到第二周才开始上课,刚开始的时候我还认为这是那种简单到不行的课程,交一份报告就可以完成。当我看到那个物联网教学科研平台时,我的看法就发生了改变。有六个传感器,还有一个LINUX网关,传感器借助ZIGBEE网络来发送数据,网关接收数据并且通过图形化界面显示出来。而我们需要做的事情,就是在这个基础之上模拟一些功能,让它能够应用在智能家居上面。比如说存在一个温湿度传感器,我们能够借助这个传感器去对家庭的温湿度予以监控,一旦察觉到家里温度过高,便能够控制空调自动开启。这是计算机科学与技术专业的一个软件狗首次接触硬件的进程。据说,全国高校的这个专业只有本校开设有这门课程。

就说到这儿闲话,今天距离第一天上课恰好一周,距离我拿到实验平台总共四天时间,对于 平台也差不多熟悉了,经过一回回折腾,大概晓得 Zigbee 网络的工作方式,还有 代码写法,明天就能开始真正去开发智能家居的应用 。

7月7号下午:

这难道不就是一个已然能够投入使用的平台了呀,我们是不是无需再针对硬件展开编码操作了呢,我仅仅是要将传感器采集获取到的数据经由串口读取至我的电脑之上不就达成了。(附注:平台网关以及Zigbee协调器模块乃是借助串口予以通信的)网关属于up-cup6410型号,传感器都源自北京博创兴盛科技有限公司。在百度上搜索了关于C语言读取串口的代码,实际上呀,这个真的不太容易搜索到呢 ,花费了好大的力气才找到 ,也许是我所使用的关键字不太恰当吧 ,又或许是我对于c语言的理解还不够深入透彻 。搜索到了一种说法是直接运用CreateFile把串口当作文件来进行读取的 。然而呢 ,细细数算我这两年的编程经历 ,读取文件的时候也仅仅只用过FILE类 。哦对了 ,这个部分要贴出一段代码 ,以便给跟我一样的初学者提供便利 。

设置一个名为HANDLE的测试状态,通过CreateFile函数,以_T("COM3")为参数来创建文件,该创建行为具备GENERIC_READ的属性,其值为0,参数为NULL,打开途径选用OPEN_EXISTING方式,其他两个参数又均为NULL,最终实现打开串口的操作 。
要是(测试等于无效句柄值那种情况),那么(这意味着打开方面失败了)  。
	{
		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;
指针类型为字符的变量buffer,被赋予了通过新建得到的、数组长度为文件大小的字符数组,。
	char *data = new char[17];
读出串口数据,以test作为串口的句柄,将数据存入buffer数据缓冲区,filesize为要读取的大小,实际读取大小为readsize ,通过ReadFile(test, buffer, fileSize, &readSize, NULL)进行操作。

读完串口后数据即存放在buffer中。

心力交瘁地找寻着代码,随后开启了测试,代码运行了好长的时间,然而控制台却没有任何的输出,难道是波特率出现了差错(附注:后来才晓得波特率不对同样会有输出,只不过呈现的皆是乱码),于是我运用几个常用的波特率再次进行测试,可是依旧没有输出。接着,我映入脑海的是那个帮助光盘,可我的计算机光驱位早就被我拆卸后安装了SSD,只能静等同学归来。后来经由同学的提示,要先向传感器里写入程序,接着依据教程去做实验。

当时我并不知晓,在此处我犯下了两个失误,其一,filesize被设置得过大,而串口发送速率却过小,如此一来,致使要将整个buffer读取满需要耗费极长的时间。其二,对于ReadFile()的返回值判断出现了差错。正常情况下,调用成功会返回非零值巅峰国际pg平台官网,调用不成功才返回零值!!!然而我却完全弄反了,这便致使无论我采取何种方式,都始终不会有输出。

7月8日:

拿文档这事终于是成了,实验平台里边有个配套工具,工具里有个叫仿真器的物件,它是往传感器上写程序时要用的,按教程里说的安装驱动方式弄,却提示找不到,把驱动所在目录打开一看,发现这驱动只适用于xp系统,没办法,要调试程序就得在虚拟机里装个xp系统。

装完系统,半个上午便消逝了,再去上一节课,一个上午就没了,真正做事情的时段是在下午。打开教程,浏览一番目录,先瞧一瞧开发环境。原来还得有一个称作IAR的IDE才可开发程序。还好备有虚拟机,无需在我本机上去折腾了。配置好开发环境,顺着教程写完了我的首个嵌入式程序,就是操控板子上的LED灯的,依照教程一步步烧录到板子上,挺开心。虽说对实际要做的没什么助益,但是终究第一步跨出去了,。看见目录里总计二三十个实验,我从中挑出三个实验去做,一个是基础实验,一个是传感器模块实验,还有一个是无线通讯实验。这几个实验没什么可讲的,按照教程来做 。

这三项实验都借助了xp系统的超级终端来读取串口数据,在我完成这几个实验后,突然想到,既然超级终端能够读出串口数据,那么我所编写的程序想必也能够读出来。回到win10系统,更改一下buffer大小,此处进行修改是由于当下发送的数据量少,并非是我察觉到了数据采集以及传输速率的不同。拿过来进行测试,依旧不行,随后我便发现了返回值的问题,修改返回值之后,果真,是能够输出的。而后我好似突然记起了什么,心里一惊。这样讲来,昨天的这个程序同样是能够读取数据的,只是我将返回值搞错了。哎呀,传感器上面的程序是已经被我修改好了,这点就表明当下的几个传感器已然无法组成一个网络了。哎呀呀,这真的是在作孽啊,先别着急,肯定是有办法的,势必有原来程序的代码,明天再去寻觅。

7月9日

早早起身,于光盘内寻得另一份教程文档,哎呀,竟有三十多页,满满当当尽是字与代码。莫急,缓缓瞧,下方存有界面,怎与先前所见不同呢。暂且搁置,权当如此,觅得源代码,烧录至装置之中,每个皆烧录一份,插置于实验平台上,满心期望其能运作,然而显示屏依旧空白一片。必定是何处出现差错,持续查看 。往下有一行,将核心板按照 coordinator 方式予以编译,把温湿度传感器按 router 方式编译,把其他传感器以 Enddevice 方式编译,并且要找寻到 SampleApp_Init()函数,把当下传感器类型的注释予以打开,并非当前传感器的类型都全部注释掉,再次烧进去,可依旧不行。瞅着文档,我着实不清楚哪儿出错了。算了,那就放弃吧,重新创造出一个网关出来,横竖温湿度的无线数据传输已然会做了,把其他几个传感器增添上去应该也并非难事 。

在其他传感器的前面部分也存在着实验,将代码复制到无线数据传输这里,原本核心板向着串口发送数据所借助的是Uart_Send_Strirng()来进行发送,还要在每一块的前面添加对传感器类型的判断,嗯,大概是这样吧。之后要把程序写入到传感器里面。把所有开关打开,将串口插上,然而却并没有数据 。

算了,心累,明天继续。

7月10日

已忘却昨晚所做之梦,总之梦醒后我极为明晰地意识到,昨日寻得的那个代码绝对是课堂上所见程序的源代码。必定有某处存在问题,定然是昨日诸事不顺。将传感插上,把程序重新编写一遍,确认不存在任何差错,连接好所有线路,开启开关,依旧未有任何东西显现,我略微慌乱,回去再次查看代码,仍无有错,再转头看向屏幕,看向屏幕,哎呀,居然出现了协调器结点,虽说只是一个孤零零的结点,起码出现了,这证实我的想法是正确的。不知道为啥,将所有结点重新启动一回,屏幕之上又成空白了。难道真是我昨天等待的时长不足够久?真是极为糟糕透顶,整个硬件实验要把实验箱拿回宿舍做这种事简直糟糕透顶。总算好了,五个传感器结点在屏幕上现身了,鉴于有毒气体的传感器用不上,往后的实验就把它弃之不用好了。

进行串口的测试,历经这么多天的时间,结果又返回到了最初的状态,要经由串口从传感器那里采集信息。把串口插上之后,才突然想起来串口的一些属性不清楚该如何去设置,于是查看文档,然而文档里面并没有相关的说明。。。算了不管了,就跟无线实验那次采用同样的属性好了,设置好波特率以及奇偶校验等参数,然后打开程序,却发现全都是乱码。这究竟是怎么一回事呢,它到底是怎样发送数据的呢,打开源代码,搜索Uart_Send_Strirng(),居然没有得到结果。那这个究竟是怎样去发送数据的呢,去查看文档,原来使用的是Hal库,向串口发送数据的那个函数变成了HalUARTWrite(),如此一来,波特率设置在什么地方呢,去搜索所有跟波特率有着关联的名词,却并未获取到任何结果。在百度上搜索Hal库的初始化情况,同样没有找到具备有用价值的信息。只能使出大招,采用暴力循环的方式,将几个常用的波特率逐一进行测试,最终找到了一个并非乱码的,其波特率是115200,居然是这般大的波特率,这也是未曾想到的。诸般状况皆顺畅了,余留之事便是针对数据予以解析,将无实用价值的数据予以剔除,仅留存那些我能够运用的数据。历经层层挑选,挑选出传感器结点上线、下线,温湿度传感器按周期性去采集信息,又有其他传感器以中断方式来发送信息这般几条数据。代码颇为简易,没什么可讲的。

对于实验而言,存在着另外一项要求,那便是要搭建出一个网站,此网站能够接收来自传感器的数据,随后手机终端则要从该网站获取数据。经过长时间的思考,想到了之前曾经使用过的一个利用html、nodejs以及mongodb构建的网站模板,借助post请求来发送数据,将数据存放于数据库之中,接着前端从数据库获取数据并予以显示。鉴于此种情况,用C语言去编写HttpPost请求并非那般便利,所以转换成了C#,毕竟以前写过并较为熟悉。顺便将代码粘贴于此 。

公开静态无效值执行超文本传输协议的帖子,其函数参数为字符串类型的名字,字符串类型的地址,字符串类型的父地址,字符串类型的状态,字符串类型的数据。 。
        {
编码数据,编码方式为,UTF8编码格式的那种编码 ,这是一种编码 ,它被称作编码 ,此编码 是UTF8编码 呀 。
string类型的url,其值是"http://localhost:3000/insert" 。
将通过`HttpWebRequest.Create(url)`创建出来的对象,转化为`HttpWebRequest`类型,并赋值给`request` , 。
            request.Method = "POST";
请求的内容类型被设置为,“application/x-www-form-urlencoded”  。
创建一个变量,名为parastr,其值为,"name="加上name,再加上"&addr=",接着加上addr,然后加上"&parentAddr=",随后加上parentAddr,再加上"&state=",跟着加上state,最后加上"&data=",跟着加上data 。
一系列字节的数组,被命名为字节数组,它是通过对数据进行编码后获取字节的操作,从参数化字符串那里得到字节的。 ,。
新的流要获取,从请求里,通过请求的获取请求流的方法来获取,得到的流被放入新的流变量里,这个新的流变量叫newStream 。
新的流,写入字节数组,从索引为零的位置开始写入,写入的长度为字节数组的全部长度,。
            newStream.Close();
        }

毕竟仅仅是发送数据,并不需要接收网站返回的数据,因而就无需使用httpwebresponse了。启动网站,还得对后台接收post的处理程序进行修改。首次运用mongodb,当然离不开百度,创建一个表格,将先前的表格全部替换为当下的表格,果真没问题了,我实在是太机智了。

7月11日

对昨天网页操作的瑕疵做了修改,紧接着,剩下的任务便是安卓获取网页数据并加以处理。这件事并无太大难度,上午整上午都在上课,因此没了动力。我这人着实古怪,面对自己不会做的事积极性超高,然而要是一件事看上去明显能做出来,顷刻间便陷入懒散状态,啥都不想干 。

但是这毕竟还是作业呀,明天再写吧。

7月12日

安卓方面进行开发,要从本机或者网页跟安卓端开展通信,存在好多不同方式,不清楚该选哪一个,内心很是纠结问鼎赏金女王pg官网入口下载手机版安,更为纠结的是倘若答辩老师询问我为何选了这种方式我该怎么去回答嗯,反正我当下能想到的回答方式便是方案存在好多种呀,我仅仅是从其中随意挑了一种,不能老是一直纠结该选哪种方案不是 。

行吧,被我选定的乃是安卓应用程序去访问网页,进而获取数据,并非是从本机朝着安卓发送数据。至于其缘由是啥呢,其中一个缘由便是在前段时间刚刚完成了课表的编写,某些东西仍旧能够得以应用,就是如此简洁。

只是我不清楚该做何种死,偏偏没运用上一回的网页请求代码,似乎那时我认为上一次的http请求仅有POST和GET这两种方式,而我要访问的网页仅仅是个静态网页,不存在POST和GET表单可提交之处,所以不能采用POST/GET,然而百度搜索到的全是POST/GET方式的http请求。接着我就在思索,我这种请求方式究竟该是什么呢,随后我就去借助HttpWatch查看了一番,哎呀,居然是GET。我的水平不行,对http掌握得不够深入,有好多东西需要学习,两年时间里怎能做到全都了解呢,多数时候是边做边去百度的。我一直讲自己只有两年编程经验问鼎赏金女王pg官网入口下载,从敲第一个helloworld开始算,做成现在这样不知算不算好,不过我清楚自己能做得更好,只是内心仍有贪嗔痴 。

处于知晓其为GET方式的状态下,我依旧未曾运用上次所使用的代码,不清楚自身当时是怎样思考的,此次的HTTP请求代码呈现出这般模样 。

创建一个名为httpClient的对象,该对象属于HttpClient类型,它被赋值为通过DefaultHttpClient创建出来的实例 。
通过创建一个新的 HttpGet 对象,将其初始化为指向指定网址“http://192.168.1.50:3000”的访问请求 。
		try
		{
HttpResponse这个对象,它所对应的值为,httpClient执行httpGet这个操作之后所得到的结果 。
假如,超文本传输协议响应的那种状态行里头的状态码等于二百,那么 (这里原句逻辑不完整,根据给定内容只能这样拆分改写,你可以补充完整逻辑以便我更准确改写)。
			{
所获结果等于,将来自于,经由http响应所获取到的实体,借助EntityUtils转化为字符串 。
				//seeString(result);
				Message msg = new Message();
				msg.what = 0;
				msg.obj = result;
				handler.sendMessage(msg);
			}
		}
		catch(Exception e)
		{
			
		}

或许是认为明明这般几行就能搞定的事儿没必要多添几个包吧。头一回写的时候,我是径直把http请求写到了Activity的onCreate方法当中,接着调试,始终抛出异常,经百度才晓得,原来Android4.0往后http请求必须新开线程去执行,不然就会出异常,并且Manifest.xml里还得加上。这才回想起上次那个原本就是异步http请求包,难怪先前没碰到这个问题。进一步朝着下方推进,鉴于要构建一个进行实时监控的系统,故而需要每隔一段特定的时间获取一回数据,于是我再度开启了一个线程用以把控这一逻辑,此线程所起到的作用便是每隔一段相应的时间创建一个线程去发出一个 http 请求来获取数据。

持续进行调试,察觉到每当获取一回数据之后,在去更新 UI 的内容之际又会抛出异常,通过在百度上搜索该异常,才发觉 Android 是不允许线程对 UI 实施更改的,要是打算修改 UI 的话只有采用别的方法,在此处能够搜索到好几种,我从中选用了一种 handler 的方法。

那具体的工作方式呢,也并非是了解得极为细致入微,我仅仅只是讲述一下我所遭遇的问题,在运用了Handler方法之后呢,依旧是抛出异常进而退出,这让我绞尽脑汁也百思不得其解。最终呢,才寻思到原来是线程嵌套的层数太多了,我是借助线程的线程去进行UI更改的,这明显是不可行的呀,于是乎,我就在控制逻辑的线程当中直接撰写了http请求,随后便能够正常工作了。

完美的一天。

关键词:

客户评论

我要评论