更新 ESP8266 的固件 用到了服务器

代码:

/**
 * httpUpdate.ino
 *
 *  Created on: 27.11.2015
 *
 */

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

void setup() {

    USE_SERIAL.begin(115200);
    // USE_SERIAL.setDebugOutput(true);

    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("AAAA Http SetUp [SETUP] WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("HelloWifi", "123ab");

     USE_SERIAL.println("\r\n AAAAAAAAAAAAAAAAAAAAAAAAAAAAA \r\n");

}

int i =0 ;
int cnt =0 ;
void loop() {
    // wait for WiFi connection
    if((WiFiMulti.run() == WL_CONNECTED)) {

        USE_SERIAL.println("JJJJJJJJJJJJJJJJJ\r\n");
        USE_SERIAL.println(cnt);
        cnt++ ;
        t_httpUpdate_return ret = ESPhttpUpdate.update("http://192.168.0.101/file.bin");
        //t_httpUpdate_return  ret = ESPhttpUpdate.update("https://server/file.bin");

        switch(ret) {
            case HTTP_UPDATE_FAILED:
                USE_SERIAL.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
                if(ESPhttpUpdate.getLastError() == 11)
                {

                  while(i< 10){

                    delay(1000);  
                    USE_SERIAL.print("  wait  ");
                     USE_SERIAL.print(i);
                     i++ ;

                  } 
                  ESP.restart();
                  while(i< 100){

                    delay(1000);  
                    USE_SERIAL.print("  wait  ");
                     USE_SERIAL.print(i);
                     i++ ;

                  } 

                 }        
                break;

            case HTTP_UPDATE_NO_UPDATES:
                USE_SERIAL.println("HTTP_UPDATE_NO_UPDATES");
                break;

            case HTTP_UPDATE_OK:
                USE_SERIAL.println("HTTP_UPDATE_OK");
                break;
            default:
                USE_SERIAL.println("HTTP_UPDATE ret = ");
                USE_SERIAL.println(ret);
               break ;
        }
    }
}

要更新的固件:

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>

#define USE_SERIAL Serial



void setup() {
  // put your setup code here, to run once:
   USE_SERIAL.begin(115200);
   delay(1000);

   USE_SERIAL.println("VVVVVVVVVVVVVVVVVVVVVVVV");
   USE_SERIAL.println("LED Serial Test \r\n");

   pinMode(LED_BUILTIN, OUTPUT);

}

int i = 0 ;
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
                                    // but actually the LED is on; this is because 
                                    // it is active low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);                      // Wait for two seconds (to demonstrate the active low LED)

  USE_SERIAL.print("  Led  ");
  USE_SERIAL.print(i);
  i++ ;
}

要更新的固件:位置在类似的位置:需要看arduino IDE 的log

C:\Users\xxx\AppData\Local\Temp\arduino_build_752394/serial_led.ino.bin

将修改名字为 file.bin 放入
E:\esp8266\EasyWebSvr\EasyWebSvr\EasyWebSvr\demo
EasyWebSvr.exe 设置为 文件服务器:对应的目录为:
E:\esp8266\EasyWebSvr\EasyWebSvr\EasyWebSvr\demo

中间会遇到问题:

HTTP_UPDATE_FAILD Error (11): Update error: ERROR[11]: Invalid bootstrapping state, reset ESP8266 before updatingHTTP_UPDATE_FAILD Error

需要手动对 板子reset一下,不是重新上电,是按下那个复位按钮。

应该是arduino IDE 在 upload 板子完毕之后,对板子做了设置,需要reset之后,才能解除。
这里写图片描述

这里写图片描述

这里写图片描述

PC 和板子 运行于 同一个局域网

运行log


  dhcp client start...
cnt 
ip:192.168.0.103,mask:255.255.255.0,gw:192.168.0.1
JJJJJJJJJJJJJJJJJ

0
HTTP_UPDATE_FAILD Error (11): Update error: ERROR[11]: Invalid bootstrapping state, reset ESP8266 before updating  wait  0  wait  1  wait  2  wait  3  wait  4pm open,type:2 0
  wait  5  wait  6  wait  7  wait  8  wait  9
 ets Jan  8 2013,rst cause:2, boot mode:(1,6)


 ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset








 AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

