本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
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的 FreeRtos系统学习的正确姿势 —— 环境搭建、烧录。
15、 Esp8266进阶之路第七篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第八篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第九篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第十篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第十一篇【外设篇】: esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
一、前言。
时间年末,真的是越来越忙啦。广东的天气越来越冷了,各位朋友注意保暖~。最近发现创立的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