首页 > 其他分享 >连接MQTT服务器

连接MQTT服务器

时间:2023-09-09 18:13:43浏览次数:43  
标签:void wifi MQTT 服务器 Serial 连接

连接MQTT服务器

当我们的Esp8266开发板连接到网络后,我们就需要测试验证以下Esp8266连接到MQTT服务器上,让Esp8266作为一个发布者,间隔1s向服务器发送一条信息。

1.导入库函数

需要连接到MQTT服务器,我们需要使用PubSubClient库函数,因此首先添加到工程中

image-20230909172436877

2.编写代码

MQTT服务器的话可以自行搭建也可以使用注册账号连接到公共的MQTT服务器,我这里使用自行搭建的EMQX作为服务器。

#include <Arduino.h>
#include <PubSubClient.h>
#include <WiFiManager.h>
/************************************/
// 函数声明
void wifiInit();
void connectMqttServer();
void publishMqttMessage();
/************************************/
// wifi连接信息
WiFiManager wiFiManager;
char *ssid = "2002";
char *password = "15828546007";
// mqtt服务器
const char *mqttServer = "110.41.13.221";
// wifi客户端
WiFiClient wificlient;
// mqtt客户端
PubSubClient mqttclient(wificlient);
/************************************/

void setup()
{

  // 启动串口
  Serial.begin(9600);
  // wifi初始化
  wifiInit();
  // 设置mqtt服务器地址和端口号
  mqttclient.setServer(mqttServer, 1883);
  // 连接Mqtt服务器
  connectMqttServer();
}

void loop()
{
  if (mqttclient.connected())
  {
    // 发布消息
    publishMqttMessage();
    // 保持心跳
    mqttclient.loop();
  }
  else
  {
    // 则尝试连接服务器
    connectMqttServer();
  }
}
// wifi初始化
void wifiInit()
{
  // 重置设置
  // wiFiManager.resetSettings();
  // 自动配网
  // wiFiManager.autoConnect("esp8266-wifi");
  WiFi.begin(ssid,password);
  Serial.println("wifi连接中...");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.println("小主不要着急,我正在加紧连接wifi中...");
  }
  Serial.print("报告小主,wifi连接成功,IP:");
  Serial.println(WiFi.localIP());
}

// 连接mqttServer
void connectMqttServer()
{
  // 客户端id
  String clientId = "esp8266-" + WiFi.macAddress();
  // 连接mqtt服务器
  if (mqttclient.connect(clientId.c_str()))
  {
    Serial.println("报告小主,已连接到MQTT服务器");
  }
  else
  {
    Serial.println("报告小主,连接MQTT服务器失败");
    delay(1000);
  }
}
// 发布消息
void publishMqttMessage()
{
  // 发布主题
  String topicStr = "esp8266/temperature";
  char publishTopic[topicStr.length() + 1];
  strcpy(publishTopic, topicStr.c_str());
  // 发布消息
  String messageStr = "hello world";
  char publishMsg[messageStr.length() + 1];
  strcpy(publishMsg, messageStr.c_str());

  // ESP8266向主题发布信息
  if (mqttclient.publish(publishTopic, publishMsg))
  {
    delay(1000);
    Serial.println("Esp8266发布消息成功");
  }
  else
  {
    Serial.println("Esp8266发布消息失败");
  }
}

代码编写好后,下载到开发板中,查看串口打印日志。Esp8266开发板作为客户端,间隔1s向服务器发送一条消息

image-20230909172934433

3.消费者MQTTX

使用MQTTX客户端工作作为我们的消费者,ESP8266作为发布者发布消息,MQTTX作为消费者,订阅主题后来消费该消息

image-20230909174356985

4.登陆EMQX服务器

登陆服务器查看,我们的Esp8266连接到服务器上查看相关信息

image-20230909174736395

image-20230909174836514

标签:void,wifi,MQTT,服务器,Serial,连接
From: https://www.cnblogs.com/seanRay/p/17689922.html

相关文章

  • WebVM:无需后端服务器直接在浏览器中实现的无服务器环境
    https://www.jdon.com/58800.html我们创建了一个无服务器的虚拟Linux环境,在浏览器中运行未经修改的Debian二进制文件。这由WebAssembly虚拟化平台CheerpX提供支持。WebAssembly为浏览器世界带来了真正的创新,以及视角和责任的转变。我们相信 JIT编译的WebAssembly是实......
  • 使用IDEA连接Hive数据库使用Java代码实现增删改查还需要一个Hive配置类
    可以取名为:HiveConfig--packagecom.example.config;importcom.alibaba.druid.pool.DruidDataSource;importlombok.Data;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.context.properties.ConfigurationProperties;i......
  • 服务器上安装kubectl
    1、登录服务器2、创建~/.kube文件夹3、cd~/.kube4、下载或创建k8s集群的config文件:wget config文件连接apiVersion:v1kind:Configclusters:-cluster:api-version:v1insecure-skip-tls-verify:trueserver:"https://172.172.241.170:8080/r/projects/1a9/......
  • 设置一台新服务器允许root用户登录
    操作如下:1.使用ubuntu用户登陆2.运行sudopasswdroot 要求输入密码和确认密码3.sudovi/etc/ssh/sshd_config修改ssh配置找到 #PermitRootLoginprohibit-password修改为 PermitRootLoginyes按esc:wq!保存退出4.重启ssh服务sudoservicesshrestart......
  • linux DNS服务器配置
    1、yuminstall-ybind   安装域名服务vim/etc/named.conf这个服务使用 /etc/named.conf 作为配置文件。BIND在那个文件中使用像下面这样的一些语句:options:用于全局BIND配置。logging:配置哪些需要记录,哪些需要忽略。我推荐你看看 Linuxsyslogserver。zone:定......
  • Navicat连接oracle时,提示oracle library is not loaded
    一、背景本机配置:win764位本机同时安装了oracle服务器端和客户端服务器端:11gR2; 客户端:oracle10g32位(由于项目需要,必须安装此客户端) 二、报错描述先安装的11gR2,用Navicat连接正常,后面再安装10g32位的客户端后,连接报错:oraclelibraryisnotloaded 三、报错原因因为......
  • 字符串连接原理
    title:字符串连接原理index_img:img/2.svgtags:-JavaSE-字符串categories:-JavaSEhide:falseexcerpt:字符串拼接方式、效率、对象使用+运算符无变量参与运行前就直接拼接为一个字符串publicclassMain{publicstaticvoidmain(String[]arg......
  • idrac登陆dell服务器 提示ssl错误解决方法
    1、使用idrac登陆dell服务器,提示ssl登陆错误,SSLmisserror错误2、勾选SSL以及TLS全选(兼容全部加密证书类型)3、edge使用IE模式访问......
  • AWS配置一个工具可以连接的kubeconfig
    问题:因为eks的kubeconfig是动态生成User和IAM绑定的,所以工具无法直接连解决方案:终端创建# 创建一个命名空间kubectlcreatensvela-system# 创建一个sa账号kubectlcreatesakubevela-vela-core-nvela-system# 把sa账号(kubevela-vela-core)与cluster-admin这个具有管理员权限......
  • ES6 Module模块,在vsCode中已服务器模式运行HTML文件
    操作步骤如下:一、安装LiveServer插件二、点击扩展设置三、设置liveserver默认打开浏览器为“chrome”四、配置-工作区五、在HTML文件中,右键选择"openwithLiveServer" 输出结果 ......