【分享】使用 HTTP 配置 ESP8266 连接 WIFI网络-Arduino中文社区 - Powered by Discuz! Archiver

熊掌五十块 发表于 2017-6-26 11:31

【分享】使用 HTTP 配置 ESP8266 连接 WIFI网络

本帖最后由 熊掌五十块 于 2017-6-26 11:34 编辑

======================================前言======================================
麒麟座的官方例程里面,都是通过STM32用AT指令通过ESP8266的透传去连接Onenet服务器的,那么就存在一个需要ESP8266连接到wifi网络环境,才能跟Onenet平台建立连接。而在官方例程里面,都是把wifi的SSID和PSW写死在程序里面,这样的话,如果万一要更换网络环境,就要重新更改代码里面的相应参数,再次编码并写入MCU里面,有点不方便,因此我就稍微更改了一下官方的代码,让其可以在不重编码的使用第三方APP的情况下更改连接网络的相关参数。
======================================涉及器件======================================
①麒麟座主板②STM32核心板③ESP8266④AT24c02(EEPROM,已存在于麒麟座主板上,器件编号U6)
======================================逻辑原理======================================http://upfiles.heclouds.com/forum-app/2016/08/01/c4df60aedca2dde3d95f4df311702442.png




======================================涉及库文件及代码======================================
主要库文件:①Usart2.h②Usart2.c③esp8266.h④esp8266.c⑤stm32f10x.h⑥stm32f10x2.c⑦hal_i2c.h⑧hal_i2c.c⑨at24c02.h⑩at24c02.c
代码:代码方面我做了部分增添和修改,理论上可直接替换官方例程,除了某些为了删除不必要功能而注释掉的方法调用。
关键代码:--------------------------Esp8266--------------------------

CWJAP尝试用已存在的SSID和PSW连接网络,如果成功就进入透传模式,如果失败就变更为AP模式,AP模式下的SSID为"Onenet-Config",开放连接,连接后的网关IP是 192.168.4.1

http://upfiles.heclouds.com/forum-app/2016/08/01/73faed8751ac184c7fa0c6c2baa4170e.png



http://upfiles.heclouds.com/forum-app/2016/08/01/d09d40ff3c32361ef3b7a015dc791839.png



http://upfiles.heclouds.com/forum-app/2016/08/01/9daff671008b1bfb04bd39f766b4c78d.png





    http://upfiles.heclouds.com/forum-app/2016/07/29/aac7104024551da00a2e8fa2982bd648.png




    http://upfiles.heclouds.com/forum-app/2016/07/29/4caa68a31fc1d1ad21a7e77ee841f212.png




进入AP模式后,开始监听是否有客户端连接和 http 请求配置页面,在没有请求的时候,connect_id= -1,因此判断connect_id就可以知道有没有连接请求。在main当中不断进行检测。
http://upfiles.heclouds.com/forum-app/2016/07/29/1b15ac54aac5a6c333af6a12c352f90a.png




http://upfiles.heclouds.com/forum-app/2016/07/29/89ced0705259a7870a4630003dd19b6c.png





--------------------------stm32f10x_it--------------------------
在STA模式下的时候,usart2的中断一直在收集数据流,当判断到有“+IPD”的时候,就表明有浏览器请求http连接,把连接号记录下来并保存到 connect_id,同时把配置页面的html代码填入发送变量。待下次esp8266_Echo检测到 connect 号的时候,就会把 html代码发送到该连接。
http://upfiles.heclouds.com/forum-app/2016/07/29/6068578a3424f331ab9849fc2c284c12.png




http://upfiles.heclouds.com/forum-app/2016/07/29/be21be1c7771f6c1e9873ac748aef6b7.png




http://upfiles.heclouds.com/forum-app/2016/07/29/964eeba3df349c476670656e7ed1fb93.png





http://upfiles.heclouds.com/forum-app/2016/07/29/739fca30d99bafd8e4f22f7fe388b585.png





http://upfiles.heclouds.com/forum-app/2016/07/29/d96fc06d6441770d96112d3aa6be90cf.png




填写完新的SSID 与 PSW后,点击 SUBMIT 提交,中断函数会再次截取获取到的参数,并提取新的SSID 和 PSW,在ESP8266_Echo里面把新的参数写入EEPROM,以便下次开机的时候读取。当写入完成后就会再次初始化8266并与平台建立连接。

http://upfiles.heclouds.com/forum-app/2016/07/29/5868acddd2faf993edb0108d49efb5fc.png




http://upfiles.heclouds.com/forum-app/2016/07/29/9c4866fa2cdca1c68d6c400c6bc1e912.png







===============================写在最后================================
这个方案是直接利用ESP8266的server模式,在没有成功连接wifi的时候,把自己变成一台html服务器,由STM32进行运算,因为html代码是由连接端的浏览器进行解析的,所以STM32+ESP8266只负责发送相应的html数据过去即可,最后接收回传数据并解析,写入EEPROM,即完成整个操作,但由于stm32的硬件I2C实在有点脆弱,尽可能整个包下载下来进行测试,然后根据实际需要去提取自己需要的部分,如有任何问题,欢迎留言交流O(∩_∩)O
===============================备注================================
2016-08-01    感谢 2648157436 朋友友情提醒,我原来文里的STA模式写错了,应为AP模式。特此改正。2016-08-01    因为ESP8266本身会记录上次连接wifi的信息,所以其实可以不用eeprom去记录相应的信息的,但at24c02的部分可以作参考。

Howard_dai 发表于 2019-1-7 09:56

这么长的文章没有人回复是因为大家来这里不是看谁介绍东西,而是学习。
居然你标题打得是分享,那你的源代码呢?
页: [1]
查看完整版本: 【分享】使用 HTTP 配置 ESP8266 连接 WIFI网络