使用Web页面配置ESP8266的参数
前言
使用Web页面配置ESP8266的参数相对于使用串口AT指令配置更加直观和简单。与配置路由器方式类似。
基本思路
基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Client的连接。因为网页HTTP默认的端口是80,所以ESP8266作为TCP Server的端口需要设置为80。电脑连接上ESP8266的AP后,网页访问默认IP地址192.168.4.1,此时ESP8266就会收到来自网页的HTTP的Get请求,此请求数据为HTML格式。ESP8266收到请求后,读出保存在Flash中的HTML格式网页,并将带有HTML应答头的HTML网页发送给网页,网页端就可以显示出网页。下面是具体实现步骤:
开发环境
- ESP8266 SDK版本:ESP8266_NONOS_SDK_2.0.0
- IDE:ESP8266 IDE v2.0
- 操作系统:64位 Win7
步骤
1. 设置ESP8266工作模式
设置为AP模式,并设置AP模式下的参数,作为TCP Server,注册连接回调函数,监听TCP Client的连接。具体不详述。
void ICACHE_FLASH_ATTR
user_init(void)
{
os_printf("SDK version:%s\r\n", system_get_sdk_version());
os_printf("Compile time:%s %s\r\n", __DATE__, __TIME__); wifi_set_opmode(STATIONAP_MODE);
// ESP8266 softAP set config.
user_set_softap_config(); user_webserver_init(SERVER_PORT);
}
void ICACHE_FLASH_ATTR
user_webserver_init(uint32 port)
{
LOCAL struct espconn esp_conn;
LOCAL esp_tcp esptcp; esp_conn.type = ESPCONN_TCP;
esp_conn.state = ESPCONN_NONE;
esp_conn.proto.tcp = &esptcp;
esp_conn.proto.tcp->local_port = port;
espconn_regist_connectcb(&esp_conn, webserver_listen); espconn_accept(&esp_conn);
}
2. 在连接回调函数中注册接收回调函数,在接收回调函数中处理Client发送的数据
LOCAL void ICACHE_FLASH_ATTR
webserver_listen(void *arg)
{
struct espconn *pesp_conn = arg; espconn_regist_recvcb(pesp_conn, webserver_recv);
espconn_regist_reconcb(pesp_conn, webserver_recon);
espconn_regist_disconcb(pesp_conn, webserver_discon);
espconn_regist_sentcb(pesp_conn, webserver_sent);
}
3. 带无线网卡的电脑连接ESP8266的AP,并在路由器中输入192.168.4.1
此时浏览器会将HTML格式的GET请求发送给TCP Server。这时网页是显示错误的,因为TCP Server并没有上传网页到Web端。可以使用HttpWatch这个IE浏览器插件抓取网页发送的GET请求数据。

4. 在TCP Server接收函数中实现解析GET请求并上传保存在Flash中的HTML网页
这里主要是解析HTML格式字符串,请求网页的那个GET请求时不带Filename的,需要区别不同的GET请求,具体看网页实现。如果是GET请求网页,就从Flash中读取保存的网页,并通过HTML格式发送给网页端,然后就可以显示出网页了。
void ICACHE_FLASH_ATTR
webserver_recv(void *arg, char *pusrdata, unsigned short length)
{
URL_Frame *pURL_Frame = NULL;
char *pParseBuffer = NULL;
char *index = NULL;
SpiFlashOpResult ret = ; USER_DBG("len:%u\r\n",length);
USER_DBG("Webserver recv:-------------------------------\r\n%s\r\n", pusrdata); pURL_Frame = (URL_Frame *)os_zalloc(sizeof(URL_Frame));
parse_url(pusrdata, pURL_Frame); switch (pURL_Frame->Type) {
case GET:
USER_DBG("We have a GET request.\r\n"); if(pURL_Frame->pFilename[] == ){
index = (char *)os_zalloc(FLASH_READ_SIZE+);
if(index == NULL){
ERR_LOG("os_zalloc error!\r\n");
goto _temp_exit;
} // Flash read/write has to be aligned to the 4-bytes boundary
ret = spi_flash_read(0xD0*SPI_FLASH_SEC_SIZE, (uint32 *)index, FLASH_READ_SIZE); // start address:0x10000 + 0xC0000
if(ret != SPI_FLASH_RESULT_OK){
ERR_LOG("spi_flash_read err:%d\r\n", ret);
os_free(index);
index = NULL;
goto _temp_exit;
} index[HTML_FILE_SIZE] = ; // put 0 to the end
data_send(arg, true, index); os_free(index);
index = NULL;
}
break; case POST:
USER_DBG("We have a POST request.\r\n"); pParseBuffer = (char *)os_strstr(pusrdata, "\r\n\r\n");
if (pParseBuffer == NULL) {
data_send(arg, false, NULL);
break;
}
// Prase the POST data ...
break;
} _temp_exit:
;
if(pURL_Frame != NULL){
os_free(pURL_Frame);
pURL_Frame = NULL;
}
}
5. 网页配置就是POST请求,网页发送HTML格式的POST请求,ESP8266解析数据并作出设置。
POST请求数据中的Content内容可以是自定也格式,一般使用json格式比较好。这里就详细列出如何处理了。ESP8266 SDK的IOT demo中有HTML格式的解析以及回应HTML格式数据的例程,可以参考。
注意点
网页是通过烧录固件的工具烧录到Flash的。当时如何把网页的数据保存到Flash中这个问题困扰我很久,网上找很久都没有具体说明,是直接将xx.html文件烧录到Flash中的,此Flash空间是用户可用区间,具体见官方文档。不同Flash都是不同的,这个地址也是需要记下的,SPI读取时需要用到,文件大小也是需要记下。下面是32Mbit 的Flash的烧录截图。

