国内返利网站怎么做,seo优化标题 关键词,湖南速马科技有限公司,wordpress 注册 中文版下位机 zigbee代码
最近在做基于zigbee的RSSI实时定位系统。这个系统需要我们实时的测量得到每一个位置的rssi值。首先#xff0c;我需要研究怎么把这个rssi值通过串口传到我们的上位机上。
我们可以看到我们下位机#xff0c;里面有一个传送数据包的一个东西#xff0c;在…下位机 zigbee代码
最近在做基于zigbee的RSSI实时定位系统。这个系统需要我们实时的测量得到每一个位置的rssi值。首先我需要研究怎么把这个rssi值通过串口传到我们的上位机上。
我们可以看到我们下位机里面有一个传送数据包的一个东西在这个数据包里面我们把每一次传送的rssi的值分了四次传送这里面涉及到具体的zigbee传送协议以及他们底层硬件的内容。
//主要的串口输出代码
nRssi(0-(int32)rxStats.rssiSum/32);
strRssi[0]nRssi/100;
strRssi[1]nRssi%100;
//UartTX_Send_String( RSSI:-,strlen( RSSI:-));
UartTX_Send_String(strRssi,2);
UartTX_Send_String(\r\n,strlen(\r\n));/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(int8 *Data,int len)
{int j;for(j0;jlen;j){U0DBUF *Data;while(UTX0IF 0);UTX0IF 0;}
}
可以看到在串口发送字符串函数里面。我们的数据是通过这个函数进行发送的。然后他只是把我们的数据传到了u0dbuf里面但是这个u0dbuf具体是什么作用需要看相关的手册以及相关的协议才能搞明白目前我的水平只是会用这些东西根据通信协议写一个数据包并发送接收这种我水平还达不到。
然后我就通过实验来验证一下来判断一下他们到底往串口里面发的都是些什么东西。以及我们如何把这些东西传到我的上位机上如何显示出来数据。
上位机 matlab代码
有现成的串口调试助手但是串口调试助手呢他是别人已经写好的而且呢功能非常局限性也不能更改什么东西也不能说时显示我的数据画图什么的都不行也不能进行一些深层次数据分析所以说我们自己写个上位机自己写一个串口数据处理程序然后我们亲眼看看这个数据到底是个什么东西。
matlab很简单而且对于数据的处理也是比较厉害所以说我们就matlab来做一个串口助手。但是此时此刻我不想再搞一个gui界面因为我们先把最基本的这些东西搞明白之后gui界面就好做了。
我现在我们通过Serial搞一个串口对象然后吗设置这个对象设置它的波特率呀以及一系列的这个东西我们的端口儿呢是因为我这个硬件儿连到电脑上发现他的端口是Com3口儿所以我们就把这个串口的对象的设置为Com3口。
首先我们不知道他读的是什么东西也不知道他们一次读了是一个几位的数据也不知道他们这个东西是怎么传的那么我们就可以把这个东西给输出出来看看。下面看代码
这里面我加了一个实时绘图实时显示绘图非常简单。无非就是每次画点坐标是XY。X轴我们设置为时间轴Y轴我们设置为数据轴。xy点坐标呢每次Y坐标是通过我们的数据串口读取读取到的但是x坐标需要我们自己去改变我们这里把X每次都增加一一就是就意味着他时间每次增加一然后Y轴对应的是串口读取到的新的数据这样的话我们每次把xy的这个坐标点画到图像上这么一来他们就成了一个散点图了。
delete(instrfind);
pause(0.1);
sserial(com3);
set(s,BaudRate,9600,DataBits, 8, Parity, none,StopBits, 1, FlowControl, none,Terminator,CR);
fopen(s);
x1;for i1:4outfread(s,1,char); %一次读出1个字符 fprintf(%c,out); %输出字符plot(x,out,or , MarkerSize, 5)xx1;hold on;pause(0.1);%fprintf(fid,%c,out); % 写入文件里
endfclose(s);
delete(s);
clear s;我想搞一个数据实时显示的绘图的一个东西。然后一开始呢就以为他一次就把我数字都给读出来了。 但是画图的话是每次给我画了四个点然后四个点来回平移来回这么上下左右摇摆。这个他这个可能是不是直接给我一个数字不是给我一个int型的而是给我一个char形的。而且呢四个char型才组成了一个数字。 那我又验证了一下然后我就让他循环四次然后我们看看它到底读的是个什么东西最后发现四次每次读取的就是一个字符。比如39第一次读个三第二次读个九第三次第四次分别是\r\n 这时候我们实时数据显示图也可以明显的看出来。绝对是一个char型的因为它的数据呢阿斯科码对应的十进制呢字符三对应的十进制刚好就是507对应十进制是54. 那么接下来呢这个串口数据传的是怎么传的都知道了然后怎么采集的也知道了怎么画图的也知道了那么如何把这个数据再处理一下。每次显示的图像上的是一个整体的一个数而不是是四个字符呢。我考虑就是把这个四个数儿给合并一下单独搞一个for循环合并这四个数儿然后for循环外面套一个while。for完之后把这个数输到这个界面上这就行了。
这样一来我什么zigbee传输协议不知道。底层也不太清楚但是照样能够显示出来数据。但是呢也不能说通过这种推理现象得出结论的方法是好的。因为这样的话我们对底层的原理不了解这就没办法更深层次地进行一些创新性的操作。目前只是把这些代码在逻辑结构上加加减减进行适合我想要的实验结果的操作但是这样的话。没办法从新建一个文件开始写出来整个文件而只能通过修改已有的文件来达到这些效果。这样很显然就是非常浅层次的学习而不算是更加深入地更加有创造性的学习。
目前所学甚浅我也意识到了很多地方我只是看似会但其实只知其大概以后还是少去拼凑代码了好好学学底层的原理继续深造弄一个完全属于自己的东西出来。工程师和科学家侧重点不一样。有的老师喜欢把原理搞得特别懂然后创造一个新原理。有的老师喜欢把已有的东西拼凑出一个更加完美的东西而不注重他究竟是怎么实现的。每个人的态度都不一样。