使用arduino编写mqtt客户端连接emqx服务器

news2024/9/26 3:23:50

摘要:mqtt客户端可以有很多种,本文介绍一种使用arduino d1(esp8266)制作的客户端,连接emqx服务器的方法。

 首先需要配置开发环境,配置方法可以参考文章

(1条消息) 使用arduino开发esp8266和esp32时首选项设置方法(附国内开发板管理网址)_TMS320VC5257H的博客-CSDN博客_esp32开发板管理器网址icon-default.png?t=M85Bhttps://blog.csdn.net/youngwah292/article/details/125820767?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166926413816782425673674%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166926413816782425673674&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-125820767-null-null.nonecase&utm_term=arduino&spm=1018.2226.3001.4450本文介绍的是使用d1模块连接本地的MQTT服务器,假如需要了解如何连接阿里云物联网平台,可以参考文章

(1条消息) 从arduino板开始做到阿里云app控制--WeMos D1或ESP8266连接阿里云文章合集及源代码_TMS320VC5257H的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/youngwah292/article/details/105855714?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166926413816782425673674%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166926413816782425673674&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-15-105855714-null-null.nonecase&utm_term=arduino&spm=1018.2226.3001.4450

源代码如下:编译之前请确定板级支持包和mqtt库是否正确加载。下面这个源代码经过测试是没问题的,如果遇到编译不通过的问题,请仔细查找环境配置方面的问题。

#include <ESP8266WiFi.h>
#include <PubSubClient.h>



const char* ssid = "TP-LINK_XXXX";//在此输入WIFI的名称
const char* password = "XXXXXXXXX";//在此输入WIFI的密码
const char* mqtt_server = "192.168.1.3";//这个是MQTT服务器的IP地址,以实际为准

WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE	(50)
char msg[MSG_BUFFER_SIZE];
int value = 0;

void setup_wifi() {

  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  // 如果订阅的主题,第一个字符是1,那么就拉低LED引脚,此时LED就点亮了,具体以实际电路为准,也可能拉高才是点亮
  if ((char)payload[0] == '1') {
    digitalWrite(BUILTIN_LED, LOW);   
  } else {
    digitalWrite(BUILTIN_LED, HIGH);  
  }

}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // 创建一个随机数后缀的客户端名字
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // 
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      // 一旦连接上了,就发布一个主题,这个主题是自定义的,您可以在自己的MQTT服务器进行查看
      client.publish("testtopic/2", "hello world");
      // subscribe是订阅的意思,MQTT通信的核心就是“订阅+发布”
      client.subscribe("testtopic/#");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);   
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);//端口号是1883,这个不用动,一般都是它
  client.setCallback(callback);
}

void loop() {

  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  unsigned long now = millis();
  if (now - lastMsg > 2000) {
    lastMsg = now;
    value = random(1,50);//生成一个随机数
    snprintf (msg, MSG_BUFFER_SIZE, "%ld", value);//将随机数转变成为字符串
    Serial.print("Publish message: ");
    Serial.println(msg);
    client.publish("testtopic/2", msg);//发布这个随机数
  }
}

烧录成功后,使用arduino自带的串口终端观察数据可以看到数据。

 登录EMQX服务器,查看当前连接的客户端列表,当出现下图红框所示的客户端ID时,就证明已经成功连接。当PC端的服务器连接到路由器的有线部分,而D1连接的是无线,二者尽管不在同一个网段(大多数家用的路由器都是这样的),但是他们仍然可以互相访问。所以可以看到连接成功了。

 然后登录websocket客户端,连接服务器,并订阅testtopic/#主题,就可以实时看到D1发送的数据了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美容美发店会员管理系统开发_分享美容美发店做会员管理系统的好处

为什么都在做美容美发店会员管理系统&#xff1f; 最主要的目的就是将新客留住&#xff0c;并通过各种会员福利发展成愿意多次消费的长期会员。 美容美发店作为服务类行业&#xff0c;吃的大部分都是回头客的盈利&#xff0c;而回头客的消费意愿&#xff0c;也普遍会比新客要…

Executor接口实现线程池管理

从JDK5开始&#xff0c;在java.util.concurrent包下增加了Executor接口及其子类&#xff0c;允许使用线程池技术来管理线程并发问题。Executor接口提供了一个常用的ExecutorService子接口&#xff0c;通过该子接口可以很方便地进行线程池管理。 通过Executor接口实现线程池管理…

LeetCode 0529. 扫雷游戏

【LetMeFly】529.扫雷游戏 力扣题目链接&#xff1a;https://leetcode.cn/problems/minesweeper/ 让我们一起来玩扫雷游戏&#xff01; 给你一个大小为 m x n 二维字符矩阵 board &#xff0c;表示扫雷游戏的盘面&#xff0c;其中&#xff1a; M 代表一个 未挖出的 地雷&am…

【前端】博客系统——简单的页面设计

前端 传送门【前端】HTML入门 —— HTML的常见标签 【前端】CSS(1) —— CSS的基本语法和一些简单的选择器 博客系统 (简单的页面设计)目录页面介绍效果预览代码实现实现博客列表页实现导航栏 版心实现导航栏 部分版心样式实现列表页版心样式实现博客正文页实现导航栏 版心…

基于ghOSt用户调度器的环境搭建

