您的位置:首页 > 编程语言 > Qt开发

Esp8266进阶之路10 【小实战下篇】Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。(带Demo)

2017-12-11 22:12 811 查看
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。

2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。

3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。

4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。

5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。

6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。

7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。

8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。

9、 Esp8266进阶之路第一篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。

10、 Esp8266进阶之路第二篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。

11、 Esp8266进阶之路第三篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!

12、 Esp8266进阶之路第三篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制

13、 Esp8266进阶之路第五篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。

一、开门见山。

本文是局域网点亮一盏LED第二篇,第一篇搭建环境请到http://blog.csdn.net/xh870189248/article/details/78761948自行浏览!

这个实战的要实现的效果:控制端发送1,那么LED1就亮;发送0,那么LED1就灭;同时同步状态消息到服务器!

控制端可以是手机APP,也可以是网页端,那么本文采用的是EMQ自带的webSocket来发送指令,后期我会开发Android的MQTT客户端,敬请期待!

二、电路搭建与分析。



最小系统搭建,大家可以去乐鑫找下。淘宝也有转接板,一焊接就是最小系统了!这个实验的LED的短脚GND接到GPIO15。

当收到指令1,就给GPIO15低电平输出,那么LED就亮了!

当收到指令0,就给GPIO15高电平输出,那么LED就灭了!

三、代码分析。

1.在user_init()方法,加入GPIO15初始化,如下:

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); //选择GPIO15
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1); //默认GPIO15为高,也就是关灯


2.在mqttConnectedCb()方法里面,订阅主题:/xuhong/LED/in , 因为mqttConnectedCb()方法是8266成功连接到MQTT服务器的方法回调!

MQTT_Subscribe(client, "/xuhong/LED/in", 0);//订阅主题/xuhong/LED/in


3.在mqttDataCb()方法加入接收消息的处理代码,因为mqttDataCb()方法是接收到服务器的消息的回调方法!如下:

//接收到指令是1,GPIO15输出为低,也就是LED开灯,同时发布消息,主题是/xuhong/LED/out,信息是LED status is open ...
if (data[0] == '1') {
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);
MQTT_Publish(client, "/xuhong/LED/out", "LED status is open ...",
strlen("LED status is open ..."), 0, 0);
}

//接收到指令是0,GPIO15为高,也就是LED关灯,同时发布消息,主题是/xuhong/LED/out,信息是LED status is off ...
if (data[0] == '0') {
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
MQTT_Publish(client, "/xuhong/LED/out", "LED status is off ...",
strlen("LED status is off ..."), 0, 0);
}


四、观察现象。

先配置下上位机的处理,这里我使用的是EMQ的webSocket,打开 http://127.0.0.1:18083 ,输入名字admin,密码public,找到webSocket,配置如下:

订阅主题:/xuhong/LED/out

发送消息:主题是 /xuhong/LED/in ,消息是0或1 。



2、烧录固件到8266后,上电看串口输出:



3、服务器发送消息1或0,观察LED情况, 同时看webSocket的情况。



4、观察LED情况,。



本硬件Demo下载:http://download.csdn.net/download/xh870189248/10155035

8266汇总:https://github.com/xuhongv/StudyInEsp8266
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息