2020-4-14 10:31:48 [显示全部楼层]
21185浏览
查看: 21185|回复: 40

[案例教程] 【NB-IoT 物联网开发板 TinkerNode】GPS追踪器

[复制链接]
hello,大家好。这次项目我们将用TinkerNode制作一个车载GPS跟踪器,学习和使用TinkerNode的GPS功能,并使用NB-IoT技术将GPS信息上传至阿里云平台,通过云端查询实时路径。

项目的主要目的:
①学习TinkerNode的GPS功能的使用
②学习阿里云平台GPS相关功能的使用

项目视频


为了方便大家进行学习,我们为大家提供了视频版本的项目教程.



元器件清单


TinkerNode NB-IoT开发板 x1


1.项目相关功能介绍

首先,我们先来了解一下本次项目中使用到TinkerNode的功能。

GPS
TinkerNode板载的BC20模组,除了NB-IoT功能外,还带有GNSS定位功能,可以识别GPS和BeiDou两种卫星定位系统。



在使用GPS功能前,需要按照产品wiki将GNSS的陶瓷天线安装在TinkerNode的GNSS天线接口上,如下图所示。




PS:在使用GNSS定位功能时,天线要朝向天空,且无遮挡。

2.阿里云平台配置

了解完GNSS功能后,我们开始项目的制作。和之前的项目相同,我们首先需要进行阿里云平台的配置,
然后为项目创建产品和设备,配置产品自定义功能(物模型)。
在物联网平台的页面左侧,选择IoT Studio -> 项目管理,点击新建项目,新建一个空白项目,项目名称为“GPS Tracker”,如下图所示。



创建完成后,我们会进入“GPS Tracker”项目的管理页面,如下图所示。



新建产品

在项目管理页面左侧的功能栏点击产品,在弹出的产品页面中选择新建产品,如下图所示。



产品的名称填写“GPS跟踪器”,所属品类选择“自定义品类”,其他选项默认,如下图所示。



完成后点击保存,此时已经在项目下创建了一个名为“
GPS跟踪器”的新产品。

功能定义

接下来,我们需要为产品添加功能,也叫作定义产品的“物模型”,物模型创建的过程就是通过协议描述产品的功能,定义产品有几组传感器数据,有什么控制功能,数据的类型是什么。
点击“
GPS跟踪器”产品后的查看,进入该产品的管理页面,如下图所示。



在这里我们要对产品进行功能定义,与之前的项目不同的是,除了自定义功能的方式外,本次项目还可以使用阿里云平台已经内置的标准功能,接下来我将会为大家分别介绍这两种方法。


①标准功能

阿里云平台为了方便客户的使用,内置了多种可以直接使用的标准功能,省去了繁杂的配置过程,节省了客户的开发时间。

选择功能定义 -> 标准功能 -> 添加标准功能 ,如下图所示



在窗口的搜索栏中,输入“地理位置”,选择任意一个标识符为“GeoLocation”的标准功能,选择后该功能会出现在右侧的已选功能栏,然后点击确定,如下图所示。



添加完成后,可以看到对应的产品功能已经出现在了产品的功能定义中,如下图所示。






②自定义功能


如果需要后续自行开发其他功能,想要了解向阿里云平台上传信息时的JSON协议格式,大家也可以进行自定义的功能配置。
PS:如果要进行自定义功能配置,需要删除刚刚创建的标准功能。

在“车载GPS跟踪器”这个项目中,我们需要向云端上传GNSS定位信息中的,经度、纬度和高度,并选择相应的坐标类型,共四个数据。由于TinkerNode与阿里云之间使用的是JSON进行通讯,所以在配置自定义功能时,数据类型要选择“struct(结构体)”。

在功能定义中选择自定义功能,点击添加自定义功能,如下图所示。




在弹出的窗口中填写相关信息,功能名称填写为“地理位置”,标识符填写为“GeoLocation”,数据类型选择“struct(结构体)”,如下图所示。





接下来,让我们为结构体添加JSON对象的参数信息。前面我们已经说过,我们需要上传四个GPS的信息,分别是经度、纬度、高度和坐标类型。
①经度
点击新增参数,按照下面的表格在弹出的窗口中填写对应信息,如下图所示。


参数名称经度
标识符Longitude
数据类型double(双精度浮点型)
取值范围-180~180
步长0.01
单位度/°






②纬度
按照下列表格,填写相关信息。注意纬度的取值范围是“-90~90”,完成后如下图所示。

