使用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的连接。具体不详述。

 1 void ICACHE_FLASH_ATTR
 2 user_init(void)
 3 {
 4     os_printf("SDK version:%s\r\n", system_get_sdk_version());
 5     os_printf("Compile time:%s %s\r\n", __DATE__, __TIME__);
 6
 7     wifi_set_opmode(STATIONAP_MODE);
 8     // ESP8266 softAP set config.
 9     user_set_softap_config();
10
11     user_webserver_init(SERVER_PORT);
12 }
 1 void ICACHE_FLASH_ATTR
 2 user_webserver_init(uint32 port)
 3 {
 4     LOCAL struct espconn esp_conn;
 5     LOCAL esp_tcp esptcp;
 6
 7     esp_conn.type = ESPCONN_TCP;
 8     esp_conn.state = ESPCONN_NONE;
 9     esp_conn.proto.tcp = &esptcp;
10     esp_conn.proto.tcp->local_port = port;
11     espconn_regist_connectcb(&esp_conn, webserver_listen);
12
13     espconn_accept(&esp_conn);
14 }

2.  在连接回调函数中注册接收回调函数,在接收回调函数中处理Client发送的数据

 1 LOCAL void ICACHE_FLASH_ATTR
 2 webserver_listen(void *arg)
 3 {
 4     struct espconn *pesp_conn = arg;
 5
 6     espconn_regist_recvcb(pesp_conn, webserver_recv);
 7     espconn_regist_reconcb(pesp_conn, webserver_recon);
 8     espconn_regist_disconcb(pesp_conn, webserver_discon);
 9     espconn_regist_sentcb(pesp_conn, webserver_sent);
10 }

   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格式发送给网页端,然后就可以显示出网页了。

 1 void ICACHE_FLASH_ATTR
 2 webserver_recv(void *arg, char *pusrdata, unsigned short length)
 3 {
 4     URL_Frame *pURL_Frame = NULL;
 5     char *pParseBuffer = NULL;
 6     char *index = NULL;
 7     SpiFlashOpResult ret = 0;
 8
 9     USER_DBG("len:%u\r\n",length);
10     USER_DBG("Webserver recv:-------------------------------\r\n%s\r\n", pusrdata);
11
12     pURL_Frame = (URL_Frame *)os_zalloc(sizeof(URL_Frame));
13     parse_url(pusrdata, pURL_Frame);
14
15     switch (pURL_Frame->Type) {
16         case GET:
17             USER_DBG("We have a GET request.\r\n");
18
19             if(pURL_Frame->pFilename[0] == 0){
20                 index = (char *)os_zalloc(FLASH_READ_SIZE+1);
21                 if(index == NULL){
22                     ERR_LOG("os_zalloc error!\r\n");
23                     goto _temp_exit;
24                 }
25
26                 // Flash read/write has to be aligned to the 4-bytes boundary
27                 ret = spi_flash_read(0xD0*SPI_FLASH_SEC_SIZE, (uint32 *)index, FLASH_READ_SIZE);  // start address:0x10000 + 0xC0000
28                 if(ret != SPI_FLASH_RESULT_OK){
29                     ERR_LOG("spi_flash_read err:%d\r\n", ret);
30                     os_free(index);
31                     index = NULL;
32                     goto _temp_exit;
33                 }
34
35                 index[HTML_FILE_SIZE] = 0;   // put 0 to the end
36                 data_send(arg, true, index);
37
38                 os_free(index);
39                 index = NULL;
40             }
41             break;
42
43         case POST:
44             USER_DBG("We have a POST request.\r\n");
45
46             pParseBuffer = (char *)os_strstr(pusrdata, "\r\n\r\n");
47             if (pParseBuffer == NULL) {
48                 data_send(arg, false, NULL);
49                 break;
50             }
51             // Prase the POST data ...
52             break;
53     }
54
55     _temp_exit:
56         ;
57     if(pURL_Frame != NULL){
58         os_free(pURL_Frame);
59         pURL_Frame = NULL;
60     }
61 }

