文档首页/ IoT物联网/ 最佳实践/ 设备接入/ 基于小熊派开发智慧路灯(联通用户专用)
更新时间:2023-04-18 GMT+08:00
分享

基于小熊派开发智慧路灯(联通用户专用)

非联通用户请查看设备接入服务

场景说明

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

在该文档中,我们基于华为一站式开发工具平台—开发中心,从设备、平台、应用端到端构建一款智慧路灯解决方案样例,带您体验十分钟快速上云。

方案设计

该款智慧路灯通过LWM2M协议接入物联网平台,具备如下能力:
  • 支持上报光照强度。
  • 支持开/关控制命令。
  • 支持上报灯光状态信息。

该款智慧路灯的产品能力模型如下所示:

产品信息

设备类型

StreetLight

-

设备型号

StreetLight01

-

厂商名称

TestManuName

-

接入协议

CoAP

-

数据格式

二进制码流

-

服务数据

服务1

服务名称

Sensor

属性

名称:luminance

数据类型:int

最小值:0

最大值:65535

步长:1

单位:lux

访问模式:RE

是否必选:是

服务2

服务名称

LED

命令

命令名称:Set_Led

  • 下发命令字段

    名称:led

    数据类型:string

    长度:3

    枚举值:ON,OFF

    是否必选:是

  • 响应命令字段

    名称:light_state

    数据类型:string

    长度:3

    枚举值:ON,OFF

    是否必选:是

前期准备

  • 开发板:小熊派开发板(含NB卡、NB模组、智慧路灯功能模块等)
  • 配件:数据线
  • IDE:IoT Studio
  • 平台:华为云账号(开通开发中心权限)

硬件连接

创建项目

在进行开发之前,开发者需要基于行业属性,创建一个独立的项目。在项目空间内,开发者可以开发相应的物联网产品和应用。

  1. 访问并登录华为云,打开“设备管理”服务产品首页,单击“开发中心”,进入物联网平台管理控制台,然后单击“进入开发中心”,自动跳转登录到开发中心。
  2. 在开发中心首页,单击“新建项目”

    如果初次登录开发中心,新建项目时会提示配置厂商信息。请根据提示,进入“厂商信息”界面进行配置即可。

  3. 填写“项目名称”“所属行业”“描述”等项目信息后,单击“创建”

    配置示例:

    • 项目名称:StreetLight
    • 所属行业:公用事业(NB-IoT)

    项目创建成功后,系统返回“应用ID”“应用密钥”。在应用对接物联网平台时需要这两个参数,请妥善保存,如果遗忘,可以在该项目的应用 > 对接信息 > 应用安全中进行重置。

创建产品

某一类具有相同能力或特征的设备的集合称为一款产品。除了设备实体,产品还包含该类设备在物联网能力建设中产生的产品信息、产品模型(Profile)、插件、测试报告等资源。

  1. 进入新创建的项目,选择产品 > 产品开发,单击“新建产品”

  2. “创建产品”中,选择“自定义产品”,单击“自定义产品”

  3. 系统将弹出“设置产品信息”窗口,填写必要产品信息,单击“创建”

    配置实例:

    • 产品名称:OC_StreetLight
    • 型号:OC_StreetLight001
    • 厂商ID:由系统自动生成,无需配置
    • 所属行业:智慧城市
    • 设备类型:StreetLight
    • 接入应用层协议类型:LWM2M
    • 数据格式:二进制码流

  4. “产品开发”界面将会呈现已经创建的产品,选择具体产品,可以进入该产品的开发界面。

Profile定义

  1. 在产品开发空间,选择“Profile定义”,单击“新建服务”,配置产品的服务。

  2. 新建Sensor服务,管理路灯的光照强度。当路灯接入物联网平台后,上报光照强度值。

    1. “属性列表”区域单击“添加属性”,填写相关信息,然后单击“确定”

      配置示例:

      • 名称:luminance
      • 数据类型:int
      • 最小值:0
      • 最大值:65535
      • 步长:1
      • 单位:lux
      • 访问模式:RE
      • 是否必选:是

    2. 在Sensor服务名的右边单击,保存服务。

  3. 新建LED服务,管理路灯的开/关灯。当路灯收到物联网平台下发的开/关灯命令后,响应并上报当前的状态信息。

    1. “命令列表”区域单击“添加命令”,命令名称为Set_Led,然后单击“确定”
    2. 单击“添加下发命令字段”,填写相关信息,然后单击“确定”

      配置示例:

      • 名称:led
      • 数据类型:string
      • 长度:3
      • 枚举值:ON,OFF
      • 是否必选:是

    3. 单击“添加响应命令字段”,填写相关信息,然后单击“确定”

      配置示例:

      • 名称:light_state
      • 数据类型:string
      • 长度:3
      • 枚举值:ON,OFF
      • 是否必选:是

    4. 在LED服务名的右边单击,保存服务。

