arduino uno采集mpu6050姿态信息和neo-y6m经纬度信息,通过esp8266wifi模块将数据发送到labview,建立TCP通讯(二)

今天也是抽出时间来完成了,大家自己参考参考,能自己做就自己做。

如果你觉得对自己有用,你可以加我QQ1825554165,请我喝可乐。

本文搭建了基于 Labview 的监控系统,完成了利用单片机对姿态信息和位置信息的采集,并将采集到的姿态信息和位置信息通过 WIFI 模块 ESP8266 发送出去,最终在 Labview 端接收位置信息和姿态信息并图形化显示。为了完成毕业设计要求,分为四大部分完成。

第一部分是将姿态信息采集出来, 将九轴惯性器件 MPU9250 与单片机 Arduino-uno 连接,可以直接从九轴惯性模块 MPU9250 的 DMP 专用寄存器中读出三轴加速度、三轴角速度和三轴磁力计的值。采用四元数法解算姿态角而不是欧拉角旋转矩阵是因为欧拉角旋转矩阵解算姿态角会出现万向节锁死的问题,通过互补滤波算法利用加速度计的值矫正陀螺仪的值,然后由罗德里格旋转推导四元数并建立四元数更新的的微分方程,最后通过校正后陀螺仪的值解算出姿态角。

第二部分是将卫星定位的位置信息获取出来,采用 GPS 模块 NEO-Y6M,由于该模块设计的特点,当它与单片机通过串口相连时,可以直接从串口中读出卫星导航报文 NMEA 语句。这些语句中包含纬度信息、经度信息、海拔高度信息和 UTC 时间信息。通过程序将 NMEA 语句中的位置信息和经度信息读取出来。

第三步是利用 WIFI 模块连入单片机,将采集到的数据发送出去。采用 AT 指令开发的模式,利用单片机上设置好的软串口使得单片机可以与 ESP8266 通讯,通过程序控制软串口给 ESP8266 发送 AT 指令来对 ESP8266 进行设置。在这一过程中涉及对 WIFI 模块 ESP8266 工作模式的配置和传输数据的配置。设定 ESP8266 工作在 AP 模式下,设定好模块的 WIFI 名称、端口号和 IP 地址,设定 WIFI 网络传输层协议为 TCP。最终将采集到的姿态信息和位置信息传输出去。

第四步是在上位机界面利用 Labview 建立 TCP 网络连接进而接收到姿态信息和位置信息。根据 Labview 官方提供的 TCP 网络连接案例进行改动,使 Labview 程序与 ESP8266 设定的模式配和,建立连接后接收到信息。由于接收到的信息为字符串类型的,需要将这些字符串类型的信息转换为数值类型的信息。最终,建立可视化界面,对姿态信息和定位信息进行实时监控。

这部分是利用ESP8266替单片机传输数据

利用 ESP8266 模块给单片机传输数据,采用 AT 指令开发模式。为了能够让单片机自动发送 AT 指令,需要在 Arduino-uno 单片机上设置一个软串口。鉴于 Arduino编程的特点,在 setup 函数里设置好 ESP8266 的工作模式,在 loop 函数里进行数据传输相关的配置。ESP8266 工作在 AP 模式,传输层协议为 TCP。

为了将Arduino-uno 单片机采集到的姿态信息和经纬度信息通过ESP8266 发送出去,需要结合 Arduino 软件和硬件的特点。在硬件方面,由于 Arduino-uno 只有一个串口,一般称为硬串口(数字接口 0 和 1)。为了使单片机与 ESP8266 模块通讯,需要设置全新的软串口,设置数字引脚 10 为RX,数字引脚 11 为TX。由于设置 ESP8266的 AT 指令和发送数据的 AT 指令不同,因此在 setup 函数和loop 函数里面应该分开。在发送数据的 AT 指令 AT+CIPSEND=0,65 中,具体发送的字节长度应该要比实际的数据稍长,因为采集到的数据会出现正负之分和有效数字的问题。

下面是下位机代码,之前换电脑了,源代码在家里的老电脑里,大家可以参考着看。

 下面是LABVIEW的上位机代码,大家参考着看。

程序框图所用函数:

程序框图的设计思路是:由于 ESP8266 工作在 AP 模式下,电脑端的 labview 就是接入此局域网的 STA 设备。在 WIFI 传输时设定传输层协议为 TCP,则 labview 也应该用 TCP 类型的控件进行编程。程序框图所用函数以及结构介绍如下。

打开 TCP 连接函数:功能是开启由地址和目标端口指定的 TCP 网络连接。

读取TCP 信息功能函数:从TCP 网络连接中读出字节并利用数据输出的结果

关闭 TCP 连接函数:关闭 TCP 网络连接

简易错误处理器 VI:发生错误时,显示有错误发生,并选择性的打开一个对话框

平铺式排序结构:如果程序中含有一个或多个依次顺序进行的子程序框图,可以保证所有子程序按次序进行

层叠式的次序结构:包含一个或多个能够按次序执行的子程序框图,确保子程序按次序进行

While 循环:通过反复运行子程序框图中的程序直到符合某一要求,While 循环至少执行一遍

强制类型转换函数:通过使用新数据类型的平滑和还原技术,使 x 强制转化为某个类型

等待的一个整数倍毫秒函数:指等待直至毫秒计时器的时间值为毫秒倍数中指定值的整数倍。该函数用于同步各动作。因此我们可以在循环中利用此函数,调整循环进行的快慢

匹配模式函数:从所有以偏移量为开头的字符串中,寻找正则表达式。如函数检查找到匹配时,它将字符串划分为三个子字符串

索引数组函数:在输入的 n 维数组的索引位置寻找特定元素跟子数组

截取字符串函数:寻找输入到函数中的从偏移量位置开始的字符串的子字符串

分数字符串至数值转换函数:从偏移量开始,使字符串转换为分数格式的浮点

下面是上位机端LABVIEW的前面板和后面板设计

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值