esp8266ex java编程_esp8266物联网开发四:MQTT本地操控

本文介绍了如何使用ESP8266EX通过MQTT连接本地服务器实现LED灯的控制。首先启动MQTT服务器,然后编写包含WiFi连接和MQTT客户端的代码,设置相关参数并订阅主题。在代码烧录后,通过串口调试和本地MQTT客户端发送控制指令(1为开灯,0为关灯),成功实现了LED的远程操控。
摘要由CSDN通过智能技术生成

之前利用点灯科技的库来使小爱同学控制LED的过程中,我们大略提到了一下MQTT的整体流程,由于其MQTT服务器是由点灯科技提供的,所以对其中的很多连接细节,我们并不知道,本节我们准备通过搭建本地的MQTT服务器,然后通过MQTT Client向MQTT服务器发送控制命令,来控制我们的LED灯。

首先,我们需要启动MQTT服务器,启动方式我们就不需要多说了,之前章节有讲解,启动完毕之后,其连接地址为:192.168.43.2:1883,切记连接地址不可写成127.0.0.1,否则无法连接成功。

然后,开始进行编码操作,具体编码内容如下:

#include #include

#define JDQ 16

const char* MQTT_SERVER = "192.168.43.2";const int MQTT_PORT = 1883;const char* MQTT_USRNAME = "addmin";const char* MQTT_PASSWD = "public";const char* TOPIC = "home/devices/onoff/";const char* CLIENT_ID = "scy-mqtt-client"; //当前设备的clientid标志

const char* ssid = "cxsr"; //待连接WIFI

const char* password = "scy251147";//待连接WIFI密码

WiFiClient espClient;

PubSubClient client(espClient);long lastMsg = 0;/**

* 连接wifi*/

voidsetupWifi(){

delay(100);

Serial.println("Startup");

pinMode(JDQ, OUTPUT);

WiFi.mode(WIFI_STA);//设置模式为STA

WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {//等待WiFi连接成功

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address:");

Serial.println(WiFi.localIP());

}voidreconnect() {while (!client.connected()) {

Serial.print("Attempting MQTT connection...");//Attempt to connect

if(client.connect(CLIENT_ID)) {

Serial.println("connected");//连接成功时订阅主题

client.subscribe(TOPIC);

}else{

Serial.print("failed, rc=");

Serial.print(client.state());

Serial.println("try again in 5 seconds");//Wait 5 seconds before retrying

delay(5000);

}

}

}void callback(char* topic, byte* payload, unsigned intlength) {

Serial.print("Message arrived [");

Serial.print(topic);//打印主题信息

Serial.print("]");for (int i = 0; i < length; i++) {

Serial.print((char)payload[i]); //打印主题内容

}if ((char)payload[0] == '1') {

digitalWrite(JDQ, HIGH);//亮灯

Serial.print("开灯");

}else{

digitalWrite(JDQ, LOW);//熄灯

Serial.print("关灯");

}

Serial.println();

}voidsetup() {

Serial.begin(115200);

pinMode(JDQ, OUTPUT);

setupWifi();

client.setServer(MQTT_SERVER, MQTT_PORT);//设定MQTT服务器与使用的端口,1883是默认的MQTT端口

client.setCallback(callback); //设定回调方式,当ESP8266收到订阅消息时会调用此方法

}voidloop() {if (!client.connected()) {

reconnect();

}

client.loop();

}

需要说明的是,在执行过程中,将会先进行联网操作,然后进行连接MQTT服务端的操作,这俩操作都进行完毕之后,我们就可以通过MQTT Client来进行控制了。

代码烧写完毕后,通过串口调试窗口,我们可以看到具体的连接情况:

3b1b991ad93ebfffdb6c920e51ef69c7.png

之后,我们打开本地的MQTT Client,连接到home/devices/onoff/主题,连接成功后,发送控制代码:

b9801b0c5466043b481547be525dad09.png

这里我发送了1,代表打开继电器,也就是开灯操作,可以看到,灯被我们打开了:

40aa8133784a988a210462f9d5d3ad25.png

当发送0的时候,代表继电器关闭,灯就关了,如图:

f437e330c1b258c5b1ad77dd6ddcdb09.png

255b3785573bfa2c2a68d7fa193a1a3d.png

这时候,我们的串口监视器上,可以看到打印的日志如下:

376754c30dd8519d3894a4abba70bf0b.png

是不是很好用呢?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值