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

Esp8266学习之旅13 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。(附带demo)

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

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服务器,实现移动网络远程控制一盏LED。

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

14、 Esp8266进阶之路第六篇: esp8266的Rtos系统学习的正确姿势 [上篇]—— 环境搭建、烧录。

一、前言。

时间年末,真的是越来越忙啦。广东的天气越来越冷了,各位朋友注意保暖~。最近发现创立的QQ群,很多加入都是寥寥所事,为了提高进一步的群人员质量,我决定设置为付费加群,并不是所谓的利益!而是提高群员的素质,我不想看到一个伸手一个拿资料,并不是毫无回报的。但是这里发布的博客对应的Demo都是免费啦!望各位谅解!

小徐 2018-1-13  17:03


1.1 操作步骤。

图片不清晰,请放大浏览器浏览倍数!关于MQTT和smartConfig不懂,请认真看看我的8266系列博文!

如果您的8266设备第一次配网或者您想改变已经连接的wifi路由,请点击按键,同时手机APP输入账号和密码,点击搜索!

设备配网成功后,红灯灭。否则红灯一直亮!

控制端发送0或1,控制设备开关灯!此灯是绿灯!

本次实验的是webSocket也就是服务器提供的,实现上位机的操作,如果你会安卓开发,可以尝试从我的上几天发布的博客实现Android上位机!



1.2 电路图;

其实本博文和我写的这篇 小实战MQTT 是差不多的,只是在MQTT的demo之上加了个smartConfig功能,可以实现不用写死了密码在代码里面!



二、部分代码。

2.1 首先我们在
user_main()
先初始化GPIO口。

//LED初始化
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); //选择GPIO15,此GPIO连接是绿灯
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1); //默认GPIO15为高,也就是关灯

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //选择GPIO12,此GPIO连接是红灯
GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0); //默认GPIO12为高,也就是开灯,表示配网不成功!


2.2 在
user_main()
定义不断轮询是否连接网络的定时器,回调函数 Check_WifiState()。

os_timer_disarm(&checkTimer_wifistate); //启动定时器前先取消定时器定时
os_timer_setfn(&checkTimer_wifistate, (os_timer_func_t *) Check_WifiState,
NULL);  //设置定时器回调函数
os_timer_arm(&checkTimer_wifistate, 1000, 1);   //启动定时器


2.3 在
Check_WifiState()
查询当前网络状态。如果已经连接则关闭红灯!

void Check_WifiState(void) {
uint8 getState;
struct ip_info ipConfig;
wifi_get_ip_info(STATION_IF, &ipConfig);
getState = wifi_station_get_connect_status();

//查询 ESP8266 WiFi station 接口连接 AP 的状态
if (getState == STATION_GOT_IP && ipConfig.ip.addr != 0) {
os_printf("----- wifi 连接成功! 红灯关闭啦啦!---\r\n");
GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);

os_printf("----- wifi 连接成功! 断开定时器啦!---\r\n");
os_timer_disarm(&checkTimer_wifistate);
sntp_setservername(0, "pool.ntp.org"); // set sntp server after got ip address
sntp_init();
os_timer_disarm(&sntp_timer);
os_timer_setfn(&sntp_timer, (os_timer_func_t *) sntpfn, NULL);
os_timer_arm(&sntp_timer, 1000, 1); //1s

}
}


2.4 同样 在
user_main()
初始化按键,以及按键的点按回调函数!

keyInit();


2.5 按键的点按回调函数。

LOCAL void ICACHE_FLASH_ATTR keyShortPress(void) {
os_printf("---------- 按键触发 ,开始进去SmartConfig配网 \n\n\n-----");
smartconfig_init();
}


2.6 收到服务器下发数据的处理。

void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len,
const char *data, uint32_t data_len) {

MQTT_Client* client = (MQTT_Client*) args;

//如果接收到指令是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);
}

}


三、截图。

3.1 配网串口输出截图。





四、爬坑记录。

8266遇到开启smartConfig 时候,发现提示 err3,exceed max time value 。解决方法为把NONO_SDK退回到2.1.0版本,可以去乐鑫官网下载,不是GitHub下载!



截止今天2018-01-15为止,我已经联系乐鑫官方人员修改Bug,已经修复啦!!GitHub的v2.2.0版本也可以用了。

爬坑的与乐鑫人员的对话记录:https://github.com/espressif/ESP8266_NONOS_SDK/issues/86

本硬件Demo的基于NONOS的V2.1.0版本下载 ,另外基于V2.2.0版本的我也已经弄好,已放置在我的GitHub(下载运行前务必在mqtt_config.h 文件填写您的服务器地址):

http://download.csdn.net/download/xh870189248/10204189

已经适配Android7.0系统的乐鑫8266官方配网签名中文版:

http://download.csdn.net/download/xh870189248/10141647

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