Danke für den Code,
ich habe auf meinem Server das arduino.php im root, die MAC habe ich an meinen ESP angepasst
<?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);
header('x-MD5: '.md5_file($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:B1" => "heizraum_messwerte_0.5.3",
"18:FE:AA:AA:AA:B2" => "kueche_dht22_0.1.1",
"18:FE:AA:AA:AA:B3" => "bad_dht22_0.1.1",
"18:FE:AA:AA:AA:BB" => "TEMP-1.0.0",
"1E:27:6:7F:CF:5C" => "heizraum_messwerte_0.0.1"
);
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);
}
exit();
}
header($_SERVER["SERVER_PROTOCOL"].' 500 no version for ESP MAC', true, 500);
Sketch:
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
#define room "heizraum"
#define firmware_version room"_messwerte_0.0.1"
#define update_server "192.168.1.3"
#define update_uri "/arduino.php"
void setup() {
Serial.begin(115200);
Serial.println("");
Serial.println("");
WiFi.begin("xx", "xx");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("connected");
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MAC: ");
Serial.print(mac[5],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.println(mac[0],HEX);
Serial.println("");
Serial.println("start flashing......");
t_httpUpdate_return ret = ESPhttpUpdate.update(update_server, 80, update_uri, firmware_version);
switch(ret) {
case HTTP_UPDATE_FAILED:
Serial.println("[update] Update failed.");
break;
case HTTP_UPDATE_NO_UPDATES:
Serial.println("[update] Update no Update.");
break;
case HTTP_UPDATE_OK:
Serial.println("[update] Update ok."); // may not called we reboot the ESP
break;
}
}
void loop() {
}
Den compilierten .bin habe ich unter /bin auf dem Server liegen.
Den .bin habe ich "heizraum_messwerte_0.0.2.bin" genannt.
jetzt sollte die laufende Version 0.0.1 doch eigentlich auf die Version 0.0.2 geflasht werden?
........<\r><\n>
connected<\r><\n>
MAC: 1E:27:6:7F:CF:5C<\r><\n>
<\r><\n>
start flashing......<\r><\n>
[httpUpdate] Header read fin.<\n>
[httpUpdate] Server header:<\n>
[httpUpdate] - code: 500<\n>
[httpUpdate] - len: -1<\n>
[httpUpdate] ESP8266 info:<\n>
[httpUpdate] - free Space: 2854912<\n>
[httpUpdate] - current Sketch Size: 288524<\n>
[httpUpdate] - current version: heizraum_messwerte_0.0.1<\n>
[httpUpdate] HTTP Code is (500)<\n>
[update] Update failed.<\r><\n>
pm open,type:2 0<\r><\n>
Warum gibt das jetzt einen Code 500?
Der zu flashende ist doch eine Version neuer?
Mache ich da noch einen Gedankenfehler?