1.MQTT ESP8266库web
菜单“项目”-“加载库”-“管理库”,搜索安装“PubSubClient”json
PubSubClient有一些示例能够打开mqtt_esp8266看下服务器
2.MQTT接发消息体验网络
这里作两个示例
1. NodeMCU发布消息:光照强度传感器测得环境光照强度发布到服务器,手机订阅该Topic接收光强信息dom
#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找到它函数