设备接入 IoTDA设备接入 IoTDA

文档首页> 设备接入 IoTDA> 最佳实践> 设备接入> 基于NB-IoT小熊派开发智慧路灯
更新时间:2021/07/08 GMT+08:00
分享

基于NB-IoT小熊派开发智慧路灯

场景说明

智慧路灯是城市智能化道路上重要一环,智慧路灯的实施具有节约公共照明能耗、减少因照明引起的交通事故等多种社会意义。路灯也是大家在日常生活中可以强烈感知到的公共设施,更易理解其智能化的场景。

在该文档中,我们基于华为一站式开发工具平台(VS code工具IoTlink插件),从设备(小熊派开发套件)、平台(IoTDA华为物联网平台)、端到端构建一款智慧路灯解决方案样例,带您体验十分钟快速上云。实现智慧路灯检测并上报光照强度,显示在IoTDA控制台,并在IoTDA控制台远程控制LED灯开关的功能。

开发环境

  • 硬件:小熊派BearPi-IoT开发套件(包含NB卡、NB模组、智慧路灯功能模块、USB数据线等),您可以前往华为云市场购买。
  • 软件:VScode,IoT Link插件、华为云(已开通设备接入服务)、win7及以上版本的64位操作系统(本文以windows 10 64-bit系统调试)。

整体流程

智慧路灯案例的端到端整体流程如下图所示。

该场景主要描述的是设备可以通过LWM2M协议(NB卡)与物联网平台进行交互,应用侧可以查看设备侧属性变化,也可以给设备侧下发命令。

小熊派开发板简介

开发板在物联网系统架构中属于感知设备,该类设备通常由传感器、通信模组、芯片以及操作系统组成。为增加开发板的可扩展性,小熊派开发板没有采用传统的板载设计,而是使用了可更换传感器扩展板以及可更换通信模组扩展板设计,通信模组是数据传输的出入口,常用的通信模组包括NB-IoT,Wifi以及4G等,芯片是设备的主控设备,该开发板内置了一个低功耗的STM32L431单片机作为主控芯片,即MCU。操作系统使用的是华为的LiteOS操作系统,其提供了丰富的端云互通组件。

为了便于开发调试,如图1所示,该开发板板载了2.1版本的ST-Link,它具有在线调试烧录,拖拽下载以及虚拟串口等功能。开发板中间板载一块分辨率为240 * 240的LCD屏幕,其主要用于显示传感器数据以及调试日志。LCD屏幕下方是主控芯片。

开发板右上角具有一个拨码开关,将其拨至左侧AT-PC模式,通过电脑端的串口助手,发送AT指令调试通信模组。右侧AT-MCU模式,通过MCU发送AT指令与通信模组进行交互,将采集到的传感器数据通过通信模组发送到云端。

图1 小熊派开发板

硬件连接

  1. 将NB卡插入到NB-IoT扩展板的SIM卡卡槽,确保插卡的时候卡的缺口朝外插入,如图1所示。
  2. 将光敏传感器以及NB-IoT扩展板插入到开发板上,注意安装方向,然后用USB数据线将小熊派开发板与电脑连接起来。显示屏有显示,电源灯被点亮,说明开发板通电成功。

安装IoT Link Studio插件

IoT Link Studio是针对IoT物联网端侧开发的IDE环境,提供了编译、烧录、调试等一站式开发体验,支持 C、 C++、汇编等多种开发语言,让您快速、高效地进行物联网开发。

  1. 以win10为例,获取电脑的系统配置:在运行窗口中输入pc,然后单击“属性”,查看系统配置,因为后续安装软件要选择操作系统。

  2. 访问 这里 ,根据您电脑系统配置,下载匹配的Visual Studio Code并安装。(本文以windows 10 64-bit系统Visual Studio Code为例)。

    注:Visual Studio Code不支持苹果Mac系统。

  3. 安装成功后,打开VSCode 插件应用商店,搜索 IoT Link 找到IoT Link,然后单击安装。

  4. 首次启动配置。

    IoT Link Studio 首次启动时会自动从网络下载最新的SDK包以及gcc依赖环境,请确保您的网络可用。安装过程中请不要关闭窗口,耐心等待。安装完成后重启VSCode使插件生效。

    若您的网络需要配置代理,请在VSCode主页,选择左下角-设置-应用程序-代理服务器,在Proxy Support下拉框中选择“on”

    如果仍然无法访问网络导致自动下载SDK失败,可从手动下载SDK,下载完成后解压至默认安装路径 C:\Users\用户名\.iotlink\sdk,(如果安装路径有更改,请找到VS Code的安装路径,把手动下载的“IoT_LINK”解压后拷贝到\.iotlink\sdk下)。

