1 MQTT服务器硬件模块html
2 MQTT服务器电脑搭建git
2.1本身搭建web
2.2租阿里云服务器json
2 MQTT服务器手机控制端服务器
1 硬件 网络
2 服务器app
十、 Esp8266进阶之路第二篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。dom
十一、 Esp8266进阶之路第三篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!编辑器
十二、 Esp8266进阶之路第四篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制函数
1三、 Esp8266进阶之路第五篇: 动手作个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
3 手机
3.2手机端具体开发--------(一)基于阿里云的MQTT远程控制(Android 链接MQTT服务器,ESP8266链接MQTT服务器实现远程通讯控制----简单的链接通讯)
先要安装Arduino IDE For ESP8266
Arduino IDE For ESP8266是根据Arduino修改的专门烧写ESP8266开发板的IDE。在装好Arduino IDE后:
打开Arduino 文件->首选项,在 附加开发管理网站 中填入
菜单“项目”-“加载库”-“管理库”,搜索安装“PubSubClient”
菜单“项目”-“加载库”-“管理库”,搜索安装“PubSubClient”
PubSubClient有一些示例能够打开mqtt_esp8266看下
1. WeMos D1 mini发布消息:光照强度传感器测得环境光照强度发布到服务器,手机订阅该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找到它
2.WeMos D1 mini接收消息:链接一个led灯,用手机APP控制灯的亮度,不接受其信息
接收LED Topic的信息,接收到转换为int设置为灯的亮度,这样就实现远程app控灯。打开myMqtt的publish,输入Topic为LED,Message为灯的亮度(0-1024),能够实时控制灯(47.93.19.134)
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <math.h> const char* ssid = "dongdong";//链接的路由器的名字 const char* password = "dongdong";//链接的路由器的密码 const char* mqtt_server = "47.93.19.134";//远程服务器的地址 const int port=1883;//服务器端口号 WiFiClient espClient; PubSubClient client(espClient); char pub_topic[]="LEDback"; char rec_topic[]="LEDpwm"; int pinLED = 2; // 2号-D4 led int l=0; // 接收数据 int light=255; // 灯的亮度 char msg[100];// 发送话题 long lastMsg = 0;// 定时器,决定发送话题的时间 /* 1链接WIFI 自动连WIFI接入网络*/ void setup_wifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("..."); } } /* 2链接服务器 等待,直到链接上服务器*/ void reconnect() {//等待,直到链接上服务器 while (!client.connected()) {//若是没有链接上 if (client.connect("Esp_LED")+random(999999999)) {//接入时的用户名,尽可能取一个很不经常使用的用户名 client.subscribe(rec_topic);//接收外来的数据时的intopic client.publish(pub_topic,"hello world from dongdong"); } else { Serial.print("failed, rc=");//链接失败 Serial.print(client.state());//从新链接 Serial.println(" try again in 5 seconds");//延时5秒后从新链接 delay(5000); } } } /* 3 接收数据处理, 服务器回掉函数*/ void callback(char* topic, byte* payload, unsigned int length) {//用于接收数据 //3.1 判断数据为 开启指定LED if ((char)payload[0] == '1') { digitalWrite(4, HIGH); } else { digitalWrite(4, LOW); } // 3.2 数据转化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(light);//换行 } //4 初始化函数 void setup() {//初始化程序,只运行一遍 Serial.begin(9600);//设置串口波特率(与烧写用波特率不是一个概念) setup_wifi();//自动连WIFI接入网络 client.setServer(mqtt_server, port);//端口号 client.setCallback(callback); //用于接收服务器接收的数据 } // 5 循环主函数 void loop() {//主循环 // 5.1 初始化链接 reconnect();//确保连上服务器,不然一直等待。 // 5.2 订阅话题等待 client.loop();//MUC接收数据的主循环函数。 // 5.3 发布话题 2S long now = millis(); if (now - lastMsg > 2000) { lastMsg = now; sprintf(msg,"%ld",l); client.publish(pub_topic,msg);} //5.4 逻辑处理区域 analogWrite(pinLED,light);// 调节灯的亮度 }
接着试着用手机app订阅接收传感器发的消息(具体Android端如何实现下篇文章会讲到),在google play中下载一个myMqtt的APP,不方便的能够在这里下http://pan.baidu.com/s/1slE0cw9
打开APP,在setting中设置你服务器ip,端口等保存,若是顶部显示绿色代表链接成功,在Subscribe中订阅light主题,返回到Dashboard就能实时收到消息