Python + ESP32 制作车辆定位系统,终于可以随时随地知道爱车的位置了

 来这里发现更多有趣案例

 HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/

下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。在硬件连线完成之后我们建议您先使用“一分钟上云体验”功能预先体验本案例的实际运行效果。

1、简介

   近年来,全球掀起了一股自动驾驶热潮,无论是传统车企,还是科技企业,甚至很多初创公司都竞相加入这一行业赛道。进入2021年,自动驾驶热度不减,且“吸金”不断,据不完全统计,从今年年初至今,自动驾驶行业投融资事件超过50起,投融资金额近1000亿元,已超过2018年,达到历年最高值。

1.1、背景知识

1.1.1、卫星定位系统

   定位系统是以确定空间位置为目标而构成的相互关联的一个集合体或装置(部件)。这个系统可以保证在任意时刻,地球上任意一点都可以同时观测到至少4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人,安全、准确地沿着选定的路线,准时到达目的地。

  目前主流定位系有除美国的GPS,中国的北斗卫星导航系统、欧盟的伽利略卫星导航系统、俄罗斯全球导航卫星系统等。

GPS

   GPS是美国第二代卫星导航系统。按目前的方案,GPS的空间部分使用24颗高度约2.02万千米的卫星组成卫星星座。24颗卫星均为近圆形轨道,运行周期约为11小时58分,分布在6个轨道面上(每轨道面4颗),轨道倾角为55度。卫星的分布使得在全球任何地方、任何时间都可观测到4颗以上的卫星,并能保持良好定位解算精度的几何图形。这就提供了在时间上连续的全球导航能力。

   想了解GPS详细信息请参考文章

1.1.2、基站定位

   除了像GPS这种卫星定位之外,我们身边的设备如:智能手机、智能手表、穿戴设备等能联网的设备都可以用来定位,通过连接运营商(电信、联通、移动)基站来定位的方式称之为基站定位,或者又称之为移动位置服务(LBS--Location Based Service)。

1.2、准备

   需要准备如下硬件:

ESP32各开发板和HT2828Z3G5L硬件接线请参考下表。

硬件

HT2828Z3G5L

乐鑫

ESP32开发板

安信可

NODEMCU-32S开发板

01Studio

pyWiFi-ESP32开发板

端口标识

GND

GND

GND

GND

VCC

3V3

3V3

3V3

TX

16

P16

16

RX

17

P17

17

硬件说明

硬件积木说明

快速开始

详细端口定义

快速开始

详细端口定义

快速开始

详细端口定义

   下图是以NODEMCU-32S开发板为例的接线图。

2、物联网平台开发

2.1、开通公共实例

   对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。

   在物联网平台中,左上角选择“华东2-上海”,点击“公共实例”,即可开通。

   开通物联网平台功能之后,需要下面的3个步骤完成云端设备的设定:

    1. 创建产品(设备模型)
    2. 定义产品功能(物模型)
    3. 创建设备及获取三元组

2.2、创建产品(设备模型)

   进入公共实例控制台,点击“创建产品”按钮,即可进入新建产品页面

   进入新建产品页面,设定“产品名称”,这里我们命名为“车辆定位器”,读者也可以根据自己的喜好来命名。

   在“所属品类”中,选择“标准品类”。“标准品类”收录了一些常用的设备模型,其会为我们定义好后续的产品功能(物模型)。我们也可以选择“自定义品类”,来自己定义物模型。在右侧栏中搜索并选择“定位器”。

   产品的节点类型选择“直连设备”,数据格式选择“ICA标准数据格式”,检验类型和认证方式选择默认设定即可。开发者可根据自己的需求在“产品描述”页面添加针对此产品的描述。

   对于 ESP32 等搭载 Wi-Fi 的设备而言,联网方式可以选择“Wi-Fi”。

   选择之后,点击“确认”按钮,即可完成产品创建。返回“产品”页面之后可以看到产品类表中会出现刚刚创建的“车辆定位器”的产品,如下图所示。

2.3、定义产品功能(物模型)

   点击上图中的“查看”按钮,即可看到产品信息,Topic列表,功能定义,数据解析等跟产品相关功能的设定。点开“功能定义”标签页,可以看到设备物模型定义。

   因为在创建产品的过程中选择了标准的产品品类,这里会出现标准品类中自带的物模型设定,即“地理位置”。点击“查看”,我们可以看到该属性的详情。可以看到,该属性的数据类型是一个结构体(struct),其成员描述了设备的精度(浮点)、维度(浮点)、海拔(浮点)、坐标系统(枚举量,1:WGS_84/2:GCJ_02)

   定义好物模型后,记得点击“发布”以使变更生效。

   产品及其物模型创建完成后就可以创建这个产品的设备了。

2.4、创建设备及获取三元组

   点击左侧栏中“产品“,回到产品列表。在产品列表页面中,点击“管理设备”,就会进到设备管理页面。

   在“设备”页面点击“批量添加”按钮,如下图所示。填入需要生成的设备数量。例如图中物联网平台会为我们生成3台设备,以及随机的deviceName。

   批量生成的设备如下:

   设备添加完成后,点击“前往查看”按钮,就可以看到此设备的详细信息了。

2.4.1、下面获取设备三元组

   如下图所示,点击“查看”按钮,就可以看到设备的三元组信息,三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。

