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…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
