mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
add HTTP Updater docu
This commit is contained in:
parent
c1c2eba990
commit
aefdf82ae2
@ -3,21 +3,20 @@ title: OTA Update
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
* [Requirements](#Requirements)
|
* [Basic Requirements](#basic-requirements)
|
||||||
* [Arduino IDE](#arduino-ide)
|
* [Arduino IDE](#arduino-ide)
|
||||||
* [HTTP Server](#http-server)
|
* [HTTP Server](#http-server)
|
||||||
* [Stream Interface](#stream-interface)
|
* [Stream Interface](#stream-interface)
|
||||||
|
|
||||||
## Requirements
|
## Basic Requirements
|
||||||
|
|
||||||
Basic requirement:
|
|
||||||
- Flash chip size is 2x the size of the sketch
|
- Flash chip size is 2x the size of the sketch
|
||||||
|
|
||||||
## Arduino IDE
|
## Arduino IDE
|
||||||
|
|
||||||
TODO describe Arduino IDE OTA process
|
TODO describe Arduino IDE OTA process
|
||||||
|
|
||||||
### Requirements
|
#### Requirements
|
||||||
- The ESP and the Computer must be connected to the Same network.
|
- The ESP and the Computer must be connected to the Same network.
|
||||||
|
|
||||||
|
|
||||||
@ -27,18 +26,29 @@ the ```ESPhttpUpdate``` class can check for updates and download a binary file f
|
|||||||
It is possible to download updates from every IP or domain address on the Network or Internet.
|
It is possible to download updates from every IP or domain address on the Network or Internet.
|
||||||
|
|
||||||
|
|
||||||
### Requirements
|
#### Requirements
|
||||||
- web server
|
- web server
|
||||||
|
|
||||||
|
|
||||||
### Arduino code
|
#### Arduino code
|
||||||
|
|
||||||
|
##### simple updater
|
||||||
|
|
||||||
|
the Simple Updater downloads the File every time the function is called.
|
||||||
|
|
||||||
simple updater:
|
|
||||||
```cpp
|
```cpp
|
||||||
ESPhttpUpdate.update("192.168.0.2", 80, "/arduino.bin");
|
ESPhttpUpdate.update("192.168.0.2", 80, "/arduino.bin");
|
||||||
```
|
```
|
||||||
|
|
||||||
advanced:
|
##### advanced updater
|
||||||
|
|
||||||
|
Its possible to point to a script at the server.
|
||||||
|
If a version String is delivered to the Function this String will be send to the server.
|
||||||
|
A Server side Update check is now possible.
|
||||||
|
|
||||||
|
the Server can return a binary file for update (Header 200)
|
||||||
|
or it return header 304 to notify the ESP that no Update is needed.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
t_httpUpdate_return ret = ESPhttpUpdate.update("192.168.0.2", 80, "/esp/update/arduino.php", "optional current version string here");
|
t_httpUpdate_return ret = ESPhttpUpdate.update("192.168.0.2", 80, "/esp/update/arduino.php", "optional current version string here");
|
||||||
switch(ret) {
|
switch(ret) {
|
||||||
@ -54,9 +64,93 @@ switch(ret) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Server request handling
|
#### Server request handling
|
||||||
|
|
||||||
|
##### simple updater
|
||||||
|
|
||||||
|
for the simple Updater the Server only needs to deliver the binary file for update.
|
||||||
|
|
||||||
|
##### advanced updater
|
||||||
|
|
||||||
|
for advanced update management a Script needs to run at the Server side, for example a PHP script.
|
||||||
|
at every Update request the the ESP sends some informations in the Header to the Server
|
||||||
|
|
||||||
|
example Header data:
|
||||||
|
```
|
||||||
|
[HTTP_USER_AGENT] => ESP8266-http-Update
|
||||||
|
[HTTP_X_ESP8266_STA_MAC] => 18:FE:AA:AA:AA:AA
|
||||||
|
[HTTP_X_ESP8266_AP_MAC] => 1A:FE:AA:AA:AA:AA
|
||||||
|
[HTTP_X_ESP8266_FREE_SPACE] => 671744
|
||||||
|
[HTTP_X_ESP8266_SKETCH_SIZE] => 373940
|
||||||
|
[HTTP_X_ESP8266_CHIP_SIZE] => 524288
|
||||||
|
[HTTP_X_ESP8266_SDK_VERSION] => 1.3.0
|
||||||
|
[HTTP_X_ESP8266_VERSION] => DOOR-7-g14f53a19
|
||||||
|
```
|
||||||
|
|
||||||
|
with this information the script now can check if a update is needed.
|
||||||
|
It is also possible to deliver different binary´s based on the MAC address for example.
|
||||||
|
|
||||||
|
script example:
|
||||||
|
```php
|
||||||
|
<?PHP
|
||||||
|
|
||||||
|
header('Content-type: text/plain; charset=utf8', true);
|
||||||
|
|
||||||
|
function check_header($name, $value = false) {
|
||||||
|
if(!isset($_SERVER[$name])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($value && $_SERVER[$name] != $value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendFile($path) {
|
||||||
|
header($_SERVER["SERVER_PROTOCOL"].' 200 OK', true, 200);
|
||||||
|
header('Content-Type: application/octet-stream', true);
|
||||||
|
header('Content-Disposition: attachment; filename='.basename($path));
|
||||||
|
header('Content-Length: '.filesize($path), true);
|
||||||
|
readfile($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!check_header('HTTP_USER_AGENT', 'ESP8266-http-Update')) {
|
||||||
|
header($_SERVER["SERVER_PROTOCOL"].' 403 Forbidden', true, 403);
|
||||||
|
echo "only for ESP8266 updater!\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(
|
||||||
|
!check_header('HTTP_X_ESP8266_STA_MAC') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_AP_MAC') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_FREE_SPACE') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_SKETCH_SIZE') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_CHIP_SIZE') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_SDK_VERSION') ||
|
||||||
|
!check_header('HTTP_X_ESP8266_VERSION')
|
||||||
|
) {
|
||||||
|
header($_SERVER["SERVER_PROTOCOL"].' 403 Forbidden', true, 403);
|
||||||
|
echo "only for ESP8266 updater! (header)\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = array(
|
||||||
|
"18:FE:AA:AA:AA:AA" => "DOOR-7-g14f53a19",
|
||||||
|
"18:FE:AA:AA:AA:BB" => "TEMP-1.0.0"
|
||||||
|
);
|
||||||
|
|
||||||
|
if(isset($db[$_SERVER['HTTP_X_ESP8266_STA_MAC']])) {
|
||||||
|
if($db[$_SERVER['HTTP_X_ESP8266_STA_MAC']] != $_SERVER['HTTP_X_ESP8266_VERSION']) ) {
|
||||||
|
sendFile("./bin/".$db[$_SERVER['HTTP_X_ESP8266_STA_MAC']]."bin");
|
||||||
|
} else {
|
||||||
|
header($_SERVER["SERVER_PROTOCOL"].' 304 Not Modified', true, 304);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header($_SERVER["SERVER_PROTOCOL"].' 500 no version for ESP MAC', true, 500);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
TODO server side
|
|
||||||
|
|
||||||
## Stream Interface
|
## Stream Interface
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user