参数名称纬度
标识符Latitude
数据类型double(双精度浮点型)
取值范围-90~90
步长0.01
单位度/°




③高度
按照下列表格,填写相关信息。


参数名称高度
标识符Altitude
数据类型double(双精度浮点型)
取值范围0~9999
步长0.01
单位米/m



④坐标系统
为了描述或确定位置,必须建立坐标系统,坐标只有存在于某个坐标系统才有实际的意义与具体的位置。以下是两种不同类型的坐标类型:
WGS_84:国际经纬度坐标标准。
GCJ_02:由国测局制定,是对地理位置进行首次加密后的一种坐标类型。

按照下列信息,填写相关信息。

参数名称坐标系统
标识符CoordinateSystem
数据类型enum(枚举型)


接下来我们需要为坐标系统增加两个枚举项,信息如下表所示。

参数值参数描述
1WGS_84
2GCJ_02




新增设备

完成了产品的功能定义之后,接下来我们需要为产品建立一个设备,这样就可以将TinkerNode连接到阿里云平台,并上传GPS信息了。
在项目管理页面左侧的功能栏点击设备,在弹出的设备页面中选择新增设备,如下图所示。




弹出的窗口中,产品选择“GPS跟踪器”,添加方式选择自动生成,设备数量填写1,点击提交,如下图所示。



3.硬件相关配置

代码调试

在附件中下载项目代码。

①上传数据格式

在于阿里云进行通信时,需要通过JSON格式进行通信,我们可以从阿里云的官方文档中,找到GPS功能的上传请求示例,如下图所示。



Arduino代码中,我们需要添加一些转义字符,并将相应的变量名填写到相应位置,最终效果如下列代码所示。
注意:在阿里云中只能使用,国际标准的定位坐标标准,即CoordinateSystem设定为1。

  1. "{
  2.   "id":"+ClientId+",
  3.   "params":{
  4.     ""+Identifier+"":{
  5.       "value":{
  6.         "Longitude":"+String(sGGNS.LongitudeVal,6)+",
  7.         "Latitude":"+String(sGGNS.LatitudeVal,6)+",
  8.         "Altitude":"+String(sGGNS.Altitude,6)+",
  9.         "CoordinateSystem":"+(String)1+"
  10.       }
  11.     }
  12.   },
  13.   "method":"thing.event.property.post"  
  14. }"
复制代码

在实际使用中,我们通过TinkerNode的NB-IoT功能向阿里云上传数据时,需要在代码中调用函数"myBC20.publish()"向指定的设备上传数据,实际使用时需要删除换行,代码如下所示。

  1. myBC20.publish(pubTopic, ("{"id":"+ClientId+","params":{""+Identifier+"":{"value":{"Longitude":"+String(sGGNS.LongitudeVal,6)+","Latitude":"+String(sGGNS.LatitudeVal,6)+","Altitude":"+String(sGGNS.Altitude,6)+","CoordinateSystem":"+(String)1+"}}},"method":"thing.event.property.post"  }"));
复制代码

②阿里云相关配置
我们需要根据阿里云平台的配置信息,在项目代码中做对应的修改。

在设备页面查看设备证书信息,填写在代码中对应位置。


  1. //配置证书信息
  2. String ProductKey = "Your_Product_Key";
  3. String ClientId = "12345";
  4. String DeviceName = "Your_Device_Name";
  5. String DeviceSecret = "Your_Device_Secret";
复制代码

在产品页面查看产品的功能标识符,填写在代码中对应位置。


  1. //配置产品标识符
  2. String Identifier = "Your_Identifier";
复制代码
在设备管理页面,查看物模型Topic信息,填写在代码中对应位置。物模型Topic是阿里云平台自动生成的,服务端和设备端通过Topic来实现消息通信。



  1. //需要发布和订阅的Topic
  2. const char * subTopic = "Your_sub_Topic";//****set
  3. const char * pubTopic = "Your_pub_Topic";//******post
复制代码

全部配置完成后,将代码上传至TinkerNode主控板。待代码上传完成后,就可以在阿里云平台上看到设备上传的位置信息了。

查看云平台信息
待代码上传完成后,进入GPS Tracker设备页面,可以看到设备已经是在线状态,点击查看,进入该设备的管理页面,如下图所示。




进入设备页面后,点击运行状态,点击查看数据,可以看到TinkerNode上传的GPS信息,如下图所示。



至此,我们已经将GPS信息上传到了云平台。接下来我们将会使用阿里云平台的IoT Studio中的可视化页面功能,将上传的GPS信息展示在地图上。

