本文介绍如何将SDK集成并运行在MCU上, 让SDK通过有方N720通讯模组连接到阿里云物联网平台。

设备说明

  • 设备的硬件由一个MCU加上一个通信模组构成, 设备的应用逻辑运行在MCU上。
  • 模组上支持了MQTT, MCU通过模组提供的AT指令来控制模组何时连接云端服务以及收发数据。
MCU模组对于这样的场景, 设备厂商需要将SDK集成并运行在MCU上, 让SDK通过通信模组连接到阿里云物联网平台。
  • MCUSTM32F103xB(运行FreeRTOS操作系统)。
  • MQTT模组N720V5(提供MQTT层面的AT指令)。

准备工作

本移植实践中使用了以下工具和材料。

  • 硬件:ST STM32F103xB开发板, 有方N720V5MQTT模组。
  • 宿主机OS:Windows。
  • Keil编译器。

搭建开发环境

在搭建开发环境前, 需要准备好硬件, 即STM32F103xB开发板及N720V5MQTT模组。

STM32开发板
说明 白色的开发板为STM32开发板, 蓝色的开发板为N720开发板。

硬件准备工作

  • N720开发板要插入4G的移动sim卡(确保有已激活且能使用)。
  • 将两块开发板串口的地线相连接, STM32开发板串口的TX线接到N720开发板的RX口, STM32开发板串口的RX线接到N720开发板的TX口。
  • N720开发板通过其电源适配器给其供电。
  • 打开N720电源适配器开关, 同时长按PowerKey按钮5秒钟(下图的红色按钮), 直到黄色LED等由浅亮变高亮。
  • STM32直接通过USB线连接到Windows电脑上。
  1. 安装必要的软件

    前往Keil 软件下载中心, 选择对应MDK-Arm, 进入SDK下载页面。

    MDK-Arm下载页面

    软件安装完成后, 输入license完成激活, 然后连接到STM32开发板, 按照页面的提示完成所有配置文件的下载。

    我们已对STM32+N720V5完成了上述工作,对接完成的源码点此下载

    此工程中有STM开发板的配置文件(包括串口, 中断, freertos等), 以及所有代码的完整实现。

    如果您的模组不是N720V5, 您可以参考我们针对N720V5模组AT指令的对接代码完成上述工作。

    只要修改main.c和SDK4.0中的aiot_mqtt_api.c里AT命令部分, 即可完成对接。

    编译/烧录/调试STM32的固件:

    点击左上角的编译按钮, 完成代码的编译, 然后点击烧录按钮, 进行开发板的烧录。

    点击调试按钮, 对程序运行进行控制(比如加断点, 单步调试, 或进入某个函数等)。

    由于当前的开发板仅仅将串口1用于发送AT指令, 没有将其他串口配置起来用于日志的输出, 因此主要靠keil的断点和单步调试工具来判断执行的位置。

    调试STM32

    程序运行。

  2. 模组初始化

    main.c文件的main函数中, mqtt_demo()被调用之前, 都是在通过AT指令进行模组的初始化的工作, 包括获取IP地址等。

    设备初始化需要不到1分钟的时间, 如果成功, 则有一盏LED灯会一闪一闪。

    获取IP地址

    如果不成功, 需要通过单步调试的方式, 看在main函数中在mqtt_demo()调用前, 哪条AT指令执行错误。

  3. 设备上线测试

    设备如果上线成功, 可以通过iot云端的控制台看到设备上线,参考下一节中的第二个截图。

  4. MCU通过MQTT模组接收云端下推消息
    • mqtt_basic_demo.c文件94行打上断点, 如下图。
    • 该断点在用户的代码收到云端推送的mqtt消息后会被触发。
    • 在本例中, 我们订阅了
      /sys/${PRODUCT_KEY}/${DEVICE_NAME}/thing/service/property/set

    因此, 操作控制台使云平台在这个Topic下推消息后, 断点会被触发。

    下发消息调试

    程序运行起来后, 用户登录IoT控制台

    选中要调试的设备, 当观察到设备"在线"后, 选择属性调试->调试功能->主灯开关, 再点击发送按钮。

    发送消息

    可以看到该断点被触发。

    同时图中的下方红框里面的topicpayload数组显示了收到的报文。

    可以点击红框中的加号看到这两个字符串中每个字节的内容。

    收到报文

    至此, 说明设备已经成功收到了代表属性设置thing/service/property/set消息。