配置IoT link Studio工程

  1. 单击VSCode底部工具栏的“Home”。

    • Home:管理IoT Link工程;
    • Serial:输入AT指令检查开发板状态;
    • Build:编译示例代码(步骤2后可见);
    • Download:把编译后的代码烧录到MCU(步骤2后可见)。

  2. 在弹出界面中单击“创建 IoT 工程”,输入工程名称,工程目录,并选择开发板的硬件平台和示例工程模板。

    • 工程名称:自定义,如QuickStart。
    • 工程目录:可以使用工具安装的默认路径,也可以选择系统盘以外的其他盘,如D:\。
    • 硬件平台:当前提供的demo只适配STM32L431_BearPI硬件平台,请选择STM32L431_BearPI。
    • 示例工程:本示例中,我们以智慧路灯为例,请选择oc_streetlight_template,否则烧录的demo样例和在控制台定义的产品模型不匹配,无法上报数据。如果您需要适配智慧烟感等其他场景,请选择对应的oc_smoke_template demo样例。

  3. 单击“确定”,导入完成。

编译并烧录代码

由于提供的demo样例中已配置好和华为云物联网平台的对接信息,您可以直接编译(代码不用做任何修改),并烧录到小熊派开发板MCU,节省开发时间。

  1. 单击VSCode底部工具栏的“Build”,等待系统编译完成。编译成功后,界面显示“编译成功”

  2. 使用USB数据线,将小熊派开发与电脑连接,开发板右上角的拨测开关拨到右侧“AT-MCU模式”
  3. 单击VSCode底部工具栏的“Download”,等待系统烧录完成。烧录成功后,界面显示“烧录成功”

    如果显示烧录失败,可能是开发板没有驱动导致与电脑无法串口通信,请参考2检查ST-Link驱动是否安装成功,如果驱动未安装,则参考这里下载并安装ST-Link驱动。

  4. (可选)安装ST-Link驱动。

    1. 访问ST官网,下载ST-Link驱动,或者直接使用提供的驱动.zip包。双击stlink_winusb_install.bat文件进行自动安装。(本文以Windows10-64bit ST-Link 2.0.1为例)。

      注:您也可以使用适配您系统版本的exe文件进行安装。

    2. 打开PC设备管理器可查看对应的驱动是否安装成功。若下图所示,表明驱动安装成功。

使用AT指令定位模组通信问题

IoT Link在与物联网平台连接使用时,可使用AT指令快速定位模组与云端连通性问题,提高开发效率。本节以“小熊派开发板”为例,介绍如何使用AT指令检测通信模组常见问题,如设备无法上线,数据上报不成功等。

  1. 小熊派开发板和电脑已正常连接(确保驱动已安装),并将开发板右上角的拨测开关切换到AT-PC模式。
  2. 单击VSCode底部工具栏的“Serial”。

  3. 选择2中查看的端口号,波特率设置为9600,然后单击“打开”。

  4. 输入“AT+CGATT?”,然后单击“发送”,若返回“+CGATT:1”,表示网络附着成功(附着成功代表NB-IoT联网正常),返回“+CGATT:0”表示网络附着失败(附着失败代表NB-IoT联网异常),请查看SIM卡是否插入正确,或联系运营商检查网络状态。

    使用AT指令检测完模组通信后,请将拨测开关拨到AT-MCU模式,以便完成控制台的开发后,将采集到的传感器数据通过通信模组发送到平台。

    PC模式是开发板与电脑串口通信,AT指令读写开发板的状态等数据;MCU模式是开发板通过模组上插的SIM连接网络,实现NB-IoT通信。

  5. “AT+CSQ<CR>”指令用于检查网络信号强度和SIM卡情况。输入“AT+CSQ<CR>”,然后单击“发送”,返回 “+CSQ:**,##” 。其中**应在 10 到 31 之间,数值越大表明信号质量越好,##为误码率,值在 0 到 99 之间。若返回的值不在这个范围,应检查天线或 SIM 卡是否正确安装。

