概述
基于OneNET View 3.0 的可视化数据监测系统——制作说明
功能说明
本系统通过维特的九轴姿态传感器WT901C和GPS卫星定位模块获取被测物体的经纬度、高度、速度、加速度、磁场等数据,通过串口2将所得数据传输给STM32单片机进行数据整合,再利用STM32单片机的串口1将所整合到的数据通过维特智能4G无线透传模块Cat.1(模块核心是合宙的Air724UG-4G)将数据传输到onenet云平台,并利用平台所提供的基础服务MQTT物联网套件对数据源进行管理。最后利用OneNET View 3.0平台所提供的可视化界面对所有数据进行数据可视化。
可监测数据
时间、经纬度、高度、航向、速度、加速度、位移、温度、磁场
成果展示
可视化成果
注:由于采用免费可视化,所以只能做3个数据源的界面
资料包连接
实物图
制作步骤
1.传感器部分
将WT901C模块通过USB-TTL线连接口电脑,打开上位机软件(传感器资料包里)
正确连接软件串口,波特率9600或115200都可以
点击配置进入该页面,并进行如下设置
回传速率根据自己需求设定
频率 | 对应时间 |
---|---|
10HZ | 0.1s |
5HZ | 0.2s |
2HZ | 0.5s |
1HZ | 1s |
注:该设计使用免费版,只能有3个数据源,所以只勾选欧拉角。设置完成后注意锁定,保存设置。
2. STM32部分
将程序包里的程序正确下载到单片机中
串口读写数据
//CopeSerialData为串口2中断调用函数,串口每收到一个数据,调用一次这个函数。
void CopeSerial2Data(unsigned char ucData)
{
static unsigned char ucRxBuffer[250];
static unsigned char ucRxCnt = 0;
LED_REVERSE(); //接收到数据,LED灯闪烁一下
ucRxBuffer[ucRxCnt++]=ucData; //将收到的数据存入缓冲区中
if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头
{
ucRxCnt=0;
return;
}
if (ucRxCnt<11) {return;}//数据不满11个,则返回
else
{
switch(ucRxBuffer[1])//判断数据是哪种数据,然后将其拷贝到对应的结构体中,有些数据包需要通过上位机打开对应的输出后,才能接收到这个数据包的数据
{
case 0x50: memcpy(&stcTime,&ucRxBuffer[2],8);break;//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据结构体里面,从而实现数据的解析。
case 0x51: memcpy(&stcAcc,&ucRxBuffer[2],8);break;
case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;
case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break;
case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break;
case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;
case 0x58: memcpy(&stcGPSV,&ucRxBuffer[2],8);break;
case 0x59: memcpy(&stcQ,&ucRxBuffer[2],8);break;
}
ucRxCnt=0;//清空缓存区
}
}
void CopeSerial1Data(unsigned char ucData)
{
UART2_Put_Char(ucData);//转发串口1收到的数据给串口2(JY模块)
}
数据发送代码
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
num++;
if(num>=120)
{
num=0;
printf("{rn"id":123,rn"dp":{rn");
printf(""x_angle":[{rn"v":%.3f,rn}],rn",(float)stcAngle.Angle[0]/32768*180);
printf(""y_angle":[{rn"v":%.3f,rn}],rn",(float)stcAngle.Angle[1]/32768*180);
printf(""z_angle":[{rn"v":%.3f,rn}],rn",(float)stcAngle.Angle[2]/32768*180);
printf("}rn}rn");
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
}
}
注意UART1的波特率必须设置为115200
int main(void)
{
unsigned char i = 0;
SysTick_init(72,10);//设置时钟频率
// Initial_UART1(9600);//接PC的串口
Initial_UART1(115200);//接PC的串口
Initial_UART2(9600);//接JY-901模块的串口
LED_ON();
delay_ms(4999);delay_ms(1000);//等等JY-91初始化完成
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
//功能现象,20秒钟左右会进行一次加速度校准,加速度校准之后,XY角度会缓慢回到0度状态
while(1)
{
// delay_ms(1000);
// i++;
// if(i>20)
// {
// i = 0;
// printf("正在进行加速度校准rn");
// sendcmd(ACCCALSW);delay_ms(100);//等待模块内部自动校准好,模块内部会自动计算需要一定的时间
// sendcmd(SAVACALSW);delay_ms(100);//保存当前配置
// printf("加速度校准完成rn");
// }
// //输出时间
// printf("Time:20%d-%d-%d %d:%d:%.3frn",stcTime.ucYear,stcTime.ucMonth,stcTime.ucDay,stcTime.ucHour,stcTime.ucMinute,(float)stcTime.ucSecond+(float)stcTime.usMiliSecond/1000);
// delay_ms(10);
// //输出加速度
// //串口接受到的数据已经拷贝到对应的结构体的变量中了,根据说明书的协议,以加速度为例 stcAcc.a[0]/32768*16就是X轴的加速度,
// printf("Acc:%.3f %.3f %.3frn",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);
// delay_ms(10);
// //输出角速度
// printf("Gyro:%.3f %.3f %.3frn",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);
// delay_ms(10);
//输出角度
printf("Angle:%.3f %.3f %.3frn",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);
delay_ms(10);
// //输出磁场
// printf("Mag:%d %d %drn",stcMag.h[0],stcMag.h[1],stcMag.h[2]);
// delay_ms(10);
// //输出气压、高度
// printf("Pressure:%ld Height%.2frn",stcPress.lPressure,(float)stcPress.lAltitude/100);
// delay_ms(10);
// //输出端口状态
// printf("DStatus:%d %d %d %drn",stcDStatus.sDStatus[0],stcDStatus.sDStatus[1],stcDStatus.sDStatus[2],stcDStatus.sDStatus[3]);
// delay_ms(10);
// //输出经纬度
// printf("Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fmrn",stcLonLat.lLon/10000000,(double)(stcLonLat.lLon % 10000000)/1e5,stcLonLat.lLat/10000000,(double)(stcLonLat.lLat % 10000000)/1e5);
// delay_ms(10);
// //输出地速
// printf("GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/hrn",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);
// delay_ms(10);
// //输出四元素
// printf("Four elements:%.5f %.5f %.5f %.5frnrn",(float)stcQ.q[0]/32768,(float)stcQ.q[1]/32768,(float)stcQ.q[2]/32768,(float)stcQ.q[3]/32768);
// delay_ms(10);//等待传输完成
}//主循环
}
3. WT4G-M模块部分
打开 s Luatools 工具,按照“ZL-LTE系列(4G)软件安装及固件下载详解V1.1”将“Air724固件”正确安装驱动并烧录固件。
设置模块的网络通道参数。
4. 云平台部分
按照“ZL-LTE系列(4G)OneNET平台连接教程详解V1.1”文件正确连接平台,并成功在线接受数据流。
5. onenet view可视化部分
根据onenet view开发文档,建立模板和可视化。
最后
以上就是微笑羽毛为你收集整理的基于OneNET View 3.0 的可视化数据监测系统基于OneNET View 3.0 的可视化数据监测系统——制作说明的全部内容,希望文章能够帮你解决基于OneNET View 3.0 的可视化数据监测系统基于OneNET View 3.0 的可视化数据监测系统——制作说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复