使用广和通L610模块搭配RT-Thread操作系统连接onenet云



-----------本文章篇幅相对较长,如果已有相关经验可通过目录选择性阅读-----------
博主花了大量时间来编写本文,各位阅读的小可爱们如果能赏个赞,就是对博主的最大鼓励哟!

一、相关介绍

提示:介绍广和通、RT-Thread和onenet云,已了解的可跳过

1.广和通

pic_right/center/left在这里插入图片描述
  广和通是当前全球领先的物联网无线通信解决方案和无线模组供应商,也是中国首家A股上市的无线模组企业。主要为电信运营商、物联网设备厂商、物联网系统集成商提供端到端物联网无线通信解决方案。其可提供技术领先的5G/4G/LTE Cat 1/3G/2G/NB-IoT/LTE Cat M/安卓智能/车规级无线通信模组。
  本次使用的L610模块就是一个LTE Cat 1模组,产品支持LTE、GSM双模通信。

广和通官网:https://www.fibocom.com/

2.RT-Thread

在这里插入图片描述

  一般认为RT-Thread 是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。但是RT-Thread严格来说不只是一个操作系统,而是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台。是由熊谱翔先生带领并集合开源社区力量开发而成,是一款真正的国产嵌入式物联网操作系统。经过11年的累积发展,RT-Thread 已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过 6亿 台,成为国人自主开发、国内最成熟稳定和装机量最大的开源 RTOS。

RT-Thread官网:https://www.rt-thread.org/

3.onenet云

在这里插入图片描述

  onenet又称中国移动物联网开放平台,是由中移物联网有限公司基于物联网技术和产业特点打造的开放平台和生态环境,适配各种网络环境和协议类型,支持各类传感器和智能硬件的快速接入和大数据服务,提供丰富的API和应用模板以支持各类行业应用和智能硬件的开发,能够有效降低物联网应用开发和部署成本,满足物联网领域设备连接、协议适配、数据存储、数据安全、大数据分析等平台级服务需求。

onenet官网:https://open.iot.10086.cn/


二、项目简介

1.项目简介

本项目会全程使用RT-Thread Studio开发,使用版本: 1.1.5。

项目预期目标和步骤:
1.实现RT-Thread在stm32f411ce最小系统板上运行;
2.在RT-Thread上添加支持L610模块的AT设备软件包;
3.在RT-Thread上添加支持onenet云的软件包;
4.使stm32可以通过L610模块连接至onenet云,并可以上传和接收数据。

使用到的硬件如下:
在这里插入图片描述


三、硬件相关

1.L610模块

(1)原理图

L610 MINI DS模块原理图:[点击图片查看高清图]
在这里插入图片描述L610模块扩展底板的原理图:[点击图片查看高清图]
在这里插入图片描述

(2)使用说明

  L610模块功能非常丰富,在模块SIM卡槽插入可以正常使用的手机卡,可以连接网络进行数据传输、拨打/接听电话、发送/接受短信等功能,详细功能可以查看其相应手册,本项目只使用模块的网络数据传输功能。

  根据以上两个原理图可以发现,扩展板搭建好了L610模块需要的电源、状态指示灯和SIM卡座接口等基础实验环境。在使用时,开发者仅需要注意以下几个部分:

①扩展板上有很多按照arduino接口排列的排针座,是为了兼容具有arduino接口的开发板用的。这个扩展板,实际上是官方的一个iot开发套件上的,用来配合一块STM32G070的NUCLEO开发板。所以实际上arduino接口排列的排针座仅仅有几个与L610模块关键引脚相连。
  相连的接口有:

L610引脚扩展板丝印说明
67脚:TXDRXDL610模块串口发送端
68脚:RXDTXDL610模块串口接收端
21脚:PWRKEYPOWER_ONL610模块开/关机引脚
20脚:RESET_NRESET_CONL610模块复位引脚
GNDGND电源地

其中,扩展板上的TXD和RXD是指与其相连的单片机的实际引脚功能。

【注意这些接口中没有VCC电源】

  特殊连接:

L610引脚扩展板资源说明
70脚:USB_DMMicro USB to moduleL610的USB功能
69脚:USB_DPMicro USB to moduleL610的USB功能
67脚:TXDMicro USB to serial portL610的AT串口
68脚:RXDMicro USB to serial portL610的AT串口

  这是扩展板上的两个Micro USB接口,每个都可用于供电,但是一个连接了USB转串口模块,可以直接连接电脑使用AT指令控制模块;另一个连接了L610模块的USB接口,用于USB功能。

②电源问题
  因为L610模块使用的是3.8V电源,所以扩展板上已经搭载了DC-DC电路,将通过两个Micro USB输入的5V转为3.8V,并且没有将5V输入点提供单独引脚供开发者使用,所以使用时请通过两个Micro USB经过扩展板上的DC-DC电路进行供电。

③控制引脚问题
  虽然L610模块使用的是3.8V电源,但是其引脚的数字逻辑电平为1.8V,所以其引脚也不要直接连接高于1.8V的其他芯片引脚。在扩展板上可以使用的这几个引脚都已经经过 OC/OD电路和电平转换电路进行了处理,所以3.3V芯片可以直接相连进行控制。
  扩展板上POWER_ON引脚的使用:模块上电时默认关机状态,需要控制此引脚进行开机,方可正常使用L610模块。L610模块的开机和关机都是通过给芯片21脚[PWRKEY]低电平来触发,对应到扩展板POWER_ON引脚就是给高电平触发。不同的是,开机时要求给的高电平至少2S,关机时给的高电平至少3.1S。开关机电路和时序如下:[点击图片查看高清图]
在这里插入图片描述【注意:当模块正常工作时,不要立即切断模块电源,以避免损坏模块内部的Flash。强烈建议先通过PWRKEY或者 AT 命令关闭模块后,再断开电源。(软件关机:AT+ CPWROFF)】

  扩展板上RESET_CON引脚的使用:给L610模块的RESET_N引脚一个100ms的低电平然后拉高,可以使模块复位,对应到扩展板RESET_CON引脚就是给一个100ms的高电平。复位电路和时序如下:[点击图片查看高清图]
在这里插入图片描述当然复位也有软复位,发送AT指令:AT+CFUN=15。

2.stm32和l610以及其他相关硬件的连接

  stm32的串口1用于连接USB转TTL模块在连接至电脑,用于打印调试等;stm32的串口2连接扩展板的TXD和RXD用于发送AT指令控制L610模块;因为要控制模块的开机,所以使用stm32的PB1引脚连接扩展板的POWER_ON引脚。对应关系如下:

STM32L610扩展板USB转TTL安卓数据线电源
PA9(TXD)RXD
PA10(RXD)TXD
PA2(TXD)TXD
PA3(RXD)RXD
PB1POWER_ON
3.3V3.3V
Micro USB母头Micro USB公头
GNDGNDGNDGND

四、软件相关

1.配置onenet云

1.进入onenet官网,选择右上角“登陆”登陆账号后,点击右上角“控制台”,将鼠标移至左上角“全部产品服务”处,会弹出一个小页面窗,选择“基础服务”里的“多协议接入”。
在这里插入图片描述2.点击页面中间偏右侧的“添加产品”按钮,会在页面右侧弹出一个侧边窗,需要向里面填写内容,里面的内容可以随便填,填写完毕点击确定。
在这里插入图片描述3.创建产品完成后,会弹出一个小的引导提示框,点击“立即添加设备”,页面将会跳转至设备页面。
在这里插入图片描述4.点击页面右上侧的“添加设备”按钮,会弹出一个侧边框,在其中填写相应的参数,设备名称和鉴权信息都可以随意填写,不过鉴权信息需要为数字和字母格式。
在这里插入图片描述5.添加一个设备后,会在页面显示设备的信息,如设备ID、设备名称、设备状态以及最后在线时间等参数。点击右侧的“详情”,进入设备详情界面。
在这里插入图片描述6.点击“添加APIKey”,在弹出的右侧边窗口内填写APIkey,可以随便填写,填写完成后点击提交,系统会生成一个APIKey。
在这里插入图片描述7.至此,onenet在本项目的条件下已经完全配置完毕,剩下的最后一步就是把链接onenet云需要的各种参数和密码记录下来。分别记录设备下的:设备ID号,鉴权信息和APIKey;产品下的产品ID和Master-APIkey;其中获取Master-APIkey的时候需要进行验证,如果绑定了手机号和邮箱都可以作为验证手段。
在这里插入图片描述在这里插入图片描述
☆☆最好将参数记录到一个文档留作保存,注意:这些参数是非常重要的,千万不可泄漏。☆☆
(为了文章的可读性,将此中的参数已经全部展露出来,但是会在写完本文后删除此文章所创建的产品,所以不必担心)
在这里插入图片描述

2.使用RT-Thread Studio软件编写代码

(1)准备工作

