ESP8266 MQTT服务器+阿里云
MQTT私有平台搭建(EMQX + 阿里云)
阿里云服务器 + EMQX 搭建私有MQTT平台
1、搜索EMQX开源版本

2、查看各版本EMQX支持的UBUNTU版本

3、查看服务器Ubuntu版本

4、使用APT安装模式

5、按照官网指示安装并启动
6、下载安装MQTTX测试工具

7、设置云服务器安全组,打开18083 端口(EMQX WEB端)

8、访问该地址,第一次登录需要修改密码
默认用户:admin
默认密码:public


9、创建用户过滤非法MQTT信息
客户端认证->创建->认证方式(密码)->选择数据源(内置数据库)->配置参数->创建->添加用户

10、使用MQTTX创建连接

11、发布主题

12、订阅消息


使用ESP8266 连接 MQTT 服务器
1、esp8266 连接wifi
#include <ESP8266WiFi.h>
#include "string"
void SerialInit(void)
{Serial.begin(9600);Serial.printf("\n");
}const char * G_WifiName = "XY054789";
const char * G_WifiPasswd = "12345678";
uint16_t G_WaitTime=0;uint8_t WifiInit(const char * WifiName,const char * WifiPasswd,int WaitTime)
{//设置Wifi模式为staWiFi.mode(WIFI_STA);//清除配置WiFi.disconnect();//开始连接WiFiWiFi.begin(WifiName,WifiPasswd);//设置超时时间G_WaitTime=1;//测试是否在超时时间内连接while((WiFi.status() != WL_CONNECTED)){delay(1000);Serial.printf("connected wifi %s wait %d s \r\n",WifiName,G_WaitTime);if(G_WaitTime++ > WaitTime){Serial.printf("connected wifi %s faild wait timeout \r\n",WifiName);return 0;}}Serial.printf("connected wifi %s success \r\n",WifiName);Serial.printf("connect WIFI %s success,local IP is %s\r\n",WiFi.SSID().c_str(),WiFi.localIP().toString().c_str());return 1;
}void setup() {// put your setup code here, to run once:SerialInit();WifiInit(G_WifiName,G_WifiPasswd,15);
}void loop() {// put your main code here, to run repeatedly:if(WiFi.status() != WL_CONNECTED){WifiInit(G_WifiName,G_WifiPasswd,15);}else {{//wifi 连接正常//MQTT 连接}}}
2、连接MQTT 使用PubSubClient库
地址:https://www.arduino.cc/reference/en/libraries/pubsubclient/

Arduino IDE -> 项目 -> 导入库 -> 添加ZIP库

3、连接MQTT服务器
问题1:非静态成员引用常量
问题2:mqttpc.setServer(“47.109.27.255”,MqttServerPort); 的ip如何用变量传入
#include <ESP8266WiFi.h>
#include <PubSubClient.h>/*WIFI 相关变量*/
const char * G_WifiName = "XY054789";
const char * G_WifiPasswd = "12345678";
uint16_t G_WaitTime=0;/*MQTT 相关变量*/
char * MqttServer ="47.109.27.255";
uint16_t MqttServerPort = 1883;
const char * MqttUser = "wangju";
const char * MqttPaw = "root.2018";
const char * MqttTopicRecv = "stm32_client_r";
const char * MqttTopicSend = "stm32_client_s";
char * MqttClientId = "mqttx_c61ef910";
//定义WIFI 对象
WiFiClient wic;
//定义MQtt PC端对象
PubSubClient mqttpc(wic);/****************************串口初始化***************************************/
void SerialInit(void)
{Serial.begin(9600);Serial.printf("\n");
}
/*****************************************************************************************//***********************************WIFI初始化**********************************************/
uint8_t WifiInit(const char * WifiName,const char * WifiPasswd,int WaitTime)
{//设置Wifi模式为staWiFi.mode(WIFI_STA);//清除配置WiFi.disconnect();//开始连接WiFiWiFi.begin(WifiName,WifiPasswd);//设置超时时间G_WaitTime=1;//测试是否在超时时间内连接while((WiFi.status() != WL_CONNECTED)){delay(1000);Serial.printf("connected wifi %s wait %d s \r\n",WifiName,G_WaitTime);if(G_WaitTime++ > WaitTime){Serial.printf("connected wifi %s faild wait timeout \r\n",WifiName);return 0;}}Serial.printf("connected wifi %s success \r\n",WifiName);Serial.printf("connect WIFI %s success,local IP is %s\r\n",WiFi.SSID().c_str(),WiFi.localIP().toString().c_str());return 1;
}
/*****************************************************************************************//*******************************MQTT初始化***************************************************///消息回调函数,处理接收到的消息
void getMQTT(char* topic,byte* payload,unsigned int length){Serial.printf("get data from %s\r\n",topic); //输出调试信息,得知是哪个主题发来的消息for(unsigned int i=0;i<length;++i){ //读出信息里的每个字节Serial.print((char)payload[i]); //以文本形式读取就这样,以16进制读取的话就把(char)删掉}Serial.println();
}uint8_t MqttInit(void)
{if(WiFi.status() != WL_CONNECTED) {Serial.printf("wifi disconnected !!!\r\n");return 0;}//设置服务器信息mqttpc.setServer("47.109.27.255",MqttServerPort);//连接mqtt服务器if(!mqttpc.connect(MqttClientId,MqttUser,MqttPaw)){Serial.printf("mqtt connected failed !!!\r\n");return 0;}//订阅主题mqttpc.subscribe(MqttTopicRecv);//设置回调函数mqttpc.setCallback(getMQTT);Serial.printf("mqtt connected success !!!\r\n");mqttpc.publish(MqttTopicSend,"mqtt connected success !!! node:stm32_1");return 1;
}
/*****************************************************************************************/void setup() {// put your setup code here, to run once:SerialInit();WifiInit(G_WifiName,G_WifiPasswd,15);MqttInit();
}void loop() {// put your main code here, to run repeatedly:if(WiFi.status() != WL_CONNECTED){WifiInit(G_WifiName,G_WifiPasswd,15);MqttInit();}else {//wifi 连接正常//MQTT 连接if(mqttpc.connected()){mqttpc.loop(); //发送心跳信息mqttpc.publish(MqttTopicSend,"node:stm32_1 data:test");}else{MqttInit();}}}
EMQX后台

MQTTX 订阅 stm32_client_s

发布 stm32_client_r 主题


相关文章:
ESP8266 MQTT服务器+阿里云
MQTT私有平台搭建(EMQX 阿里云) 阿里云服务器 EMQX 搭建私有MQTT平台 1、搜索EMQX开源版本 2、查看各版本EMQX支持的UBUNTU版本 3、查看服务器Ubuntu版本 4、使用APT安装模式 5、按照官网指示安装并启动 6、下载安装MQTTX测试工具 7、设置云服务…...
css动画水球图
由于echarts水球图动画会导致ios卡顿,所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…...
【设计模式-行为型】状态模式
一、什么是状态模式 什么是状态模式呢,这里我举一个例子来说明,在自动挡汽车中,挡位的切换是根据驾驶条件(如车速、油门踏板位置、刹车状态等)自动完成的。这种自动切换挡位的过程可以很好地用状态模式来描述。状态模式…...
2024.1.22 安全周报
政策/标准/指南最新动态 01 工信部印发《关于加强互联网数据中心客户数据安全保护的通知》 原文: https://www.secrss.com/articles/74673 互联网数据中心作为新一代信息基础设施,承载着千行百业的海量客户数据,是关系国民经济命脉的重要战略资源。…...
idea修改模块名导致程序编译出错
本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑: 通过idea菜单创建模块,并用idea菜单修改模块名,结构程序编译报错,出错的代码莫名奇妙。双击maven弹窗clean时,还是报错。因为模块是新建的&am…...
root用户Linux银河麒麟服务器安装vnc服务
安装必要桌面环境组件 yum install mate-session-manager -y mate-session #确定是否安装成功安装vnc服务器 yum install tigervnc-server -y切换到root为root得vnc设置密码 su root vncpasswd给root用户设置vnc服务器文件 vi /etc/systemd/system/vncserver:1.service [Un…...
CentOS 7使用RPM安装MySQL
MySQL是一个开源的关系型数据库管理系统(RDBMS),允许用户高效地存储、管理和检索数据。它被广泛用于各种应用,从小型的web应用到大型企业解决方案。 MySQL提供了丰富的功能,包括支持多个存储引擎、事务能力、数据完整…...
OpenCV imread函数读取图像__实例详解
OpenCV imread函数读取图像__实例详解 本文目录: 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 (3.1)、Flags-1时,样返回加载的图像(使用alpha通道,否…...
激光线扫相机无2D图像的标定方案
方案一:基于运动控制平台的标定 适用场景:若激光线扫相机安装在可控运动平台(如机械臂、平移台、旋转台)上,且平台的运动精度已知(例如通过编码器或高精度步进电机控制)。 步骤: 标…...
【安当产品应用案例100集】034-安当KSP支持密评中存储数据的机密性和完整性
安当KSP是一套获得国密证书的专业的密钥管理系统。KSP的系统功能扩展图示如下: 我们知道商用密码应用安全性评估中,需要确保存储的数据不被篡改、删除或者破坏,必须采用合适的安全方案来确保存储数据的机密性和完整性。KSP能否满足这个需求呢…...
08.七种排序算法实现(C语言)
目录 一.排序的基本概念 1.1 排序的概念 1.2 常见的排序算法 二.常见排序算法的实现 2.1 插入排序(直接) 1.基本思想 2.直接插入排序的特性 3.代码实现 2.2 希尔排序 1.基本思想 2.希尔插入排序的特性 3.代码实现 2.3 选择排序 1.基本思想 2…...
Alibaba Spring Cloud 一 核心组件、特性
Alibaba Spring Cloud 是 Alibaba 基于 Spring Cloud 的分布式微服务解决方案,提供了一套高性能、高可靠的微服务开发和运维工具。它扩展了 Spring Cloud 的功能,并优化了许多在生产环境中的实践场景,例如服务发现、配置管理、熔断限流等。 …...
kafka学习笔记7 性能测试 —— 筑梦之路
kafka 不同的参数配置对 kafka 性能都会造成影响,通常情况下集群性能受分区、磁盘和线程等影响因素,因此需要进行性能测试,找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-t…...
HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构
HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构 效果图DRAWRADARHQChart代码地址后台数据对接说明示例数据数据结构说明效果图 DRAWRADAR DRAWRADAR是hqchart插件独有的绘制雷达图函数,可以通过麦语法脚本来绘制一个简单的雷达图数据。 雷达图显示的位置固定…...
Java集合学习:HashMap的原理
一、HashMap里的Hash是什么? 首先,我们先要搞清楚HashMap里的的Hash是啥意思。 当我们在编程过程中,往往需要对线性表进行查找操作。 在顺序表中查找时,需要从表头开始,依次遍历比较a[i]与key的值是否相等ÿ…...
ETLCloud在iPaas中的是关键角色?
在当今的数字化时代,企业越来越依赖于其处理和分析数据的能力。为了实现这一目标,企业需要将各种异构的应用和数据源集成在一起,形成一个统一的数据视图。在这一过程中,ETL(Extract, Transform, Load)和iPa…...
Docker Hub 全面解析及应对策略
在现代 DevOps 和容器化应用开发中,Docker Hub 是一个不可或缺的工具。然而,一些地区或企业对 Docker Hub 的访问受到限制,甚至全面禁止。这种现象引发了开发者和运维人员的广泛关注。那么,为什么 Docker Hub 会被禁用?…...
第五天 Labview数据记录(5.1 INI配置文件读写)
5.1 INI配置文件读写 INI配置文件是一种简单的文本文件,通常用于存储软件的配置信息。它具有以下作用: 存储软件配置参数方便软件的维护和更新提高软件的灵活性和可扩展性便于用户修改和共享配置 5.1.1 前面板 1)新建项目SaveData_Exampl…...
【算法】经典博弈论问题——巴什博弈 python
目录 前言巴什博弈(Bash Game)小试牛刀PN分析实战检验总结 前言 博弈类问题大致分为: 公平组合游戏、非公平组合游戏(绝大多数的棋类游戏)和 反常游戏 巴什博弈(Bash Game) 一共有n颗石子,两个人轮流拿,每次可以拿1~m颗…...
ES6语法
一、Let、const、var变量定义 1.let 声明的变量有严格局部作用域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…...
一个防止GPT“降智”的简单方法
GPT客户端容易“降智”?教你一个简单解决办法 正文 最近一直感觉 GPT 手机客户端有点“降智”,回答质量不太稳定。 后来我拿同一账号做了对比,发现用手机浏览器登录网页版时,整体会正常不少,所以来给大家分享一下。 我…...
OpenClaw+Qwen3-14b_int4_awq:3种降低token消耗的实战技巧
OpenClawQwen3-14b_int4_awq:3种降低token消耗的实战技巧 1. 为什么我们需要关注token消耗 第一次看到OpenClaw的token账单时,我差点从椅子上跳起来。一个简单的文件整理任务竟然消耗了接近5000个token,这还只是测试环境下的单次运行。当我…...
Clipboard命令行参数完整指南:掌握所有可用选项的终极手册
Clipboard命令行参数完整指南:掌握所有可用选项的终极手册 【免费下载链接】Clipboard 😎🏖️🐬 Your new, 𝙧𝙞𝙙𝙤𝙣𝙠𝙪𝙡…...
Mac环境OpenClaw深度优化:Qwen3-4B模型推理速度提升30%方案
Mac环境OpenClaw深度优化:Qwen3-4B模型推理速度提升30%方案 1. 为什么需要优化OpenClaw的模型推理速度 上周我在用OpenClaw处理一个简单的文件整理任务时,发现整个流程耗时比预期长了近一倍。通过日志排查才发现,大部分时间都消耗在等待Qwe…...
WzComparerR2:解锁冒险岛游戏数据洞察的专业工具
WzComparerR2:解锁冒险岛游戏数据洞察的专业工具 【免费下载链接】WzComparerR2 Maplestory online Extractor 项目地址: https://gitcode.com/gh_mirrors/wz/WzComparerR2 想要深入探索《冒险岛》这款经典游戏的数据世界吗?WzComparerR2是您的专…...
RMBG-2.0镜像免配置部署:无需配置Python环境,开箱即用Web交互界面
RMBG-2.0镜像免配置部署:无需配置Python环境,开箱即用Web交互界面 你是不是也遇到过这样的烦恼?想用AI模型给图片换个背景,结果光是安装Python环境、配置依赖库就折腾了大半天,最后还可能因为版本冲突、CUDA不兼容等问…...
[Python3高阶编程] - [Python3高阶编程] - 异步编程深度学习指南三:手动实现AsyncRLock
一、手动实现 AsyncRLockimport asyncio from typing import Optionalclass AsyncRLock:def __init__(self):self._lock asyncio.Lock() # 底层互斥锁self._owner: Optional[asyncio.Task] None # 当前持有锁的协程(Task)self._count 0 …...
OpenClaw初学者套装:Qwen3.5-9B镜像+5个基础技能
OpenClaw初学者套装:Qwen3.5-9B镜像5个基础技能 1. 为什么选择这个组合? 上周六下午,我盯着电脑里散落各处的会议纪要、参考文章和代码片段,突然意识到自己每天要重复几十次"CtrlF→切换窗口→复制粘贴"的操作。作为一…...
2026做GEO,豆包、DeepSeek、元宝都爱引用哪些媒体?这份清单收好了!
你是不是也发现了这个 “诡异” 的现象?过去,我们拼命讨好搜索引擎的爬虫,优化关键词密度、买外链,只为排在百度搜索结果的第一页。而现在,用户变了。他们不再在搜索框里试错关键词,而是直接打开豆包、Deep…...
APRSPacketLib:嵌入式C库实现APRS协议编解码
1. APRSPacketLib 项目概述 APRSPacketLib 是一个专为业余无线电(Ham Radio)领域设计的轻量级嵌入式 C 语言库,核心目标是 在资源受限的微控制器平台上高效完成 APRS(Automatic Packet Reporting System)协议数据包的…...
