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

简介: 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开发板(ESP32乐鑫开发板、NodeMCU-32S或pyWiFi-ESP32)一台

GNSS定位模块-HT2828Z3G5L 一个

杜邦线若干

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个步骤完成云端设备的设定:


创建产品(设备模型)

定义产品功能(物模型)

创建设备及获取三元组

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脚本的详细说明请参考脚本内嵌的文字版注释


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


填写Wi-Fi名称及密码

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


# wifi连接的的ssid和pwd定义

wifiSsid = "请填写您的路由器名称"

wifiPassword = "请填写您的路由器密码"

修改设备端三元组

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




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


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



————————————————

版权声明:本文为CSDN博主「HaaS技术社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/HaaSTech/article/details/125716101

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
8天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
29 4
|
2月前
|
机器学习/深度学习 数据采集 供应链
Python实现深度学习模型:智能库存管理系统
【10月更文挑战第5天】 Python实现深度学习模型:智能库存管理系统
184 9
|
2月前
|
机器学习/深度学习 传感器 存储
使用 Python 实现智能地震预警系统
使用 Python 实现智能地震预警系统
122 61
|
23天前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
16天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
61 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
16天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
59 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
27天前
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
131 6
|
1月前
|
机器学习/深度学习 数据采集 算法框架/工具
使用Python实现智能生态系统监测与保护的深度学习模型
使用Python实现智能生态系统监测与保护的深度学习模型
86 4
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
74 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
28 2