4.可视化页面制作

点击主页,新建一个Web应用。



名称填写“GPS地图”,点击确认,进入可视化开发界面。
点击左侧的组件,将“设备地图”拖拽到画布中,如下图所示。



点击地图组件,点击右侧的“编辑设备地图”,选择地图组件上显示的设备,如下图所示。



进入设备地图编辑器后,点击选择产品,在弹出的窗口中,选择“GPS跟踪器”产品,点击确定。


回到可视化开发界面,点击右上角的预览。在弹出的窗口,选择对应的设备,就可以在地图上查看定位信息了。



PS:GPS定位信息同步至地图时,并不完全准确。这是由于地图信息被加密导致的,这是保证国土信息安全的重要手段之一。

5.数据分析

阿里云平台还可以对上传的GPS数据进行数据分析。包括了历史轨迹、热力图和电子围栏等功能。
PS:由于阿里云平台中该部分功能处于频繁更新阶段,可能导致教程中一些接口位置与实际不同。

在物联网平台界面中,点击数据分析。



进入到数据分析的页面,在上方的菜单栏中选择“实验室”,可以在页面中看到“空间数据可视化”的功能,如下图所示。



在弹出的页面中,点击创建场景,数据来源选择“物联网平台”,完成后点击下一步,如下图所示。



接下来,场景名称填写为“车载GPS”,目标产品选择之前创建的“GPS追踪器”产品,如下图所示。



点击确定后,会自动进入空间数据可视化界面。在做左上角选择对应的设备,既可以看到实时的GPS定位信息,如下图所示。



为了测试阿里云平台的历史轨迹信息,我将GPS追踪器安装在了汽车上。在出去跑了一圈之后,再打开可视化页面。点击右上角的历史轨迹,选择对应的时间段和设备,选择“平滑轨迹线”,云平台会将轨迹点同步到对应的道路上。



配置完成后就可以看到选择时间段的历史轨迹,点击右上角的播放箭头,即可观看轨迹动图。



NB_Prj4.ino

2.27 KB, 下载次数: 7676

svw  初级技匠

发表于 2020-8-27 17:31:13

回帖奖励 +5 创造力

有个重要信息,向dfrobot报告下。

阿里云现在1分钟限制5次连接,连接过于频繁会被阿里云重置。

而例程里面的代码:
  myBC20.getCLK();  // Get CLK from BC20
  myBC20.getQGNSSRD();
  myBC20.loop();
  myBC20.publish(pubTopic, ("{\"id\":"+ClientId+",\"params\":{\""+Identifier+"\":{\"value\":{\"Longitude\":"+String(sGGNS.LongitudeVal,6)+",\"Latitude\":"+String(sGGNS.LatitudeVal,6)+",\"Altitude\":"+String(sGGNS.Altitude,6)+",\"CoordinateSystem\":"+(String)2+"}}},\"method\":\"thing.event.property.post\"  }"));
  Serial.println("Data is published to cloud.");
  delay(10000);

是默认10000ms的,建议改到12000ms以上。

否则只会间歇性在线。
回复

使用道具 举报

Godlz  学徒

发表于 2021-4-5 15:38:16

代码编译后显示这个错误,咋回事呢

