通过MQTT消息远程开关灯
在读这篇文章之前,请先阅读前一篇关于NodeMcu的安装和配置的文章,在进行本篇文章之前,请先通过项目-》加载库-》管理库安装本篇文章需要用到的两个库。
ArduinoJson
这个库主要用于处理字符串和json格式之间的转换,因为我们后期可能希望我们单片机可以和网页或者其他平台通讯,因此我们采用了json格式来做数据交换。
PubSubClient
主要用于处理和MQTT服务器之间的通讯,订阅,发布消息等等。
安装好上面的库之后,按照前面文章所述配置好开发板,然后通过数据线联通好开发板。下面我们就要开始上代码了。
首先导入刚才的库。
#include
#include
#include
然后配置wifi参数,MQTT服务器的一些参数。
int pinLED = D2;
const char* ssid = "akinggw";//连接的路由器的名字
const char* password = "akinggw12";//连接的路由器的密码
const char* mqtt_server = "mq.tongxinmao.com";//服务器的地址
const int port=18830;//服务器端口号
WiFiClient espClient;
PubSubClient client(espClient);
连接wifi的代码:
void setup_wifi() {//自动连WIFI接入网络
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("connectiong...");
}
Serial.println("connectied.");
}
连接Mqtt服务器的代码:
void reconnect() {//等待,直到连接上服务器
while (!client.connected()) {//如果没有连接上
if (client.connect("biloba")+random(999999999)) {//接入时的用户名,尽量取一个很不常用的用户名
Serial.println("mqtt server connected.");
client.subscribe("AKINGLED");//接收外来的数据时的intopic
Serial.println("message LED subscribe success.");
} else {
Serial.println("connect mqtt server failed, rc=");//连接失败
Serial.println(client.state());//重新连接
Serial.println(" try again connect mqtt server in 5 seconds");//延时5秒后重新连接
delay(5000);
}
}
}
下面我们就开始打开串口,配置LED为输出状态,连接wifi。
void setup() {//初始化程序,只运行一遍
pinMode(BUILTIN_LED, OUTPUT); // initialize onboard LED as output
Serial.begin(9600);//设置串口波特率(与烧写用波特率不是一个概念)
setup_wifi();//自动连WIFI接入网络
client.setServer(mqtt_server, port);//端口号
client.setCallback(callback); //用于接收服务器接收的数据
}
代码还是非常简单的,详细的代码请访问我的Gitee进行下载:
https://gitee.com/akinggw/MIVMS