DFSyBM3-i4u 发表于 2021-11-26 18:23:22

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

通过之前的项目学习,相信大家已经对TinkerNode NB-IoT物联网开发板(以下简称TinkerNode)有了一定的了解。这次项目我们将用TinkerNode制作一个车载GPS跟踪器,学习和使用TinkerNode的GPS功能,并使用NB-IoT技术将GPS信息上传至阿里云平台,通过云端查询实时路径。

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



**项目视频**

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

https://www.bilibili.com/video/BV1Bt4y127JJ



**元器件清单**

(https://www.dfrobot.com.cn/goods-2580.html)




**1.项目相关功能介绍**

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

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


在使用GPS功能前,需要按照[产品wiki](https://wiki.dfrobot.com.cn/_SKU_DFR0530_TinkerNode_NB-IoT_物联网开发板_V1_0)将GNSS的陶瓷天线安装在TinkerNode的GNSS天线接口上,如下图所示。

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022633r2tl2b2mwlz2dzkk.jpg)

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

**2.阿里云平台配置**

了解完GNSS功能后,我们开始项目的制作。和之前的项目相同,我们首先需要进行阿里云平台的配置,然后为项目创建产品和设备,配置产品自定义功能(物模型)。

打开[阿里云-上云就上阿里云 (aliyun.com)](https://www.aliyun.com/?spm=5176.19763250.J_8058803260.1.5ef77506Jffyw0),选择产品->物联网IOT->物联网应用开发。



在物联网平台的页面左侧,选择**IoT Studio** -> **项目管理**,点击**新建项目**,新建一个空白项目,项目名称为“**GPSTracker**”,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/65a4a6ff0443224e1d975ae1d0c8b155.png)



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



**新建产品**

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022639qlp1s97p12hipep1.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022639hzzhige75ii7mitu.png)

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

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/fe67e3330a8dac3d17dbe9dfab01a183.png)

**功能定义**

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

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/a4ff65559d98a2db2ecffa853abb1a09.png)

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

①标准功能

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

选择**功能定义**,**编辑草稿**,**添加标准功能** ,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/99058e82c709c5f5fc19edf9b0a6acf2.jpg)

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/83d566cd3903e367fff2c7bd77086a20.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022640vlpypuyl0hg7oolg.jpg)

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


![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/a4ff65559d98a2db2ecffa853abb1a09.png)


②自定义功能


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

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

在编辑草稿中,点击添加自定义功能,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/47c27fcec4e76cf98ba597ac3fd831df.jpg)


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


![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/f75d7b97378b6feb128e2ca29c0ec598.jpg)

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



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




![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085933tcvqr1z7v6e6aboh.jpg)


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



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


![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085934niofooojincq0c3d.jpg)


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



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


![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/093116mmls66h6dmelr8y4.jpg)

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

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



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



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



| 参数值 | 参数描述 |
| ------ | -------- |
| 1      | WGS_84   |
| 2      | GCJ_02   |



![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/093116nka50vi0qv2t2fii.jpg)

**新增设备**

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

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/6a4d3e6d0c4d61a54a3e4d2239574ace.jpg)

弹出的窗口中,产品选择“**GPS跟踪器**”,设置DeviceName为**device1,**点击提交,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/1438abbf63cda23494244d0f39a29274.png)

**3.硬件相关配置**

**代码调试**

在附件中下载项目代码。

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085930ssa4q0n140k6sv1a.jpg)

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



```
"{
"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"
}"复制代码
```


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



```
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"}"));复制代码
```


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

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085932vrov2j8t7ktsjf77.jpg)

```
//配置证书信息
String ProductKey = "Your_Product_Key";
String ClientId = "12345";
String DeviceName = "Your_Device_Name";
String DeviceSecret = "Your_Device_Secret";复制代码
```


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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085931je1bzwb2b2x5mkdm.jpg)

```
//配置产品标识符
String Identifier = "Your_Identifier";复制代码
```

在设备管理页面,查看物模型Topic信息,填写在代码中对应位置。物模型Topic是阿里云平台自动生成的,服务端和设备端通过Topic来实现消息通信。

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085931p47ls13h3s7f24rc.jpg)



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

**注意替换Topic信息中的device**

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/044f806e521b7cab5f98ce5f376dc767.jpg)



!(https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/eeb18173b30b113c185963ca54943f3b.jpg)

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

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

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/bd403ba221bce533c0ca1f0f5a148396.jpg)

进入设备页面后,点击**物模型数据**,点击**查看数据**,可以看到TinkerNode上传的GPS信息,如下图所示。

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/be4e8318760e1b7e9f77685cb2243023.jpg)

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022635aqyddpmyq2nhd2z3.jpg)

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

**4.可视化页面制作**

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

![](https://img.dfrobot.com.cn/wiki/605d8c0caa613609f2707b8d/335b30e2ee51e36ddf82aea44ccb902d.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022634uag4uvbewv3vq3bt.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022634aqxo1sabdqxdqgao.jpg)

进入设备地图编辑器后,点击选择产品,在弹出的窗口中,选择“GPS跟踪器”产品,点击确定。
![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/022640phq3amme4kgbbej3.png)

回到可视化开发界面,点击右上角的**预览。**在弹出的窗口,选择对应的设备,就可以在地图上查看定位信息了。
![](https://mc.dfrobot.com.cn/data/attachment/album/202004/13/085930i5iyy7fju55dvyj5.jpg)


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

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

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/091831xrn4t8r84vmzrjcm.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/085412wh9do1lhkykbblkd.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/085411sjk8h5kl55hp5j5f.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/085411oa11d8bdc8c8b8q8.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/085411wdpfm9yuyyaaop41.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/085412b5c6w3sod85czdko.jpg)

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

![](https://mc.dfrobot.com.cn/data/attachment/album/202004/16/083217fgnqemi4c1r00gze.gif)

老苏 发表于 2022-8-24 14:03:32

设备显示在线,但是地图上看不到位置,,也没有其他数据,,,咋回事?????????在吗

DFSyBM3-i4u 发表于 2022-8-24 14:42:59

老苏 发表于 2022-8-24 14:03
设备显示在线,但是地图上看不到位置,,也没有其他数据,,,咋回事?????????在吗 ...

先创建产品,再创建设备,调试数据正常后,再建立网页,添加gps数据

DFSyBM3-i4u 发表于 2022-10-28 15:59:39

老苏 发表于 2022-8-24 14:03
设备显示在线,但是地图上看不到位置,,也没有其他数据,,,咋回事?????????在吗 ...

在户外才有数据

XiaoLio 发表于 2023-4-4 15:46:39

现在阿里云Iot Studio用不了了,体验版不能发布可视化页面,有办法结局吗?

DFSyBM3-i4u 发表于 2023-4-6 10:07:03

XiaoLio 发表于 2023-4-4 15:46
现在阿里云Iot Studio用不了了,体验版不能发布可视化页面,有办法结局吗?

你登录这个看看能不能登上去   https://studio.iot.aliyun.com/?spm=a2c4g.11186623.0.0.3a186fb6JYJyNy
页: [1]
查看完整版本: [更新教程]【NB-IoT 物联网开发板 TinkerNode】GPS追踪器