注:本文仅列举两个通用的AT指令,用于检测模组的网络状况。更多AT指令,您可以参考小熊派模组的说明书,进行调测。

控制台操作概览

在完成实体设备硬件连接和代码编译烧录之后,我们需要在设备接入服务控制台创建产品、定义产品模型、开发编解码插件和注册设备。

  • 创建产品:在物联网平台上规定好某一款产品的协议类型、数据格式、厂商名称、设备类型。此处我们需要按照智慧路灯的特征,在控制台创建智慧路灯的产品。
  • 定义产品模型:产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的属性信息。此处,我们需要在控制台上,定义开关灯控制、光照强度、信号质量等。
  • 编解插件开发:编解码插件是供物联网平台调用,完成二进制格式和JSON格式相互转换的。它将设备上报的二进制数据解码为JSON格式供应用服务器“阅读”,将应用服务器下行的JSON格式命令编码为二进制格式数据供终端设备(UE)“理解执行”。智慧路灯的数据格式是二进制,因此我们需要开发编解码插件,让物联网能够理解智慧路灯上报的数据,智慧路灯也能理解物联网平台下发的命令。
  • 注册设备:将小熊派智慧路灯注册到物联网平台。

创建产品

某一类具有相同能力或特征的设备的集合称为一款产品。除了设备实体,产品还包含该类设备在物联网能力建设中产生的产品信息、产品模型(Profile)、编解码插件等资源。下面,我们按照小熊派智慧路灯的基本特征,在控制台上创建智慧路灯产品。

  1. 访问设备接入服务,单击“立即使用”进入设备接入控制台。
  2. 选择左侧导航栏的“产品”,单击右上角下拉框,选择新建产品所属的资源空间。
  3. 单击右上角的“创建产品”,创建一个基于CoAP协议的产品,参考下表填写参数后,单击“立即创建”,完成产品的创建。

    基本信息

    所属资源空间

    选择您需要归属到的资源空间

    产品名称

    自定义,如“BearPi_StreetLight”

    协议类型

    选择“LwM2M/CoAP”

    数据格式

    选择“二进制码流”

    厂商名称

    自定义,如“BearPi”

    模型定义

    选择模型

    不勾选,将在后续步骤上传已开发好的产品模型。

    所属行业

    智慧城市

    设备类型

    StreetLight

  4. 产品创建成功后,单击产品进入产品界面,进行后面操作。

上传产品模型

产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备的功能。我们已提供开发好的产品模型,帮助您快速体验上云流程,如果您想体验产品模型的开发流程,可参考开发产品模型

操作步骤

  1. 在产品详情“模型定义”页面,单击“上传模型文件”。
  2. 在弹出的页面中,上传提供的产品模型(本示例的产品模型),然后单击“确认”。

编解码插件开发

上一步,我们在控制台上定义了产品所具备的功能,包括设备上报的属性和能理解的命令。由于智慧路灯的数据格式是二进制,而物联网平台的数据格式为JSON格式。因此我们需要开发编解码插件,让物联网能够理解智慧路灯上报的数据,智慧路灯也能理解物联网平台下发的命令。

本文提供离线导入编解码插件方式,帮助您快速体验上云流程,如果您想体验编解码插件开发流程,可参考开发编解码插件

  1. 在产品详情插件开发页面,选择“离线开发”,单击加载图标,上传提供的编解码插件(本示例的编解码插件)。

  2. 单击“上传插件”,单击“确认”,完成编解码插件的导入。

注册设备

本文介绍集成NB模组设备的注册方法,将小熊派智慧路灯在物联网平台注册。

  1. 在产品详情页面,选择“在线调试”,单击“新增测试设备”,此处新增的是非安全的NB-IoT设备。
  2. 在新增测试设备页面,选择“真实设备”,完成设备参数的填写后,单击“确定”

    • 设备名称:自定义。
    • 设备标识码:设备的IMEI号,用于设备在接入物联网平台时携带该标识信息完成接入鉴权,可在NB模组上查看。您也可以将拨测开关拨到AT-PC模式,选择STM的端口,波特率设置为9600,输入指令“AT+CGSN=1”获取IMEI号。

      注:获取IMEI注册完设备后,需要将开发板的拨测开关拨到“AT-MCU”模式,因为开发板在MCU模式下才会通过NB卡连接网络。

    • 设备注册方式:不加密。

  3. 设备创建成功,可在页面看到创建的设备。

