当前位置: 首页 > news >正文

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私有平台搭建&#xff08;EMQX 阿里云&#xff09; 阿里云服务器 EMQX 搭建私有MQTT平台 1、搜索EMQX开源版本 2、查看各版本EMQX支持的UBUNTU版本 3、查看服务器Ubuntu版本 4、使用APT安装模式 5、按照官网指示安装并启动 6、下载安装MQTTX测试工具 7、设置云服务…...

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…...

【设计模式-行为型】状态模式

一、什么是状态模式 什么是状态模式呢&#xff0c;这里我举一个例子来说明&#xff0c;在自动挡汽车中&#xff0c;挡位的切换是根据驾驶条件&#xff08;如车速、油门踏板位置、刹车状态等&#xff09;自动完成的。这种自动切换挡位的过程可以很好地用状态模式来描述。状态模式…...

2024.1.22 安全周报

政策/标准/指南最新动态 01 工信部印发《关于加强互联网数据中心客户数据安全保护的通知》 原文: https://www.secrss.com/articles/74673 互联网数据中心作为新一代信息基础设施&#xff0c;承载着千行百业的海量客户数据&#xff0c;是关系国民经济命脉的重要战略资源。…...

idea修改模块名导致程序编译出错

本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑&#xff1a; 通过idea菜单创建模块&#xff0c;并用idea菜单修改模块名&#xff0c;结构程序编译报错&#xff0c;出错的代码莫名奇妙。双击maven弹窗clean时&#xff0c;还是报错。因为模块是新建的&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是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;允许用户高效地存储、管理和检索数据。它被广泛用于各种应用&#xff0c;从小型的web应用到大型企业解决方案。 MySQL提供了丰富的功能&#xff0c;包括支持多个存储引擎、事务能力、数据完整…...

OpenCV imread函数读取图像__实例详解

OpenCV imread函数读取图像__实例详解 本文目录&#xff1a; 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 &#xff08;3.1&#xff09;、Flags-1时&#xff0c;样返回加载的图像&#xff08;使用alpha通道&#xff0c;否…...

激光线扫相机无2D图像的标定方案

方案一&#xff1a;基于运动控制平台的标定 适用场景&#xff1a;若激光线扫相机安装在可控运动平台&#xff08;如机械臂、平移台、旋转台&#xff09;上&#xff0c;且平台的运动精度已知&#xff08;例如通过编码器或高精度步进电机控制&#xff09;。 步骤&#xff1a; 标…...

【安当产品应用案例100集】034-安当KSP支持密评中存储数据的机密性和完整性

安当KSP是一套获得国密证书的专业的密钥管理系统。KSP的系统功能扩展图示如下&#xff1a; 我们知道商用密码应用安全性评估中&#xff0c;需要确保存储的数据不被篡改、删除或者破坏&#xff0c;必须采用合适的安全方案来确保存储数据的机密性和完整性。KSP能否满足这个需求呢…...

08.七种排序算法实现(C语言)

目录 一.排序的基本概念 1.1 排序的概念 1.2 常见的排序算法 二.常见排序算法的实现 2.1 插入排序&#xff08;直接&#xff09; 1.基本思想 2.直接插入排序的特性 3.代码实现 2.2 希尔排序 1.基本思想 2.希尔插入排序的特性 3.代码实现 2.3 选择排序 1.基本思想 2…...

Alibaba Spring Cloud 一 核心组件、特性

Alibaba Spring Cloud 是 Alibaba 基于 Spring Cloud 的分布式微服务解决方案&#xff0c;提供了一套高性能、高可靠的微服务开发和运维工具。它扩展了 Spring Cloud 的功能&#xff0c;并优化了许多在生产环境中的实践场景&#xff0c;例如服务发现、配置管理、熔断限流等。 …...

kafka学习笔记7 性能测试 —— 筑梦之路

kafka 不同的参数配置对 kafka 性能都会造成影响&#xff0c;通常情况下集群性能受分区、磁盘和线程等影响因素&#xff0c;因此需要进行性能测试&#xff0c;找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 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是什么&#xff1f; 首先&#xff0c;我们先要搞清楚HashMap里的的Hash是啥意思。 当我们在编程过程中&#xff0c;往往需要对线性表进行查找操作。 在顺序表中查找时&#xff0c;需要从表头开始&#xff0c;依次遍历比较a[i]与key的值是否相等&#xff…...

ETLCloud在iPaas中的是关键角色?

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…...

Docker Hub 全面解析及应对策略

在现代 DevOps 和容器化应用开发中&#xff0c;Docker Hub 是一个不可或缺的工具。然而&#xff0c;一些地区或企业对 Docker Hub 的访问受到限制&#xff0c;甚至全面禁止。这种现象引发了开发者和运维人员的广泛关注。那么&#xff0c;为什么 Docker Hub 会被禁用&#xff1f…...

第五天 Labview数据记录(5.1 INI配置文件读写)

5.1 INI配置文件读写 INI配置文件是一种简单的文本文件&#xff0c;通常用于存储软件的配置信息。它具有以下作用&#xff1a; 存储软件配置参数方便软件的维护和更新提高软件的灵活性和可扩展性便于用户修改和共享配置 5.1.1 前面板 1&#xff09;新建项目SaveData_Exampl…...

【算法】经典博弈论问题——巴什博弈 python

目录 前言巴什博弈(Bash Game)小试牛刀PN分析实战检验总结 前言 博弈类问题大致分为&#xff1a; 公平组合游戏、非公平组合游戏&#xff08;绝大多数的棋类游戏&#xff09;和 反常游戏 巴什博弈(Bash Game) 一共有n颗石子&#xff0c;两个人轮流拿&#xff0c;每次可以拿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…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...