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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://xuhong.blog.csdn.net/article/details/79052347

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

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进阶之路第1篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路第2篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路第3篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路第4篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路第5篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路第6篇: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路第7篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第8篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第9篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第10篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第11篇esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路第12篇深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路第13篇浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路第14篇esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路第15篇再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路第16篇渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路第17篇深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路第18篇RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路第19篇跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路第20篇教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路第21篇百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接,支持阿里云规则引擎。
30、 Esp8266进阶之路第22篇乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路第23篇当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。


  • 很多人怎么联系我一起学习进步,下面打个小小公告:

玩转esp8266带你飞、加群付费QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32


目录:


一、前言。


时间年末,真的是越来越忙啦。广东的天气越来越冷了,各位朋友注意保暖~。最近发现创立的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 配网串口输出截图。

这里写图片描述


这里写图片描述


四、爬坑记录。


    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

展开阅读全文

没有更多推荐了,返回首页