编解码插件开发

  1. 在产品开发空间,选择“编解码插件开发”,开发编解码插件。

  2. “在线编解码插件编辑器”区域,单击“新增消息”

  3. 新增消息Report_Sensor,接收路灯上报的光照强度。

    配置示例:

    • 消息名:Report_Sensor
    • 消息类型:数据上报
    • 添加响应字段:是
    • 响应数据:AAAA0000(默认)

    1. “新增消息”界面,单击“添加字段”

      “添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。

    2. “新增消息”界面,单击“添加字段”,填写相关信息,然后单击“完成”

      配置示例:

      • 名字:data
      • 数据类型:int16u(16位无符号整型)

    3. “新增消息”界面,单击“完成”,完成消息Report_Sensor的配置。

  4. 新增消息Set_Led,管理路灯的开/关灯,并获取路灯执行命令后的状态信息。

    配置示例:

    • 消息名:Set_Led
    • 消息类型:命令下发
    • 添加响应字段:是

    1. “新增消息”界面,单击“添加字段”
      • “添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。
      • “添加字段”界面,勾选“标记为响应标识字段”,然后单击“完成”,添加响应标识字段mid。

    2. “新增消息”界面,单击“添加字段”,填写相关信息,然后单击“完成”

      配置示例:

      • 名字:led
      • 数据类型:string
      • 长度:3

    3. “新增消息”界面,单击“添加响应字段”
      • “添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。
      • “添加字段”界面,勾选“标记为响应标识字段”,然后单击“完成”,添加响应标识字段mid。
      • “添加字段”界面,勾选“标记为命令执行状态字段”,然后单击“完成”,添加命令执行状态字段errcode。

    4. “新增消息”界面,单击“添加响应字段”,填写相关信息,单击“完成”

      配置示例:

      • 名字:light_state
      • 数据类型:string
      • 长度:3

    5. “新增消息”界面,单击“完成”,完成消息Set_Led的配置。

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

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

配置IoT Studio工程

  1. 在产品开发空间,选择“端侧集成指导”,单击“立即下载”,下载并安装最新版的IoT Studio。

  2. 运行IoT Studio时,系统会检测是否安装开发工具包。

    单击“是”,下载并安装开发工具包,此工具包用于在windows上搭建IoT Studio开发环境,编译调试Lite OS应用。

    将工具包解压到任意目录,运行“developTools.exe”,安装完成后再重新运行IoT Studio。

  3. 在开发中心,选择“端侧集成指导”,单击“复制”,复制设备模型文件的URL。

  4. 打开IoT Studio,单击“创建IoT Studio工程”,进入“新建IoT工程”界面。

  5. “新建IoT工程”中,填写工程相关信息。

    配置示例:

    • 工程名称:QuickStart
    • 工程目录:D:\
    • SDK版本:保持默认
    • 硬件平台:选择STM32L431_BearPi
    • 选择“基于云端模型创建”。

      设备模型文件:步骤3复制的设备模型文件的URL。

    设备开发的业务模块主要集中在自动生成的app.capp.h两个文件中。
    • oc_cloud_map_demo_app.c文件中已自动生成了数据上报和命令下发两个接口。

    • oc_cloud_map_demo_app.h文件主要描述映射生成的数据结构、硬件初始化接口。

实现设备业务处理

  1. 实现命令下发处理。

    1. oc_cloud_map_demo_app.c文件中找到sensor_controll_handler () 函数。

    2. /********** code area for cmd from IoT cloud **********/ 注释下添加以下代码,然后在工具栏中单击,保存文件。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      //开灯
      if (strstr(Set_Led->led, "ON") != NULL)
      {
      HAL_GPIO_WritePin(Light_GPIO_Port, Light_Pin, GPIO_PIN_SET);
      }
      //关灯
      if (strstr(Set_Led->led, "OFF") != NULL)
      {
      HAL_GPIO_WritePin(Light_GPIO_Port, Light_Pin, GPIO_PIN_RESET);
      }
      

  2. 实现数据上报处理。

    1. oc_cloud_map_demo_app.c文件中找到report_data_handler () 函数。
    2. /********** code area for report data to IoT cloud **********/ 注释下添加以下代码,并删除“// virtual sensor data example”注释下的代码,然后在工具栏中单击,保存文件。
      1
      2
      3
      Report_Sensor.messageId = cn_app_Report_Sensor;
      Report_Sensor.data = htons(lux);
      oc_lwm2m_report(context,(char *)&Report_Sensor, sizeof(Report_Sensor), 1000);
      

编译并烧录代码

  1. 在工具栏中单击,对当前工程进行编译。编译成功后,在控制台面板中显示“编译成功”

  2. 使用数据线将开发板与电脑连接,并将通信模组上的开关拨至MCU侧。

  3. 在工具栏中单击,将已经编译的程序烧录至开发板。烧录成功后,控制台面板中显示“烧录成功”

使用工具定位模组通信问题

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

  1. 单击菜单栏中的工具 > 通信模组检测工具或直接单击工具栏中的图标,打开通信模组检测工具。

  2. 单击“串口配置”

  3. 获取PC与开发板连接的实际端口号。选择控制面板 > 硬件和声音 > 设备管理器 ,在“端口”子菜单下,找到连接设备的串口号,如COM27。

  4. “串口配置”界面,“端口”选择3获取的与开发板连接的端口号,如“COM27”“波特率”配置为“9600”,然后单击“应用”

  5. 将与PC连接的通信模组上的开关拨至PC侧。

  6. 单击“开始测试”,若通信正常,测试结果如下。

模组与物联网平台通信异常场景:

  • 串口打开失败

    测试结果为“串口打开失败”,请检查串口配置是否正确,即端口号是否为实际端口号,波特率是否设置为“9600”。

  • 模组连接异常/模组损坏

    测试结果为“AT指令无法正常发送”,请检查开发板上的开关是否已拨至PC侧、模组是否损坏、以及模组是否正确的插入卡槽。

  • SIM卡未正确插入卡槽

    测试结果为“设置终端射频电路启用完整功能失败”,请检查开发板上的SIM卡是否正反面或者方向插错,以及SIM卡的有效性。

  • 模组未在物联网平台注册

    测试结果为“LWM2M协议信息注册状态:REJECTED_BY_SERVER”,请在物联网平台注册该模组。

相关文档