state: 5 -> 0 (0)
rm 0
scandone
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2

connected with HelloWifi, channel 1
dhcp client start...
cnt 
ip:192.168.0.103,mask:255.255.255.0,gw:192.168.0.1
JJJJJJJJJJJJJJJJJ

0
sleep disable
pm open,type:0 0
state: 5 -> 0 (0)
rm 0
pm close 7
del if0
usl

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v614f7c32
@cp:0
ld

SDK:2.2.1(cfd48f3)/Core:2.4.1/lwIP:2.0.3(STABLE-2_0_3_RELEASE/glue:arduino-2.4.1)
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2

connected with HelloWifi, channel 1
dhcp client start...
cnt 
VVVVVVVVVVVVVVVVVVVVVVVV
LED Serial Test 

  Led  0ip:192.168.0.103,mask:255.255.255.0,gw:192.168.0.1
  Led  1  Led  2pm open,type:2 0
  Led  3  Led  4  Led  5  Led  6  Led  7  Led  8  Led  9  Led  10

软件信息:

软件名称: 
==========
EasyWebServer网站服务器 V1.9


软件功能:
==========
这是一款小型的Web服务器软件。它可以很快速地在您
的PC上创建一个站点,而无需IIS等庞大复杂的工具。
它的主要功能特点如下:

◇ 遵循HTTP/1.1协议标准
◇ 支持CGI、ISAPI,支持PHP、ASP、Perl
◇ 支持自定义端口、最大连接数、网络超时
◇ 支持自定义缺省文档列表,支持目录浏览
◇ 支持中文UTF-8编码
◇ 支持Cookie,支持SOAP等
◇ 支持多线程文件下载、断点续传
◇ 支持访问日志记录
◇ 极少的资源占用,极快的访问速度,极简单的设置
◇ 绿色软件,无须安装,不写注册表
◇ VC++ SDK 编写,体积超小


运行环境:
==========
Windows 98/Me/2000/XP


使用说明:
==========
1. 设置好主目录、端口号等参数后,启动服务器
   点右键菜单--“浏览主页”,就可以在浏览器中看到效果了
   (作为演示,可以把主目录设置为本目录下的demo子目录)

2. 如果要执行CGI/ISAPI或PHP等脚本,注意要设置相应权限,并设置相应的脚本映射

3. 如何设置以支持PHP?
  1). 到http://www.php.net网站下载PHP的安装包,如php-5.2.4-Win32.zip(建议用php5)
  2). 解压到硬盘某个目录,如c:\php5
  3). 把目录下的php.ini-recommended改名为php.ini
  4). 在桌面--我的电脑--右键--属性--高级--环境变量,在系统变量中找到Path行,
      点编辑,在原来的变量值最后增加c:\php5,注意用分号分隔,确定。
  5). 在EasyWebServer中点右键菜单--设置--映射,点添加按钮,
      在“添加/编辑脚本映射”对话框中,扩展名栏输入php,并指定可执行文件(即解释器)
      在c:\php5中有2个解释器文件,
      一个是CGI版的:c:\php5\php-cgi.exe
      另一个是ISAPI版的:c:\php5\php5isapi.dll
      这两个随便选择一个都可以,但推荐使用ISAPI版的。确定。
  6). 访问demo目录下的hello.php,应该就可以看到效果了

4. 如何设置以支持ASP?
  EasyWebServer对ASP的支持,目前是通过安装第三方ActiveHTML解释器来实现的,这也是在
  Apache等非IIS服务器上支持ASP的方法,具体步骤如下:
  1). 到网上(如华军、天空等软件下载站)下载ActiveHTML
  2). 安装ActiveHTML,比如安装到C:\Program Files\seliSoft\ActiveHTML
  3). 在EasyWebServer中点右键菜单--设置--映射,点添加按钮,
      在“添加/编辑脚本映射”对话框中,扩展名栏输入asp,并指定可执行文件(即解释器)为
      C:\Program Files\seliSoft\ActiveHTML\AHTML.exe,点确定。
  4). 访问demo目录下的hello.asp,应该就可以看到效果了