F:\BaiduNetdiskDownload\sketch_apr05a\NB_Prj4.ino: In function 'void setup()':
NB_Prj4:37:6: error: redefinition of 'void setup()'
void setup(){
      ^
F:\BaiduNetdiskDownload\sketch_apr05a\sketch_apr05a.ino:1:6: note: 'void setup()' previously defined here
void setup() {
      ^
F:\BaiduNetdiskDownload\sketch_apr05a\NB_Prj4.ino: In function 'void loop()':
NB_Prj4:67:6: error: redefinition of 'void loop()'
void loop(){
      ^
F:\BaiduNetdiskDownload\sketch_apr05a\sketch_apr05a.ino:6:6: note: 'void loop()' previously defined here
void loop() {
      ^
exit status 1
redefinition of 'void setup()'
回复

使用道具 举报

svw  初级技匠

发表于 2020-10-16 11:20:43

每过一段时间,设备被踢,日志显示如下内容。
{"Content":"offline, lastActiveTime=1602816601849","Reason":"Keepalive timeout after 120sec, ip:36.113.19.208","clientId":"Tinker_A"}

阿里云的回答是:
超过保活时间,设备没有发心跳包给云端,云端判定设备下线了
Keep Alive  Connect指令中需包含Keep Alive(保活时间)。保活心跳时间取值范围为30至1200秒。
如果心跳时间不在此区间内,物联网平台会拒绝连接。建议取值300秒以上。如果网络不稳定,将心跳时间设置高一些。

这个需要在连接段设置。

请问,代码段要做哪些设置呢?
回复

使用道具 举报

wangyirun  初级技匠

发表于 2020-4-14 15:03:22

回帖奖励 +5 创造力

这个好,顶一个
回复

使用道具 举报

vany5921  中级技师

发表于 2020-4-14 21:55:34

回帖奖励 +5 创造力

我也在写,不过是通过百度鹰眼追踪
回复

使用道具 举报

rzyzzxw  版主

发表于 2020-4-15 08:45:08

回帖奖励 +5 创造力

教程详细,板子功能也强大
回复

使用道具 举报

Roboxes  见习技师

发表于 2020-4-16 14:49:41

回帖奖励 +5 创造力

大佬呀,学习了
回复

使用道具 举报

teu  高级技师

发表于 2020-4-16 15:20:57

回帖奖励 +5 创造力

666  好学习了
回复

使用道具 举报

gada888  版主

发表于 2020-4-17 09:08:20

回帖奖励 +5 创造力

这个满实用的
回复

使用道具 举报

DFSyHoEgu3S  学徒

发表于 2020-4-19 17:16:20

回帖奖励 +5 创造力

为了创造点
回复

使用道具 举报

小米创客+  初级技师

发表于 2020-4-20 11:55:05

回帖奖励 +5 创造力

好实用,效果非常不错
回复

使用道具 举报

1528  见习技师

发表于 2020-4-21 17:45:49

回帖奖励 +5 创造力

这个必须学习一下.感谢分享!
回复

使用道具 举报

李济慈  初级技师

发表于 2020-4-21 20:34:45

回帖奖励 +5 创造力

厉害
回复

使用道具 举报

506798599  学徒

发表于 2020-4-25 10:19:40

回帖奖励 +5 创造力

购买了TinkerNode,测试 这个NB-IOT的通讯功能不起作用,一直处于连接状态,是因为没有信号还是sim卡有问题呢。
回复

使用道具 举报

幻想家  学徒

发表于 2020-4-25 18:49:58

回帖奖励 +5 创造力

前辈ClientID、subTopic、pubTopic分别是具体哪个呀 gps那个 按照教程我的设备没有在线
回复

使用道具 举报

DFSH_Faith  NPC
 楼主|

发表于 2020-4-26 10:10:32

506798599 发表于 2020-4-25 02:19
购买了TinkerNode,测试 这个NB-IOT的通讯功能不起作用,一直处于连接状态,是因为没有信号还是sim卡有问题 ...

可以找商城的客服问一下,有可能是所在地区没有NB-IoT信号
回复

使用道具 举报

DFSH_Faith  NPC
 楼主|

发表于 2020-4-26 10:16:58

幻想家 发表于 2020-4-25 10:49
前辈ClientID、subTopic、pubTopic分别是具体哪个呀 gps那个 按照教程我的设备没有在线 ...

这一部分可以参考第一期里面对应的内容,https://mc.dfrobot.com.cn/thread-303693-1-1.html
回复

使用道具 举报

幻想家  学徒

发表于 2020-4-28 16:16:21

DFSH_Faith 发表于 2020-4-26 10:16
这一部分可以参考第一期里面对应的内容,https://mc.dfrobot.com.cn/thread-303693-1-1.html ...

前辈,我的设备状态一直是“”未激活”,我查帖子也没有相关的激活教程,您能指导我一下么,我的代码应该没问题
回复

使用道具 举报

DFSH_Faith  NPC
 楼主|

发表于 2020-4-29 10:26:59

幻想家 发表于 2020-4-28 08:16
前辈,我的设备状态一直是“”未激活”,我查帖子也没有相关的激活教程,您能指导我一下么,我的代码应该 ...

未激活是因为设备还没有第一次连接至云平台,设备初次连接至云平台后,即可自动激活
回复

使用道具 举报

teu  高级技师

发表于 2020-5-8 15:07:32

厉害,学习了。
回复

使用道具 举报

睿睿  见习技师

发表于 2020-8-3 13:27:57

回帖奖励 +5 创造力

666 厉害
回复

使用道具 举报

hxm3000  学徒

发表于 2020-8-9 10:53:13

回帖奖励 +5 创造力

我这里老是出现这个问题:
板子是TinkerNode NB-IOT的,

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

有什么办法吗?网上说按住“boot”,板上没有
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail