727|0

194

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

【ACM32G103RCT6] + UART应用 + esp8266 AT固件连接ActiveMQ(MQTT协议)发送消息 [复制链接]

  本帖最后由 御坂10032号 于 2024-1-25 18:26 编辑

 Hello,大家好,接上期的UART功能验证,今天给大家带来的是使用UART+esp8266的at固件连接MQTT服务器实现消息发送的教程,看完本教程你将会学会如何本地搭建MQTT服务器以及使用ACM32G103RCT6订阅以及发布消息。

 

搭建MQTT本地服务器

首先访问MQTT官方网站https://mqtt.org/ 在网站的左上方找到software,并且点击

 在二级页面中找到Service/broker,我们可以看到,ActiveMQ支持MQTT协议。因为我们可以将ActiveMQ部署在本地。那么我们的ACM32G103RCT6可以通过串口来和esp826601通讯

 

 

打开ActiveMQ官网,选择下载ActiveMQ的经典版

 用户可以根据自己的需要来下载不同平台的ActiveMQ,我这里选择的是Windows的5.18.3版本

  下载完成之后对下载的文件夹进行解压。你可以得到一个类似这样的目录

 

我们主要需要关注的文件夹是bin文件夹和conf文件夹。其中conf文件夹保存了一些activemq的启动参数配置文件, 比如如果你想修改ActiveMq的管理密码你可以修改位于conf目录下的users.properties. 通过我们打开activemq.xml文件,我们可以看出,ActiveMQ配置的传输协议的支持情况(其中支持MQTT)

 

如果你没有什么特殊的需求可以把所有的配置文件保持默认,此时打开BIn目录,在win64目录下可以直接执行activemq.bat来启动ActiveMQ(注意:ActiveMQ需要Java环境Jdk要求1.8以上

 

下图为启动成功的ActiveMQ

 

控制台界面(账号admin 密码admin)

  此时我们可以在主题订阅(Topic)下创建一个主题,如下图所示

 此时ActiveMQ的安装准备工作已经完毕。

 

ACM32G103RCT6连接MQTT服务器订阅并且发布消息

 

首先需要使用usb-ttl串口工具连接Esp826601(或者直接使用ACM32G103RCT6串口输出也可以)

发送下面指令(按照次序),具体的AT指令可以查询https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/MQTT_AT_Commands.html#at-mqttconn-mqtt-broker

AT+CWMODE=3 (设置ESP8266工作方式)

AT+CWJAP="ywlim22@unifi","v6%+Nt8M" (连接wifi)

 

将ESP8266的TX接到ACM32G103RCT6的RX, RX接到TX. EN接到3v3(使能esp826601高电平有效), 3v3接到3v3. Gnd 接到GND

 

 

 

 

  ACM32G103RCT6 控制代码

#include "main.h"
#include <stdio.h>

#define BSP_UARTx   (UART2)
UART_HandleTypeDef BSP_UART_Handle_MAIN;



void sendATCommand(const char* command) {
    HAL_UART_Transmit(&BSP_UART_Handle_MAIN, (uint8_t*)command, strlen(command), HAL_MAX_DELAY);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();

    BSP_UART_Handle_MAIN.Instance        = BSP_UARTx;
    BSP_UART_Handle_MAIN.Init.BaudRate   = 115200;
    BSP_UART_Handle_MAIN.Init.WordLength = UART_WORDLENGTH_8B;
    BSP_UART_Handle_MAIN.Init.StopBits   = UART_STOPBITS_1;
    BSP_UART_Handle_MAIN.Init.Parity     = UART_PARITY_NONE;
    BSP_UART_Handle_MAIN.Init.Mode       = UART_MODE_TX_RX;
    BSP_UART_Handle_MAIN.Init.HwFlowCtl  = UART_HWCONTROL_NONE;

    HAL_UART_Init(&BSP_UART_Handle_MAIN);
    HAL_UART_SetDebugUart(BSP_UART_Handle_MAIN.Instance);

   
    sendATCommand("AT+MQTTUSERCFG=0,1,\"Esp8266\",\"admin\",\"admin\",0,0,\"\"\r\n");
    HAL_Delay(5000);  // 等待配置
    // 发送 AT 指令连接到 MQTT 服务器
    sendATCommand("AT+MQTTCONN=0,\"192.168.0.4\",1883,1\r\n");
    HAL_Delay(20000);  // 等待连接到 MQTT 服务器
		sendATCommand("AT+MQTTSUB=0,\"Test\",1\r\n");
		
		
    
    while (1) {
			//发送消息
				sendATCommand("AT+MQTTPUB=0,\"Test\",\"{\\\"userId\\\": 1}\",0,0\r\n");
				HAL_Delay(1000);
    }
}

 

 

实验现象如下:MQTT服务器每隔一秒钟收到一次由ACM32G103RCT6 发送的数据,我们可以自定义发送的数据用来和上位机通讯,比如说监控传感器等

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表