5. 如何设置以支持Perl?
  1). 到网上(如华军、天空等软件下载站)下载ActivePerl
  2). 安装ActivePerl,比如安装到C:\Perl目录
  3). 在EasyWebServer中点右键菜单--设置--映射,点添加按钮,
      在“添加/编辑脚本映射”对话框中,扩展名栏输入pl,并指定可执行文件(即解释器)
      在c:\perl\bin目录下有2个解释器文件,
      一个是CGI版的:c:\perl\bin\perl.exe
      另一个是ISAPI版的:c:\perl\bin\PerlEx30.dll
      目前(1.9版)只支持CGI版的perl.exe,注意要在后面加上一个参数"%s",如下
      C:\Perl\bin\perl.exe "%s"
      点确定。
  4). 访问demo目录下的hello.pl,应该就可以看到效果了

在Demo子目录下有CGI、ISAPI、PHP等的演示,详见Demo\readme.txt


常见问题:
==========
1. 为什么执行我的PHP(或ASP)脚本时,浏览器中看到的却是PHP(或ASP)的代码?
答:要想正常执行PHP脚本,必须满足2个条件:
    1). 在服务器设置--权限中,选中“允许执行脚本”
    2). 设置好相应的脚本映射,具体见使用说明中“如何设置以支持PHP”

2. 我从哪里可以得到该软件的最新版本?
答:请到这里下载最新版:http://www.onlinedown.net/soft/47720.htm


欢迎测试,并提出您的宝贵意见和建议!


                             [email protected]
                               2007.11.14



---------------------------------------------------------

更新历史:
==========
2007.11.14
1. ISAPI执行异常时,Connection设置为close
2. 修正某些CGI程序可能执行不正常的Bug(分多次输出头)
3. 完善文档、测试,发布EasyWebServer1.9

2007.11.13
1. 显示目录列表时,对文件和目录排序
2. 修正目录列表页面用某些下载工具不能下载的Bug(URL解码)

2007.11.12
1. 完善CGI的Status、Location等
2. 脚本映射增加应用程序参数功能
3. 初步实现了对Perl的支持(CGI版perl.exe)!

2007.11.10
1. 初步实现对KeepAlive持久连接功能的支持
2. 修正点托盘菜单可以弹出多个设置窗口的Bug

2007.11.8
实现脚本映射功能及界面设置,可以支持ASP了(使用ActiveHTML解释器)!

2007.11.6
1. 限制浏览器提交的最大HttpHeader大小(防攻击)
2. 完善CGI/ISAPI执行失败时的Http头信息
3. 实现对HTTP的HEAD命令的支持
4. 完善文档、测试,发布EasyWebServer1.8

2007.11.5
1. 完善ISAPI环境变量(UserAgent、Referer、Authorization)
2. 修正开机自动运行参数不能保存的Bug
3. 限制浏览器提交的最大Content-Length大小(防攻击)

2007.10.21
1. 完善对ISAPI的支持(ResponseHeader、TerminateExtension)
2. 实现对ISAPI版PHP的支持,完全的支持PHP了!!!
3. 提高日志输出到文件时的效率
4. 完善文档、测试,发布EasyWebServer1.7

2007.10.12
1. 增加对ISAPI跳转功能的支持
2. 修正在某些外观设置下界面颜色显示不正常的问题

2006.5.19
1. 支持.cgi扩展名的cgi程序(其实和.exe相同)
2. 修正了demo中的isapi1.dll在某些电脑中不能运行的Bug
3. 完善文档、测试,发布EasyWebServer1.6

2006.5.18
1. 实现支持PHP功能的设置界面
2. 修正了重启资源管理器后,托盘图标状态显示错误的Bug

2006.5.17
实现形如 http://wbj/cgi 的URL跳转到 http://wbj/cgi/

2006.5.12
1. 修正了对使用重定向功能的php程序运行不正常的Bug
2. 修正了在Firefox浏览器下对使用单独css文件的网页显示不正常的Bug

2006.5.10
初步实现了对PHP的支持(cgi版php4)

2006.3.30
修正了使用Opera浏览器Cookie不正常的Bug

2006.3.11
完善关于界面、文档
测试,发布EasyWebServer1.5

2006.3.10
1. 关机及退出时保存窗口状态、服务器运行状态
2. 服务器运行和停止时,设置不同的托盘图标

2006.3.9
1. 完善程序ICON
2. 增加浏览主页的功能

2006.3.8
完善了ISAPI的部分环境变量

2006.3.7
1. 实现了对文件下载断点续传的支持(Range和Content-Range标记)
2. 托盘tooltips服务器状态提示

2006.3.6
实现了对HTTP的Last-Modified和If-Modified-Since的支持

2006.3.5
超大文件下载分段发送

2006.3.3
1. 改写HTTP请求的解码过程,完善CGI环境变量,完善管道定向,修正了部分CGI程序运行不正常的Bug
(增加SCRIPT_NAME、PATH_INFO等环境变量) http://wbj/cgi1.exe/aaa?bbb
2. 缺省允许CGI/ISAPI权限

2006.2.22
1. 状态栏增加控制按钮和菜单按钮
2. 修正了对访问socket网络的CGI程序运行不正常的Bug
3. 修改了主程序的ICON

2006.1.22
增加开机自动运行的功能

2006.1.20
1. 实现了缺省文档列表的功能
2. 完善日志设置功能(输出到窗口,输出到文件)

2006.1.19
实现了对中文UTF-8编码的支持

2006.1.18
1. 实现了目录浏览的功能
2. 修正了可以用..越级访问的Bug
3. 代码结构调整,重写了url路径转换的相关代码
4. 增加对“解析HTTP请求失败”的日志记录

2006.1.13
实现了ISAPI的缓存dll的功能

2006.1.12
1. 界面做了重大调整,做了一个专门的设置界面,
   分多个Tab属性页,包括[常规]、[权限]、[文档]、[日志]
2. 增加对最大连接数、超时时间的设置

2006.1.6
完善界面、文档等,发布EasyWebServer V0.8

2005.12.31
修正了对ISAPI程序SOAP处理不正常的Bug

2005.12.30
1. 实现了对ISAPI程序的支持!
2. 完善界面设置、日志等

2005.12.29
初步实现了GDI界面,可缩小到系统托盘

2005.12.26
1. 实现了对CGI程序POST方法的支持!
2. 修正了对URL含有空格等不正常的Bug

2005.12.24
1. 研究了一整天CGI管道定向技术,头昏眼花呀,
   平安夜23:00,终于解决了实现CGI支持的关键技术难题!
2. 重写了Http请求的接收模块代码

2005.12.22
基本实现了对CGI程序GET方法的支持

2005.12.20
初版,实现了对静态网页的支持


-------------------------------------------------------------------------------

我的其它个人作品:
===============

《MiniSniffer网络抓包工具》 
简介:一个小巧的网络抓包工具(嗅探器),绿色软件 
下载:http://download.enet.com.cn/html/010722006040702.html


《FastMail邮件特快专递》
简介:无须填写SMTP服务器即可发信,支持附件,HTML格式,直接发送HTML或者EML文件,可以匿名发信
下载:http://www.onlinedown.net/soft/17258.htm


《SendMsg信使》
简介:一个取代Windows的NET SEND发消息的小工具,绿色软件。支持给多人发消息,可自动保存消息记录。大小仅46K。
下载:http://www.onlinedown.net/soft/31080.htm


《ScanPort端口扫描工具》
简介:一个小巧的网络端口扫描工具,绿色软件 
下载:http://www.onlinedown.net/soft/29712.htm


《htm2mht转换工具》
简介:用于把html格式的网页文件(包括附带的图片、声音等)转换成mht格式,支持批量转换 
下载:http://www.onlinedown.net/soft/45847.htm


《MailCode邮件编码转换工具》
简介:Base64编码/解码,Quoted-Printable编码/解码,计算MD5值
下载:http://www.onlinedown.net/soft/44842.htm


《FastRen文件批量改名工具》
简介:一个小巧、高效的文件批量改名工具,绿色软件,仅有28K。 
下载:http://www.onlinedown.net/soft/44843.htm


以上皆为绿色软件
欢迎试用,并提出您的宝贵意见和建议!

猜你喜欢

转载自blog.csdn.net/wowocpp/article/details/81156053