mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	This is very much still work in progress and much more will change before the final 2.0.0 Some APIs have changed. New libraries have been added. LittleFS included. Co-authored-by: Seon Rozenblum <seonr@3sprockets.com> Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> Co-authored-by: geeksville <kevinh@geeksville.com> Co-authored-by: Mike Dunston <m_dunston@comcast.net> Co-authored-by: Unexpected Maker <seon@unexpectedmaker.com> Co-authored-by: Seon Rozenblum <seonr@3sprockets.com> Co-authored-by: microDev <70126934+microDev1@users.noreply.github.com> Co-authored-by: tobozo <tobozo@users.noreply.github.com> Co-authored-by: bobobo1618 <bobobo1618@users.noreply.github.com> Co-authored-by: lorol <lorolouis@gmail.com> Co-authored-by: geeksville <kevinh@geeksville.com> Co-authored-by: Limor "Ladyada" Fried <limor@ladyada.net> Co-authored-by: Sweety <switi.mhaiske@espressif.com> Co-authored-by: Loick MAHIEUX <loick111@gmail.com> Co-authored-by: Larry Bernstone <lbernstone@gmail.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: 快乐的我531 <2302004040@qq.com> Co-authored-by: chegewara <imperiaonline4@gmail.com> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Aron Rubin <aronrubin@gmail.com> Co-authored-by: Pete Lewis <601236+lewispg228@users.noreply.github.com>
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* 
 | |
|  Name:      SD_Update.ino
 | |
|  Created:   12.09.2017 15:07:17
 | |
|  Author:    Frederik Merz <frederik.merz@novalight.de>
 | |
|  Purpose:   Update firmware from SD card
 | |
| 
 | |
|  Steps:
 | |
|    1. Flash this image to the ESP32 an run it
 | |
|    2. Copy update.bin to a SD-Card, you can basically
 | |
|       compile this or any other example
 | |
|       then copy and rename the app binary to the sd card root
 | |
|    3. Connect SD-Card as shown in SD example, 
 | |
|       this can also be adapted for SPI
 | |
|    3. After successfull update and reboot, ESP32 shall start the new app
 | |
| */
 | |
| 
 | |
| #include <Update.h>
 | |
| #include <FS.h>
 | |
| #include <SD.h>
 | |
| 
 | |
| // perform the actual update from a given stream
 | |
| void performUpdate(Stream &updateSource, size_t updateSize) {
 | |
|    if (Update.begin(updateSize)) {      
 | |
|       size_t written = Update.writeStream(updateSource);
 | |
|       if (written == updateSize) {
 | |
|          Serial.println("Written : " + String(written) + " successfully");
 | |
|       }
 | |
|       else {
 | |
|          Serial.println("Written only : " + String(written) + "/" + String(updateSize) + ". Retry?");
 | |
|       }
 | |
|       if (Update.end()) {
 | |
|          Serial.println("OTA done!");
 | |
|          if (Update.isFinished()) {
 | |
|             Serial.println("Update successfully completed. Rebooting.");
 | |
|          }
 | |
|          else {
 | |
|             Serial.println("Update not finished? Something went wrong!");
 | |
|          }
 | |
|       }
 | |
|       else {
 | |
|          Serial.println("Error Occurred. Error #: " + String(Update.getError()));
 | |
|       }
 | |
| 
 | |
|    }
 | |
|    else
 | |
|    {
 | |
|       Serial.println("Not enough space to begin OTA");
 | |
|    }
 | |
| }
 | |
| 
 | |
| // check given FS for valid update.bin and perform update if available
 | |
| void updateFromFS(fs::FS &fs) {
 | |
|    File updateBin = fs.open("/update.bin");
 | |
|    if (updateBin) {
 | |
|       if(updateBin.isDirectory()){
 | |
|          Serial.println("Error, update.bin is not a file");
 | |
|          updateBin.close();
 | |
|          return;
 | |
|       }
 | |
| 
 | |
|       size_t updateSize = updateBin.size();
 | |
| 
 | |
|       if (updateSize > 0) {
 | |
|          Serial.println("Try to start update");
 | |
|          performUpdate(updateBin, updateSize);
 | |
|       }
 | |
|       else {
 | |
|          Serial.println("Error, file is empty");
 | |
|       }
 | |
| 
 | |
|       updateBin.close();
 | |
|     
 | |
|       // whe finished remove the binary from sd card to indicate end of the process
 | |
|       fs.remove("/update.bin");      
 | |
|    }
 | |
|    else {
 | |
|       Serial.println("Could not load update.bin from sd root");
 | |
|    }
 | |
| }
 | |
| 
 | |
| void setup() {
 | |
|    uint8_t cardType;
 | |
|    Serial.begin(115200);
 | |
|    Serial.println("Welcome to the SD-Update example!");
 | |
| 
 | |
|    // You can uncomment this and build again
 | |
|    // Serial.println("Update successfull");
 | |
| 
 | |
|    //first init and check SD card
 | |
|    if (!SD.begin()) {
 | |
|       rebootEspWithReason("Card Mount Failed");
 | |
|    }
 | |
| 
 | |
|    cardType = SD.cardType();
 | |
| 
 | |
|    if (cardType == CARD_NONE) {
 | |
|       rebootEspWithReason("No SD_MMC card attached");
 | |
|    }else{
 | |
|       updateFromFS(SD);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void rebootEspWithReason(String reason){
 | |
|     Serial.println(reason);
 | |
|     delay(1000);
 | |
|     ESP.restart();
 | |
| }
 | |
| 
 | |
| //will not be reached
 | |
| void loop() {
 | |
|   
 | |
| } |