3、设备端开发

3.1、开发环境

   在进行下一步之前请确保ESP32开发环境已经搭建完毕。详情请参考“ESP32快速开始”的说明。

3.2、创建解决方案

   如下图所示,打开HaaS Studio后,新建一个基于 helloworld 的 Python轻应用。    

   

   设定好工程名称及工作区路径之后,硬件类型选择ESP32,点击立即创建,创建一个Python轻应用的解决方案。

   下载定位脚本压缩包后解压,复制全部文件后,覆盖刚刚创建的gnss工程目录下。main.py代码区如下图所示:

   

Python脚本的详细说明请参考脚本内嵌的文字版注释

   之后,在代码中填入对应的信息

  1. 填写Wi-Fi名称及密码

   在main.py中,填写可用的Wi-Fi名称及密码。

# wifi连接的的ssid和pwd定义
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"
  1. 修改设备端三元组

   在main.py中,填写创建的设备三元组信息。关于设备三元组的获取,请参考上面“获取设备三元组”中的步骤。

# 三元组信息
productKey     = "产品key"
deviceName     = "设备名称"
deviceSecret   = "设备密钥"

4、运行结果

4.1、本地查看

   推送此脚本到ESP32之后,串口会输出获取到的定位信息,同时按照脚本中的逻辑,当定位信息发生变化时,会将更新的定位信息上报至物联网平台。如下面这段串口日志所示。

...
************* python task init*******
mount fs
>>> execfile("/data/pyamp/main.py")
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.0.105', '255.255.255.0', '192.168.0.1', '192.168.0.1')
sleep for 1 s
establish tcp connection with server(host='a1zxKgAV78Z.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物联网平台连接成功
sleep for 2s
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b'$GNGGA,,,,,,0,00,25.5,,,,,,*64\r\n$GNGLL,,,,,,V,M*79\r\n$GNGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,1*01\r\n$GNG')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b'SA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,4*04\r\n$GPGSV,1,1,00,0*65\r\n$BDGSV,1,1,00,0*74\r\n$GNRMC,,V,,,,,,,,,,M')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n\r\n$GNRMC,,V,,,,,,,,,,M')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n$GNGGA,,,,,,0,00,25.5,')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
...

   出现此段日志时,说明定位信息上报成功,读者此时可以前往物联网平台查看设备的实时定位数据。

4.2、在物联网平台上查看设备数据

   当设备启动成功并第一次连接到物联网平台之后,物联网平台上对应的设备状态会从”未激活状态“变为”上线“。点击“物模型数据”标签页,能够看到设备上报到物联网平台的属性值。

   点击卡片上的“查看数据”,可以看到完整的历史数据。

   此时,如果设备上报新的地理位置信息,则物联网平台上能够实时显示。至此,定位数据上云完成。

5、物联网应用开发(定位数据可视化)

   在前面的章节中,我们已经成功将地位信息实时上传到了云端。本节中,我们将介绍如何快速实现将设备的位置实时显示在地图中。

   IoT Studio 提供了应用快速开发的能力,可以很方便地与物联网平台进行联动。本节的开发工作也将围绕 IoT Studio展开。

5.1、新建“普通项目”

   打开IoT Studio官网,在项目管理中新建一个空白项目,如下图所示,将此项目命名为“车辆实时定位系统”。

5.2、关联产品

   为了使本项目能够获取到目标设备的定位信息,我们首先需要将该项目和我们在前一节创建的产品“车辆定位器”绑定。

   在项目控制台,点击左侧的“产品”,点击“关联物联网平台产品”。此时可以看见我们创建的“车辆定位器”。点击选中,并勾选“关联产品同时关联其下所有设备”,以便该项目可以访问到所有设备的定位信息。

5.4、创建“Web应用”

   在项目控制台,点击左侧的“主页”,在新项目的首页新建一个Web应用,命名为“车辆实时定位监控”。

   Web应用创建成功后自动跳转到应用界面设计页面。点击左侧栏中的“组件”按钮图标,就可以看到可用的组件列表。各组件的说明请参考IoT Studio组件说明

   为了能够将设备显示在地图上,我们选用“设备地图”组件。鼠标悬停在该组件上以查看详细信息。

   将“设备地图”组件拖拽至画布,并调整大小。此时,地图上还未能正确显示设备。我们需要点击右侧“编辑设备地图”。

   点击右侧“编辑设备地图”后,我们可以在右侧“选择设备”中,选择我们刚刚和项目绑定的“车辆定位器”。点击确定。

   此时,地图上已经出现了定位点,正是我们之前上线的设备。在右侧选择“车辆定位器”,可以看到绑定的所有设备。点击对应设备可以在地图上定位到每个设备的具体位置。至此,“设备地图“配置完成,点击页面右上角”√“保存配置。

5.5、发布上线

   回到WEB应用页面,可以看到地图上的设备定位已经正常显示,可以进行发布。在发布之前可以点击上图的“预览”查看应用的实际运行效果。实际运行效果如下图所示:

  这样我们就完成了一个车辆实时定位系统从设备端定位信息获取、物联网云平台开发及物联网应用开发全链路的开发。

如果想要学习车辆定位系统实验更详细的操作步骤,请参考“车辆定位系统详解”中的说明。

  • 5
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值