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+左箭头

    HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。

    欢迎报名参会https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity

  • 相关阅读:
    在美国贩卖早餐的小摊贩
    随感
    业内人士称游资3年前开始准备炒作糖价
    许志:量化宽松在即 美元迎来关键一周
    9月17日  逾200亿资金净流出 农行轰然长阴 好笑
    9月热钱流入环比加速 多为投机性资金
    错过了多次捞钱的机会
    20101012 期货盘面暴跌,亏损持仓
    致歉申明,现在《微电子工程师》可以正常下载了
    SemiId半导体型号识别器1.0发布
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/12229504.html
Copyright © 2011-2022 走看看