项目需求
本项目为从串口读取GPS/北斗设备接收数据,进行处理后使用百度地图api实时显示定位。
解决办法
这里有几个关键的信息,需要一步一步进行实现。
串口
串口通信这里就不做介绍。本意是使用百度地图的api,但是这是一个静态的网页。如果要动态显示,且由前端直接读取PC端的串口数据其实不好实现,在网上查了很多资料,最通常的做法是在前端使用一个active控件读取串口的数据。这样有缺点,一是技术过于老套,只兼容IE,其他浏览器就不行;二是怎么做到动态实时定位呢?这个没有想明白。放弃了从前端直接读取PC串口的想法。还是需要去用后台采集数据,搭建后台和前端进行通信。
串口模拟
路是一步一步走的,胖子也是一口一口吃的,直接去读取GPSS/北斗设备的数据是不可行的。
先采用电脑端的串口助手进行数据的发送和接收。
- 首先采用VSPD(很著名)在PC端模拟出一怼串口,再使用某个串口助手实现数据的发送和接收显示。串口助手很多,随便选择一种即可。
- 这样就可以保证有可靠的数据发送和接收的通信是没有问题的。保证发送端数据的一直发送,接着用程序去读取串口的数据。 123456789101112131415161718192021import serialfrom time import sleepif __name__ == '__main__':serial = serial.Serial('COM2', 115200)#根据自己模拟的端口确定comif serial.isOpen() :print("open success")else :print("open failed")while True:n = serial.inWaiting()if n:data= str(serial.read(n))[2:-1].split(',')#对读取的数据进行简单的处理j = data[0]w = data[1]print(data)
读取串口
保证程序可以正确的读取发送的数据后,再去处理真实的数据,开启GPS/北斗设备,将USB插在电脑上,开始读取原始数据。原始数据包含的信息比较多,而且发送频率也比较高,数据眼花缭乱,这里只匹配想要的数据进行处理。在百度地图上定位只需要“经度”、“纬度”。(这里牵扯到一个坐标系的转换,后面说),这是一个Ajax的程序:
百度地图api
先去申请百度地图api 的 key。然后看这里:http://lbsyun.baidu.com/jsdemo.htm#i8_4
这里放出百度地图定位aip的源码:
上面的程序是静态的,项目需求把从串口源源不断读取的数据在百度地图上进行显示。这里想到使用了Ajax。
Ajax
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。
Ajax 是一种用于创建快速动态网页的技术。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
Django
使用的是Python语言,用Django后台框架就很简单,这里推荐一个博客,学习到很多。自强学堂-Django教程
花了点时间学习了下,Django还是很容易上手的最后将接收到处理的数据存储为csv文件。
这里给出本项目的Django和前端的程序。
view.py
|
|
index.html
|
|
urls.py
|
|
Run_me.bat
批处理文件,方便不懂Django的人开启服务
|
|
使用