5. 网页配置就是POST请求,网页发送HTML格式的POST请求,ESP8266解析数据并作出设置。

    POST请求数据中的Content内容可以是自定也格式,一般使用json格式比较好。这里就详细列出如何处理了。ESP8266 SDK的IOT demo中有HTML格式的解析以及回应HTML格式数据的例程,可以参考。

注意点

  网页是通过烧录固件的工具烧录到Flash的。当时如何把网页的数据保存到Flash中这个问题困扰我很久,网上找很久都没有具体说明,是直接将xx.html文件烧录到Flash中的,此Flash空间是用户可用区间,具体见官方文档。不同Flash都是不同的,这个地址也是需要记下的,SPI读取时需要用到,文件大小也是需要记下。下面是32Mbit 的Flash的烧录截图。

时间: 2024-10-27 13:34:36

使用Web页面配置ESP8266的参数的相关文章

自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)

点击返回:自学Aruba之路 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置) 1 管理员账号管理 Configuration---Administrator中 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9290050.html

自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置)

点击返回:自学Aruba之路 自学Aruba7.3-Aruba安全认证-802.1x认证(web页面配置) 步骤1 建立AP Group,命名为test-group 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9293309.html

rundeck Web页面配置node节点

rundeck每次增删改node的时候都需要手动修改配置文件,非常麻烦,而且容易出错.通过web页面来修改反而更高效方便! 使用说明: 一.修改目录"RundeckNodes"下数据源配置文件 定位"db.class.php"第40~50行中数据库信息,修改数据库地址,数据库名和用户名密码 二.初始化话数据库 1)mysql中创建数据库名"rdnode":CREATE DATABASE IF NOT EXISTS rdnode DEFAULT C

rabbitmq web页面配置搞定nginx代理

/usr/share/doc/rabbitmq-server-3.7.17/rabbitmq.config.example将配置文件config拷贝到/etc/rabbitmq/目录下 配置此段{rabbitmq_management,[{path_prefix, "/my-prefix"}]}, 再配置nginxlocation /rabbitmq {proxy_pass http://127.0.0.1:15672; 重启服务即可 原文地址:https://blog.51cto.c

Haproxy做LB负载均衡集群的搭建和配置,可以通过web页面监控web服务器的运行状态

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理. 实验(一) 实验目的:使用Haproxy做负载均衡集群(七层) 实验环境准备: 客户端  IP地址:1.1.1.1 主机名waiwang web1   IP地址:1.1.1.10 主机名:localhost web2   IP地址:1.1.1.20 主机名:localhost 配置HA

url传中文参数的时候,乱码,需要对web.config配置

1,form表单提交到某个具体页面 <form id="search_form" name="search_form" target="_blank" method="Post"> <input id="catid" name="catid" type="hidden" value="0"/> <input class

SpringBoot系列教程web篇之404、500异常页面配置

接着前面几篇web处理请求的博文,本文将说明,当出现异常的场景下,如404请求url不存在,,403无权,500服务器异常时,我们可以如何处理 原文友链: SpringBoot系列教程web篇之404.500异常页面配置 I. 环境搭建 首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活; 创建一个maven项目,pom文件如下 <parent> <groupId>org.springframework.boot</gr

转:Web页面通过URL地址传递参数常见问题及检测方法

Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述其实现原理.特点和常见问题,最后介绍检测该方式常见应用问题的测试思路和方法. 1.web页面的概念 Web是internet上一个非常重要的资源信息网,产生于20世纪90年代初,它遵循超文本传输协议,以超文本或超媒介的形式传送各种各样的信息,为用户提供了一个具有友好的图形化界面--Web页面,以便用

tomcat web页面管理应用配置

大部分时候,我们的tomcat服务器都不是部署在本机,那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢? tomcat有提供web页面管理应用的功能. 我们来看看怎么配置实现该功能. 进入tomcat默认页面时有"server status"."manager app"."Host manager"三个选项如图: 图1 默认情况下,点击会跳转到401 Unauthorized报错页面 图2 错误信息有提示请检查conf/t