数据上报

平台和开发板建立连接后,根据烧录至开发板的代码,小熊派智慧路灯每隔2秒(上报频率可根据业务需要在demo中自行设置)上报光照传感器数据。您可以通过用手遮挡光线改变光照强度,查看设备上报给平台的光照强度数据的实时变化。

注:先检查确认开发板的拨测开关是“AT-MCU”模式

  1. 登录设备接入服务控制台,选择 设备 > 所有设备
  2. 选择此处注册的设备,单击“查看”进入设备详情,查看上报到平台的数据。

命令下发

  1. 登录设备接入服务控制台,选择这里创建的产品,单击产品进入产品界面。
  2. 选择“在线调试”,单击这里注册的设备进入调试页面。
  3. 设置命令参数后,单击“立即发送”。

  4. 小熊派板子灯被点亮,下发OFF命令后,灯熄灭。

至此,基于NB-IoT小熊派开发智慧路灯的最佳实践,端到端流程就全部体验完成了。

更多参考

  • 开发产品模型

    在产品详情“模型定义”页面,单击“自定义模型”,配置产品的服务。

    产品模型设计思路:

    表1 设备服务列表

    服务类型(ServiceID)

    服务描述

    Button

    实时按键检测

    LED

    LED灯控制

    Sensor

    实时检测光照强度

    Connectivity

    实时检测信号质量

    服务能力如下表所示。

    表2 Button

    能力描述

    属性名称

    数据类型

    数据范围

    属性列表

    toggle

    int

    0 ~ 65535

    表3 LED命令列表

    能力描述

    命令名称

    命令字段

    字段名称

    类型

    数据长度

    枚举

    命令列表

    Set_LED

    下发命令

    LED

    string

    3

    ON、OFF

    响应命令

    Light_state

    string

    3

    ON、OFF

    表4 Sensor

    能力描述

    属性名称

    数据类型

    数据范围

    属性列表

    luminance

    int

    0 ~ 65535

    表5 Connectivity

    能力描述

    属性名称

    数据类型

    数据范围

    属性列表

    SignalPower

    int

    -140 ~ -44

    ECL

    int

    0 ~ 2

    SNR

    int

    -20 ~ 30

    CellID

    int

    0 ~ 65535

    • 新增服务类型Button
      1. 进入“新增服务”页面,填写“服务ID”“服务类型”“服务描述”,单击“确认”。
        • “服务ID”:Button
        • “服务类型”:建议和服务ID保持一致
        • “服务描述”:实时按键检测
      2. 在“Button”的下拉菜单下单击“添加属性”,填写相关信息,单击“确认”。
        • “属性名称”:toggle
        • “必选”:勾选
        • “数据类型”:int(整型)
        • “访问权限”:可读、可写
        • “取值范围”:0~65535
        • “步长”:0
        • “单位”:不填写
    • 新增服务类型LED
      1. 在“模型定义”下单击“添加服务”,填写“服务ID”“服务类型”“服务描述”,单击“确认”。
        • “服务ID”:LED
        • “服务类型”:建议和服务ID保持一致
        • “服务描述”:LED灯控制
      2. 在“LED”的下拉菜单下单击“添加命令”,输入命令名称“Set_LED”。

      3. 在“新增命令”弹框,分别单击“新增输入参数”“新增响应参数”,填写相关信息后,单击“确认”。
        图2 新增输入参数LED

        图3 新增响应参数Light_state

    • 新增服务类型Sensor
      1. 在“模型定义”下单击“添加服务”,填写“服务ID”“服务类型”“服务描述”,单击“确认”。
        • “服务ID”:Sensor
        • “服务类型”:和服务ID保持一致
        • “服务描述”:实时检测光照强度
      2. 在“Sensor”的下拉菜单下单击“添加属性”,填写相关信息,单击“确认”。
        • “属性名称”:luminance
        • “必选”:勾选
        • “数据类型”:int(整型)
        • “访问权限”:可读、可写
        • “取值范围”:0~65535
        • “步长”:不填写
        • “单位”:lux
    • 新增服务类型Connectivity
      1. 在“模型定义”下单击“添加服务”,填写“服务ID”“服务类型”“服务描述”,单击“确认”。
        • “服务ID”:Connectivity
        • “服务类型”:建议和服务ID保持一致
        • “服务描述”:实时检测信号质量
      2. 在“Connectivity”的下拉菜单下依次单击“添加属性”,分别添加SignalPower,ECL,SNR,CellID属性,填写相关信息,单击“确认”。
        图4 新增SignalPower属性
        图5 新增ECL属性
        图6 新增SNR属性
        图7 新增CellID属性
  • 开发编解码插件
    1. 在产品详情插件开发页面,选择“图形化开发”,单击“图形化开发”。
    2. 在“在线开发插件”区域,单击“新增消息”。

      请按照本文档提供的操作开发编解码插件,确保添加字段的顺序和本文档提供的顺序保持一致。

    3. 新增消息Report_Connectivity,配置示例如下:
      • 消息名:Report_Connectivity
      • 消息类型:数据上报
      • 添加响应字段:是
      • 响应数据:AAAA0000(默认)

      1. 在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。

      2. 单击“添加字段”,添加SignalPower字段,填写相关信息后,单击“确认”。
        • 名字:SignalPower
        • 数据类型:int16s(16位有符号整型)

      3. 单击“添加字段”,添加ECL字段,填写相关信息后,单击“确认”。
        • 名字:ECL
        • 数据类型:int16s(16位有符号整型)

      4. 单击“添加字段”,添加SNR字段,填写相关信息后,单击“确认”。
        • 名字:SNR
        • 数据类型:int16s(16位有符号整型)

      5. 单击“添加字段”,添加CellID字段,填写相关信息后,单击“确认”。
        • 名字:CellID
        • 数据类型:int32s(32位有符号整型)

        完成消息Report_Connectivity的配置后,单击“确认”。

    4. 新增消息Report_Toggle,配置示例如下:
      • 消息名:Report_Toggle
      • 消息类型:数据上报
      • 添加响应字段:是
      • 响应数据:AAAA0000(默认)

      1. 在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。

      2. 单击“添加字段”,添加toggle字段,填写相关信息后,单击“确认”。
        • 名字:toggle
        • 数据类型:int16u(16位无符号整型)

        完成消息Report_Toggle的配置后,单击“确认”。

    5. 新增消息Report_Sensor,配置示例如下:
      • 消息名:Report_Sensor
      • 消息类型:数据上报

      1. 在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。

      2. 单击“添加字段”,添加data字段,填写相关信息后,单击“确认”。
        • 名字:data
        • 数据类型:int16u(16位无符号整型)

        完成消息Report_Sensor的配置后,单击“确认”。

    6. 新增消息Set_LED,配置示例如下:
      • 消息名:Set_LED
      • 消息类型:命令下发
      • 添加响应字段:是

      1. 在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。

      2. 单击“添加字段”,勾选“标记为响应标识字段”,添加响应标识字段 mid,然后单击“确认”。

      3. 单击“添加字段”,添加“LED”字段,然后单击“确认”。
        • 名字:LED
        • 数据类型:string
        • 长度:3

      4. 在“新增消息”页面,单击“添加响应字段”,勾选“标记为地址域”,添加地址域字段 messageId,然后单击“确认”。
      5. 单击“添加响应字段”,勾选“标记为响应标识字段”,然后单击“确认”。
      6. 单击“添加响应字段”,勾选“标记为命令执行状态字段”,添加命令执行状态字段 errcode,然后单击“确认”。

      7. 单击“添加响应字段”,添加Light_state响应字段,填写相关信息,单击“确认”。
        • 名字:Light_state
        • 数据类型:string
        • 长度:3

        完成消息 Set_LED 的配置后,单击“确认”。

    7. 拖动右侧“设备模型”区域的属性字段、命令字段和响应字段,与数据上报消息、命令下发消息和命令响应消息的相应字段建立映射关系。

    8. 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。

分享:

    相关文档

    相关产品