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系统学习的正确姿势 [上篇]—— 环境搭建、烧录。
如果您的8266设备第一次配网或者您想改变已经连接的wifi路由,请点击按键,同时手机APP输入账号和密码,点击搜索!
设备配网成功后,红灯灭。否则红灯一直亮!
控制端发送0或1,控制设备开关灯!此灯是绿灯!
本次实验的是webSocket也就是服务器提供的,实现上位机的操作,如果你会安卓开发,可以尝试从我的上几天发布的博客实现Android上位机!
2.2 在
2.3 在
2.4 同样 在
2.5 按键的点按回调函数。
2.6 收到服务器下发数据的处理。
本硬件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
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
相关文章推荐
- Esp8266学习之旅④ 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。(附带demo)
- Android网络开发回顾之旅 ① 在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。(附带Demo)
- Esp8266学习之旅③ 利用 " 软件定时器 "或“硬件定时器” 定时0.5秒闪烁点亮一盏LED。(附带demo)
- Esp8266进阶之路⑨ 【小实战上篇】Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。(带Demo)
- web采用MQTT协议远程控制LED灯
- 【酱菜创客】ESP8266连接服务器实现远程控制LED灯
- ESP8266-01之NodeMCU(lua)实现远程控制LED灯
- QT采用MQTT协议远程控制LED灯
- Esp8266进阶之路10 【小实战下篇】Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。(带Demo)
- MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制
- MQTT协议实现Eclipse Paho学习总结一
- NodeMCU实现远程控制LED灯
- ESP8266 WIFI模块实现远程wifi控制
- STM32F103VET6_ ESP8266-12F 手机或笔记本电脑WIFI控制LED的实现
- 外网远程控制LED小灯的实现
- 树莓派学习笔记——yeelink 远程控制LED
- PHP再学习5——RESTFul框架 远程控制LED
- NodeMCU实现远程控制LED灯
- 轻量级远程调用框架-Hessian学习笔记-Demo实现