更新 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


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


                             baojianjob@tom.com
                               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


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

3 vc2013 arduino IDE

bin文件在哪里

Compiling 'EspSignalReport' for 'Generic ESP8285 Module'
Program size: 369,696 bytes (used 36% of a 1,023,984 byte maximum) (3.38 secs)
Minimum Memory Usage: 39388 bytes (48% of a 81920 byte maximum)

Uploading 'EspSignalReport' to 'Generic ESP8285 Module' using 'COM13'
Erasing 0x4000 bytes starting at 0x000FC000
Uploading 373840 bytes from C:\Users\XXXX\AppData\Local\Temp\VMBuilds\ESPSIG~1\ESP826~3\Debug/ESPSIG~1.BIN to flash at 0x00000000
................................................................................ [ 21% ]
................................................................................ [ 43% ]
................................................................................ [ 65% ]
................................................................................ [ 87% ]
..............................................                                   [ 100% ]
    The upload process has finished.

String g_strUpdateBinSeverIP = “47.105.127.90”;
String g_strUpdateBinName = “EspSignalReport.ino.bin”;

C:\Users\XXXX\AppData\Local\Temp\VMBuilds\EspSignalReport\esp8266_esp8285\Debug\EspSignalReport.ino.bin

4

http://47.105.127.90/EspSignalReport.ino.bin
HTTP_UPDATE_FAILD Error (11): Update error: ERROR[11]: Invalid bootstrapping state, reset ESP8266 before updating**

NodeMCU 可以自我复位,但是别的板子 没有 这个功能,应该是电路的原因。
分析一下 电路的异同

https://github.com/esp8266/Arduino/issues/3915

The documentation already says that if you upload a sketch through serial, you’ll have to reset the board first manually, before OTA will work, ie. upload via serial, reset the board, then use OTA.

https://www.esp8266.com/viewtopic.php?p=74599

https://arduino-esp8266.readthedocs.io/en/2.4.2/

I have observed a case when ESP.restart() doesn’t work. What is the reason for that?
You will see this issue only if serial upload was not followed by a physical reset (e.g. power-on reset). For a device being in that state ESP.restart will not work. Apparently the issue is caused by one of internal registers not being properly updated until physical reset. This issue concerns only serial uploads. OTA uploads are not affected. If you are using ESP.restart, the work around is to reset ESP once after each serial upload.
Esp8255 如果想要 更新成功,需要 通过串口更新过程序之后,拔掉电源,然后上电一次。这样复位之后,才可以 通过OTA更新。
之后,通过OTA更新之后,会自动更新,不用掉电复位了。

https://arduino-esp8266.readthedocs.io/en/2.4.2/faq/readme.html#i-have-observed-a-case-when-esp-restart-doesn-t-work-what-is-the-reason-for-that

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值