当前位置:首页 > 物联网 > 正文内容

esp8266连接mqtt服务器

西风2年前 (2022-10-24)物联网463

1.MQTT ESP8266库


菜单“项目”-“加载库”-“管理库”,搜索安装“PubSubClient”


PubSubClient有一些示例可以打开mqtt_esp8266看下


2.MQTT接发消息体验


这里做两个示例

1. NodeMCU发布消息:光照强度传感器测得环境光照强度发布到服务器,手机订阅该Topic接收光强信息

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
int pinLED = D2;
 
const char* ssid = "********";//连接的路由器的名字
const char* password = "********";//连接的路由器的密码
const char* mqtt_server = "********";//服务器的地址 
const int port=****;//服务器端口号
 
WiFiClient espClient;
PubSubClient client(espClient);
 
int light=255;
 
void setup_wifi() {//自动连WIFI接入网络
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("...");
  }
}
 
void callback(char* topic, byte* payload, unsigned int length) {//用于接收数据
  int l=0;
  int p=1;
  for (int i = length-1; i >=0; i--) {
    l+=(int)((char)payload[i]-'0')*p;
    p*=10;
  }
  light=l;
  Serial.println(l);//换行
 
}
 
void reconnect() {//等待,直到连接上服务器
  while (!client.connected()) {//如果没有连接上
    if (client.connect("biloba")+random(999999999)) {//接入时的用户名,尽量取一个很不常用的用户名
      client.subscribe("LED");//接收外来的数据时的intopic
    } else {
      Serial.print("failed, rc=");//连接失败
      Serial.print(client.state());//重新连接
      Serial.println(" try again in 5 seconds");//延时5秒后重新连接
      delay(5000);
    }
  }
}
 
 
void setup() {//初始化程序,只运行一遍
  Serial.begin(9600);//设置串口波特率(与烧写用波特率不是一个概念)
  setup_wifi();//自动连WIFI接入网络
  client.setServer(mqtt_server, port);//端口号
  client.setCallback(callback); //用于接收服务器接收的数据
}
 
 
 
void loop() {//主循环
   reconnect();//确保连上服务器,否则一直等待。
   client.loop();//MUC接收数据的主循环函数。
   analogWrite(pinLED,light);
}

先使用ESP8266WiFi库的方法连接一个wifi,连接成功后loop中获取光强并转换为json格式,发布到light的Topic主题下,可以打开服务器web管理页面,可以在Topic找到它

esp8266.jpg

扫描二维码推送至手机访问。

版权声明:本文转载自网络,如有侵权请与本站联系。

本文链接:https://blog.cnod.net/post/21.html

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。