文章目录ghOSt环境搭建编译安装ghOSt内核使用ghOSt用户空间组件ghOSt环境搭建 资源: ghOSt-kernel:https://github.com/google/ghost-kernelghOSt-userspace:https://github.com/google/ghost-userspace论文原文&#xff1a;https://dl.acm.org/doi/abs/10.1145/3477132.348354…

[网络] https是什么?https是怎么保障我们信息传输的安全的?

文章目录前言HTTPs是什么&#xff1f;TLS是什么&#xff1f;协议栈对比&#xff1a;HTTPs vs HTTP万能的TLS协议TLS如何保障我们的通信安全的&#xff1f;对称加密和非对称加密的优缺点对称加密方式密钥易泄露的问题改良版之混合加密TLS中混合加密的应用附&#xff1a;有时候会…

pytorch的buffer学习整理

pytorch模型中的buffer 这段时间忙于做项目&#xff0c;但是在项目中一直在模型构建中遇到buffer数据&#xff0c;所以花点时间整理下模型中的parameter和buffer数据的区别&#x1f495; 1.torch.nn.Module.named_buffers(prefix‘‘, recurseTrue) 贴上pytorch官网对其的说…

sqli-labs/Less-52

这一关输入几次rand()页面发生了改变 说明这一关的注入类型属于数字型注入 接着尝试一下报错注入 输入如下 sortupdatexml(1,if(11,concat(0x7e,database(),0x7e),1),1)-- 发现没有回显 显然不能使用报错注入 只能使用盲注了 这一关我们通过rand()函数的形式来实现盲注 首先…

HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

SPC5777CDK3MMO4 IC MCU 32BIT,SPC5777CDK3MME3

MPC5777C Power Architecture 微控制器是一款高性能多核MCU&#xff0c;优化用于要求先进性能、计时系统、安全性和功能性安全能力的工业和汽车控制应用。MPC5777C设有两个独立的Power Architecture z7内核&#xff08;运行速度高达300MHz&#xff09;以及一个z7内核&#xff0…

搜索技术——盲目与启发

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 搜索是人工智能中的一个基本问题&#xff0c;并与推理密切相关。搜索策略的优劣将直接影响到智能系统的性能与推理效率。 一&#xff1a;搜索的基本概念 搜索&#xff1a;根据问题的实际…

Linux openvino 环境搭建遇见的问题

1.编译openvino源码,报错&#xff08;PythonLibsNew&#xff09; 通过报错路径结合cmakeLists.txt发现,有个文件夹内容为空导致的&#xff0c;因此需要单独下载对应的文件&#xff08;这个文件夹藏的比较深&#xff0c;之前没有注意到&#xff0c;只关注openvino/thridparty下&…

(附源码)计算机毕业设计JavaJava毕设项目财务管理系统的设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

膜前氟离子超标的解决方法,除氟离子技术

原水氟化物浓度在150mg/l左右&#xff0c;处理水量大概在30m/h&#xff0c;要求出水氟化物浓度要小于10mg/l&#xff0c;同时呢对出水稳定性方面要求也非常严格。 “预过滤系统离子交换除氟反渗透系统超纯水系统”的工艺&#xff0c;利用季胺1型官能团选择性吸附氟化物&#x…

Nginx负载均衡配置、限流配置、Https配置详解

一. 负载均衡 1. 用法 通过proxy_pass 可以把请求代理至后端服务&#xff0c;但是为了实现更高的负载及性能&#xff0c; 我们的后端服务通常是多个&#xff0c; 这个是时候可以通过upstream 模块实现负载均衡。 使用的模块为&#xff1a;【ngx_http_upstream_module】&#…

股票买卖明细接口是怎样实现查询交易数据的?

股票买卖明细接口作为软件应用而言&#xff0c;很多资源和数据不一定就是由其自身提供的&#xff0c;所以说某些功能还是需要调用第三方提供的服务&#xff0c;这其中就涉及到API接口的调用。也就是说&#xff0c;股票买卖明细接口是与数据端直接挂钩的&#xff0c;通过一些量化…

大数据毕设选题 - 招聘岗位数据分析可视化(python 爬虫)

文章目录1 前言1 课题背景2 实现效果3 项目实现3.1 概述3.2 数据采集3.3 数据清洗与预处理4 数据分析与可视化Flask框架介绍5 最后1 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学…

Head First设计模式(阅读笔记)-03.装饰者模式

星巴兹咖啡 咖啡存在许多的种类&#xff0c;同时也有不同的调料。此时用户可以单点咖啡&#xff0c;也可以点咖啡调料&#xff0c;请计算费用(这里咖啡和调料都属于Drink的一类) 简单实现 方案1 每出现一种组合就实现一个类&#xff0c;但是每次增加一个咖啡种类或者一个新的调…

Centos7通过SSH使用密钥实现免密登录

Centos7通过SSH使用密钥实现免密登录 日常开发中,难免会有登录服务器的操作,而通过ssh方式登录无疑是比较方便的一种方式。 如果登录较频繁,使用密钥实现免密登录无疑更是方便中的方便。因此本文就简单说一说如何实现免密登录。一、安装配置ssh服务 默认情况下Centos7是安装…

推荐一款制作精良、功能强大、毫秒级精度的定时任务执行软件

目录 一、定时执行专家 - 功能详细 二、定时执行专家 - 最新版下载 三、定时执行专家 - 更新日志 四、关键字/Keyword 一、定时执行专家 - 功能详细 1、支持多种触发方式&#xff08;定时方式&#xff09;&#xff1a;倒计时执行、持续执行、键盘鼠标空闲指定时长时执行、…