使用Web页面配置ESP8266的参数的更多相关文章
- 自学Aruba6.1-基本网络参数配置(web页面配置)
点击返回:自学Aruba之路 自学Aruba6.1-基本网络参数配置(web页面配置) 1 配置VLAN 1.1 新建VLAN Configuration---VLANs中,VLANID选项卡下的A ...
- 自学Aruba6.2-控制器基本维护操作(web页面配置)
点击返回:自学Aruba之路 自学Aruba6.2-控制器基本维护操作(web页面配置) 1 显示当前控制器版本 Dashboard---Controller中 2 升级Aruab os版本 Main ...
- 自学Aruba6.3-账号管理(web页面配置)
点击返回:自学Aruba之路 自学Aruba6.3-账号管理(web页面配置) 1 管理员账号管理 Configuration---Administrator中 角色名称 说明 root 该角色允许管 ...
- 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置) 步骤1 建立AP Group,命名为test-group 步骤2 将AP加入到AP G ...
- 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.2-Aruba安全认证-Portal认证(web页面配置) 步骤1 建立AP Group,命名为testportal-group 步骤2 将AP加入到 ...
- 自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置) 步骤1 建立AP Group,命名为test802-group 步骤2 将AP加入到AP ...
- 自学Aruba7.4-Aruba安全认证-MAC认证(web页面配置)
点击返回:自学Aruba之路 自学Aruba7.4-Aruba安全认证-MAC认证(web页面配置) 由于前三节已经讲述了3种如何web页面配置安全认证,MAC认证就不过多讲解重复的步骤. 步骤1 ...
- 在过滤器中获取在web.xml配置的初始化参数
在过滤器中获取在web.xml配置的初始化参数 例如 <filter> <filter-name>cross-origin</filter-name> < ...
- servlet-获取web.xml配置的init-param参数
1.web.xml配置的参数 <servlet> <servlet-name>firstServlet</servlet-name> <servlet-cla ...
随机推荐
- kotlin语言使用初体验(一)
居说谷歌新认的干儿子kotlin极为受宠,隐隐有替代Java在 android平台老大位置的趋势.kotlin有谷歌撑腰,加上自己的底子也厚,再之与Java无缝兼容,将来在流行的编程语言中占有一席之地 ...
- 【注意事项】APP左右横滑设计
移动端屏幕越来越大,但用户对内容量的要求也水涨船高.如何在有限的屏幕内透出更多的内容,是设计师们研究的重点. 常用的内容拓展设计有:Y 方向 List 滑动.Z 方向 3D Touch .入口式内容折 ...
- 初码-Azure系列-文章目录
系统迁移 初码-Azure系列-记一次MySQL数据库向Azure的迁移 初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考 初码-Azure系列-记一次从阿里云到Azure的迁移和 ...
- 支付宝支付-常用支付API详解(查询、退款、提现等)
所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...
- storm定时任务【tick】
一. 简介 storm作为流计算,处理数据通常以数据驱动.即只有当spout发射数据才会进行计算.那么如果想要做定时任务如何处理哪,例如有的bolt需要输出一段时间统计的结果,这里一段时间可 ...
- 543. Diameter of Binary Tree
https://leetcode.com/problems/diameter-of-binary-tree/#/description Given a binary tree, you need to ...
- jQuery链式操作如何返回上一级DOM
有时候我们在链式操作的时候,选择到了其他的DOM进行操作,如何再返回先前的dom呢,有一下几个方法,end(); addBack(); add(); 使用形式 $("#divFather&q ...
- 【Windows 10 应用开发】使用快捷访问键
UWP 虽然主要面向触控操作,但 Windows 设备是万能工具,不用手指不用笔的时候,也可能会接上键盘耍耍.因此,给应用界面上的一些元素弄个快捷访问键也挺不错的.为了使用 Windows 上的各类应 ...
- ADO.NET中的DataSet和DataReader
ADO.NET提供两个对象用于检索关系型数据并把它存储在内存中,分别是DataSet和DataReader.DataSet提供内存中关系数据的表现--包括表和次序.约束等表间的关系的完整数据集合.Da ...
- 微信 python 接口 -- itchat 文档
itchat 一. 安装 $ pip install itchat 特殊的字典使用方式 通过打印 itchat 的用户以及注册消息的参数, 可以发现这些值都是字典. 但实际上 itchat 精心构造了 ...