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…...

窥探QCC518x-308x系列与手机之间的蓝牙HCI记录与分析 - 耳机篇
上一篇是介绍如何窥探手机端Bluetooth的HCI log, 本次介绍是如何窥探Bluetooth的HCI log-耳机篇. 这次跟QCC518x/QCC308x测试的手机是Samsung S23 Ultra. QCC518x/QCC308x透过HCI界面取得Log教学. 步骤1: 开启QMDE -> 选择ADK r1102 QCC3083 Headset workspace.步骤2: 点…...

ubuntu k8s 1.31
ubuntu 系统 设置 更新源 apt-get upgradeapt upgradeapt update apt-get update释放root sudo passwd root密码su - 密码设置root可以登录 cd /etc/ssh/sshd_config.d && vi ssh.confPermitRootLogin yes PasswordAuthentication yes:wq 保存退出 systemctl resta…...

Prometheus+grafana实践:Doris数据库的监控
文章来源:乐维社区 Doris数据库背景 Doris(Apache Doris)是一个现代化的MPP(Massive Parallel Processing,大规模并行处理)数据库,主要用于在线分析处理(OLAP)场景。 D…...

【豆包MarsCode蛇年编程大作战】花样贪吃蛇
目录 引言 展示效果 prompt提示信息 第一次提示(实现基本功能) 初次实现效果 第二次提示(美化UI) 第一次美化后的效果 第二次美化后的效果 代码展示 实现在线体验链接 码上掘金使用教程 体验地址: 花样贪吃蛇…...

企业级流程架构设计思路-基于价值链的流程架构
获取更多企业流程资料 纸上得来终觉浅,绝知此事要躬行 一.企业流程分级规则定义 1.流程分类分级的总体原则 2.完整的流程体系需要体现出流程的分类分级 03.通用的流程分级方法 04.流程分级的标准 二.企业流程架构设计原则 1.流程架构设计原则 流程框架是流程体…...

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码
AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…...

钉钉群机器人设置——python版本
钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点) 参考文档及博客:…...

细说STM32F407单片机电源低功耗StandbyMode待机模式及应用示例
目录 一、待机模式基础知识 1、进入待机模式 2、待机模式的状态 3、退出待机模式 二、待机模式应用示例 1、示例功能和CubeMX项目设置 (1) 时钟 (2) DEBUG、LED1、KeyRight、USART6、CodeGenerator (3&#x…...

IOS 安全机制拦截 window.open
摘要 在ios环境,在某些情况下执行window.open不生效 一、window.open window.open(url, target, windowFeatures) 1. url:「可选参数」,表示你要加载的资源URL或路径,如果不传,则打开一个url地址为about:blank的空…...

jmeter中对接口进行循环请求后获取相应数据
1、工作中遇到一个场景就是对某个单一接口进行循环请求,并需要获取每次请求后返回的相应数据; 2、首先就在jmeter对接口相关组件进行配置,需要组件有:循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…...