1.打开RT-Thread Studio,创建基于STM32F411CE的工程,选择->文件->新建->RT-Thread项目,依次填写对应的信息,点击完成。
在这里插入图片描述2.依次按照项目目录找到main.c并打开,点击编译按钮对项目进行编译,观察控制台输出信息,没有错误没有警告,表示软件环境没有问题。
在这里插入图片描述3.将整个硬件系统连接好,将USB转TTL模块插入电脑USB口,将St-Link插入电脑USB。点击串口终端图标打开USB转TTL提供的串口,在弹出来的对话框设置相应的参数,点击确定,稍微等待几秒,观察终端窗口处有如下类似输出即打开成功。
在这里插入图片描述
4.点击程序下载按钮,将程序下载至stm32芯片,观察终端窗口是否有RT-Thread LOG打印以及"Hello RT-Thread!"字符串输出。
在这里插入图片描述5.为了不影响在终端对shell命令的使用,改变main.c文件的内容,使字符串不循环输出。
在这里插入图片描述

(2)添加AT_Device-L610支持包

1.双击打开工程配置工具,在工具内单击鼠标左键libc图标打开libc库支持,之后点击软件包中心的立即添加按钮,添加软件包。
在这里插入图片描述2.在搜索栏输入at_device,点击搜索图标进行搜索。
在这里插入图片描述

3.点击添加,然后关闭即可。
在这里插入图片描述4.关闭搜索界面后,会留在项目配置工具界面,此时显示已添加at_device软件包,鼠标右键单击该软件包,选择详细配置。进入配置界面,在列表中找到Fibocom L610选项,在后面对其勾选,并将其下的列表全部展开,设置电源引脚为17->对应RT-Thread Pin的PB1,AT客户端名称使用uart2,将接收缓存空间改的大一点4096,以防止接收长数据发生错误。最下方版本后面的对应的选项一定要选择latest即最新版本。设置完毕后,使用ctrl+s对配置进行保存,此时RT-Thread Studio会自动对项目进行更改。
在这里插入图片描述5.设置的L610软件包使用了串口2 uart2,所以接下来要去开启uart2功能。在项目目录找到drvice目录下的board.h文件打开,找到大约70几行的uart1定义处,添加对uart2开启的代码,如图。ctrl+s保存。
在这里插入图片描述6.打开项目目录下的packages->at_device-latest->class->l610内的at_device_l610.c文件,找到第979行,将if内的 && l610->power_status_pin != -1 和代码删除。这是因为,本项目只使用了电源引脚,而未使用电源状态读取引脚,所以L610的此支持包会默认不初始化相关引脚,导致L610模块无法开机。
在这里插入图片描述

7.在这个at_device-l610最新版软件包里,有一个小bug,就是第929行处的一个函数误将函数名给写错了,导致编译时报函数未定义错误,实际上函数在文件内已经定义。只要将此函数的首字母大写L改为小写l即可。
在这里插入图片描述8.为了保护l610模块不受非正常关机对其内部flash带来的威胁,在实验结束,或准备给模块断电时,控制l610模块关机后在进行电源断开操作,所以在main.c 文件添加如下代码,作用是关机前按下按键使模块关机,程序停止运行。
在这里插入图片描述

(3)添加onenet软件包

1.打开项目配置工具,点击“ADD”按钮,在弹出的软件包中心搜索框输入onenet点击搜索按钮进行搜索。
在这里插入图片描述
2.在onenet软件包上点击添加按钮,之后关闭页面。
在这里插入图片描述
3.之后界面会留在配置工具,此时可以发现多了很多软件包,这些都是onenet软件包所使用的。找到onenet软件包,鼠标右键点击,选择详细配置。
在这里插入图片描述
4.进入onenet软件包的配置界面,看到有很多参数需要填写,不要慌,打开之前配置onenet云后保存下来的参数,依次按照对应填写。要将onenet示例勾选,之后ctrl+s保存配置。
在这里插入图片描述
5.点击编译,观察控制台输出,没有错误,有警告先不必理会。点击下载至单片机,查看终端的串口输出,一切正常,但是此时还并没有使用onenet软件包的功能。
在这里插入图片描述
6.在终端处按下tab键,会列出支持直接输入执行的指令。在终端处直接输入onenet_mqtt_init命令运行onenet_mqtt_init()函数,进行onenet云连接操作。终端输出相应的提示,此时在onenet云的设备列表处可以看到设备已经在线,证明已连接成功。
在这里插入图片描述

3.互联操作

