zoukankan      html  css  js  c++  java
  • 【华为云技术分享】基于小熊派STM32芯片的通过MQTT上报JSON数据到华为物联网平台的自动售货机Demo解析

    【摘要】 STM32的工程在文章末尾,可自行下载。

    一、工程配置

    1、MCU类型选择STM32L431RC

    2、烧录器选择OpenOCD,参数 -f interface/stlink-v2-1.cfg -f target/stm32l4x.cfg

    3、输出目录选择 LiteOS_Lab_STM32 argetsSTM32L431_BearPiGCCappbuild

    4、编译器Makefile选择 targetsSTM32L431_BearPiGCCMakefile

    5、平台参数配置:LiteOS_Lab_STM32demosoc_mqtt_demooc_mqtt_demo_staticoc_mqtt_static.c

    6、WIFI用户名密码配置: LiteOS_Lab_STM32iot_link etwork cpipesp8266_socketesp8266_socket_imp.h

    7、在物联网平台上创建产品,选择MQTT方式

    二、部分代码解析

    编译烧录程序之前我们需要修改两处代码

    第一处打开oc_mqtt_static.c文件,我们需要配置设备连接华为云,物联网平台所需要的参数,

    修改第51行CN_MQTT_EP_NOTE_ID 为在华为云,设备接入服务,注册设备时使用的设备识别码,可以在平台中查看,

    修改CN_MQTT_EP_DEVICE_ID 为注册设备时生成的设备ID,CN_MQTT_EP_PASSWD为注册设备时生成的密钥,

    设备ID和密钥在之前注册设备时保存的txt文件中查看,如果忘记或丢失,可以重新注册一个新的设备,

    设备ID也可以在设备接入服务中查看,密钥可以在设备接入服务中重置。

    第二处打开esp8266_socket_imp点h文件,我们需要配置开发板链接wifi所需要的参数,

    修改第43行WIFI_SSID 为自己创建的wifi热点名字,WIFI_PASSWD为热点的密码,用于开发板链接wifi,

    此处wifi热点建议自己手机开启热点,开发板传输数据较小,不会花费太多流量,也可以用路由器的wifi,

    但不能用有portal认证和802.1x认证的wifi,只能使用认证方式为用户名密码的wifi。

    点击编译按钮,进行编译,耐心等待提示编译成功。

    将开发板用USB线连接到电脑上,开启手机热点或者路由器,点击烧录按钮,耐心等待提示烧录成功。如果烧录不成功,请检查前面工程配置的步骤是否配置正确,或者尝试重新插拔USB线。随后登录华为云 物联网平台,点击左下角切换页面,在设备,所有设备处可以看到设备已经在线,随后在开发板的LCD屏幕上可以看到所有商品,F1选择商品,F2将其加入购物车,当F1位于submit时,F2提交订单。也可以取消订单,此时上报的数据购物车为空,订单状态为0。随后我们登录物联网平台,点击在线的设备,可以看到上报的数据,点击查看全部属性,可以看到数据详情。

    关键代码讲解

    config.mk LiteOS SDK的配置文件,可以选择或开关相关功能,如协议选择:mqtt/lwm2m/coap,或者配置加密/非加密

    Makefile定义了一系列的规则与编译选项,编译器会根据这些定义来对源文件进行编译、链接

    project.mk定义了所有需要移植的文件

    Hardware包含了开发板的四款传感器和LCD显示屏的驱动

    main.c程序入口函数main所在的文件

    iot link文件夹,包含了Lite O S SDK所有功能代码。SDK会根据用户在config.mk中的配置,自动地添加对应功能的源代码参与编译。

    oc_mqtt_static.c主要的案例程序文件,负责数据上报和命令下发业务逻辑实现。

    oc_mqtt_static.c里面业务逻辑的实现方式

    oc_mqtt_demo_main是售货机的案例入口函数,首先做LCD屏幕的初始化,背景设置为黑色,字体设置为绿色,循环显示每个商品,

    显示Submit和Cancel选项,显示选择按钮F1当前的位置,显示购物车当前商品数量,

    初始化按键检测任务,创建信号量,用于命令响应,创建数据上报任务,创建命令下发任务

    两个任务相当于两个线程,创建好后,会自动执行。

    key_detect任务,当按下F1按键时,顺序调整星号的位置,来标记当前F1按钮所在的位置。

    oc_mqtt_report_entry 是数据上报任务,首先定义上报所需要的 JSON 数据结构体,然后配置物联网平台的参数,连接到华为云平台,配置成功后,

    可以在华为云平台上看到设备在线,然后进入循环体,不断监测F2按键是否按下,当F2被按下并处于submit或者cancel位置时,进行 JSON字段组装,

    将每一个字段的名字,数据,数据大小,数据类型放在结构体中,拼接到上一个字段后面,以此类推,组装完所有字段。然后将他们转化成 JSON 格式,

    再转化为字符串用于数据上报,待oc_mqtt_report数据上报成功后,清空所有订单数据,清空购物车,F1按键的标识星号回到第一个商品位置,最后释放刚才创建的数据。

    当按下F2时,F1按键在商品处,就将该商品添加到购物车,相应的购物车商品数量和总价增加,这里左边和右边五个商品分开判断。

    oc_mqtt_cmd_entry为下发命令响应的任务,当接收到命令时根据命令中的商品顺序,进行相应的修改。

    全局变量的定义,包括用于LCD显示,数据上报所需要的常量。

    三、工具IoT Studio常用的快捷键

    1、当前文件搜索 Ctrl+F

    2、全局搜索 Ctrl+Shift+F

    3、撤销 Ctrl+Z 恢复 Ctrl+Y

    4、保存 Ctrl+S

    5、注释 Ctrl+反斜杠

    6、搜索文件 Ctrl+P

    7、复制Ctrl+C 、粘贴Ctrl+V 、剪切 Ctrl+X

    8、前进 Alt+右箭头

    9、后退 Alt+左箭头

    LiteOS_Lab_STM32.part1.rar

    LiteOS_Lab_STM32.part2.rar

    作者:Sunshine_666

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/12523934.html
Copyright © 2011-2022 走看看