1.将在项目目录packages->onenet-latest->inc下的onenet.h文件打开,在文件内可以看到软件包所支持的所有功能函数。
在这里插入图片描述
2.onenet软件包支持的常用功能函数及例程功能。

类型函数名功能文件
基础onenet_mqtt_init()OneNET云mqtt初始化onenet.c
基础onenet_mqtt_publish_digit()向onenet云发送数字数据onenet.c
基础onenet_mqtt_publish_string()向onenet云发送字符串数据onenet.c
基础onenet_set_cmd_rsp_cb()设置接收命令响应函数onenet.c
例程onenet_upload_cycle()循环向onenet上传模拟温度数据onenet_sample.c
例程onenet_set_cmd_rsp()设置接收命令响应函数onenet_sample.c

其中onenet_set_cmd_rsp()函数是用来设置接收命令响应函数的函数,此响应函数具体内容由开发者自行实现,在有数据传来时,会自动调用此响应函数对onenet发来的数据进行解析或处理等操作。

3.在RT-Thread Studio终端处输入onenet_set_cmd_rsp命令设置接收命令响应函数。再输入onenet_upload_cycle命令循环向onenet上传模拟温度数据,每次上传模拟数据终端都会打印输出,此时在onenet云的设备列表,l610设备后面点击数据流,切换到列表显示模式,即可看到上传的数据。此处可以设置显示数据量和开启实时刷新功能。
在这里插入图片描述
4.切换至下发命令部分,点击右侧的下发命令按钮,在弹出来的侧边框里填写格式和命令,点击发送,观看RT-Thread Studio终端部分会输出接收到的命令和长度。
在这里插入图片描述至此,本项目内容全部结束。

最后提供L610相关资料下载:https://gitee.com/chaojiwangba/l610-data


  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
以下是基于STM32通过广和通L610通信模组与腾讯连接的代码示例: ```c #include "stm32f10x.h" #include "gprs.h" #include "string.h" #include "stdio.h" #define APN "CMNET" #define USER "" #define PASS "" #define IP "mqtt.tencentdevices.com" #define PORT 1883 #define CLIENT_ID "my_client_id" #define USERNAME "my_username" #define PASSWORD "my_password" #define MQTT_TOPIC "/my_topic" #define MQTT_QOS 0 #define GPRS_RX_BUF_SIZE 1024 #define GPRS_TX_BUF_SIZE 1024 uint8_t gprs_rx_buf[GPRS_RX_BUF_SIZE]; uint8_t gprs_tx_buf[GPRS_TX_BUF_SIZE]; uint8_t mqtt_rx_buf[GPRS_RX_BUF_SIZE]; uint8_t mqtt_tx_buf[GPRS_TX_BUF_SIZE]; int main(void) { uint8_t ip[16]; uint16_t port; uint8_t client_id[32]; uint8_t username[32]; uint8_t password[32]; uint8_t topic[64]; // 初始化GPRS模块 gprs_init(gprs_rx_buf, GPRS_RX_BUF_SIZE, gprs_tx_buf, GPRS_TX_BUF_SIZE); // 连接GPRS网络 if (!gprs_connect(APN, USER, PASS)) { printf("GPRS connect failed!\n"); while (1); } // 获取IP地址和端口 if (!gprs_get_ip_port(IP, PORT, ip, &port)) { printf("Get IP and port failed!\n"); while (1); } // 连接MQTT服务器 if (!mqtt_connect(ip, port, client_id, username, password)) { printf("MQTT connect failed!\n"); while (1); } // 发布消息 if (!mqtt_publish(MQTT_TOPIC, MQTT_QOS, "Hello, world!")) { printf("MQTT publish failed!\n"); while (1); } // 订阅消息 if (!mqtt_subscribe(MQTT_TOPIC, MQTT_QOS)) { printf("MQTT subscribe failed!\n"); while (1); } // 接收消息 mqtt_receive(mqtt_rx_buf, GPRS_RX_BUF_SIZE); // 断开MQTT连接 mqtt_disconnect(); // 断开GPRS连接 gprs_disconnect(); while (1); } ``` 其中,`gprs_init`、`gprs_connect`、`gprs_get_ip_port`、`gprs_disconnect`是自定义的GPRS模块初始化、连接、获取IP地址和端口、断开连接函数;`mqtt_connect`、`mqtt_publish`、`mqtt_subscribe`、`mqtt_receive`、`mqtt_disconnect`是自定义的MQTT连接、发布消息、订阅消息、接收消息、断开连接函数。你需要根据你使用的GPRS模块和MQTT库进行相应的修改。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级网吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值