esp32 http空中升級

代碼下載地址:
https://download.csdn.net/download/qq_31806069/11239781

1、 先搭建一個HTTP服務(wù)器
先將hello_wordl例子拷貝到~/esp中威始,在hello_wordl/build中創(chuàng)建get文件夾蟹地,且將hello-world.bin 放進去袄简。

cp -r $IDF_PATH/examples/get-started/hello_world .
cd hello_world/build/
 mkdir get
 cd get/
cp ~/esp/hello_world/build/hello-world.bin .
 cd ..
python -m SimpleHTTPServer 8070

提示:
1.1推沸、服務(wù)器運行后竭缝,構(gòu)建目錄的內(nèi)容可以通過網(wǎng)址 http://localhost:8070/ 瀏覽到希太。
1.2、將你的 PC 連接到你將會在 ESP32 上面使用的同一個 AP琅锻。

2卦停、 先將hello-world.bin 拷貝到~/esp中且命名"my_ota"
a向胡、 先配置menuconfig
make menuconfig
--Serial flasher conifg --->
----Default serial port
------COM3
--Partition Table --->
----Partition Table (Factory app, two OTA definitions) --->
------選擇Factory app,two OTA definitions

b、先添加文件
app_wifi.c
app_wifi.h
esp_https_ota.c
esp_https_ota.h

c惊完、 修改代碼

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"

#include "nvs_flash.h"
#include "app_wifi.h"
#include "esp_log.h"
#include "esp_http_client.h"
#include "esp_https_ota.h"

static const char *TAG = "MY_OTA";


esp_err_t _http_event_handler(esp_http_client_event_t *evt)
{
    switch(evt->event_id)
    {
    case HTTP_EVENT_ERROR:
        ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
        break;
    case HTTP_EVENT_ON_CONNECTED:
        ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
        break;
    case HTTP_EVENT_HEADER_SENT:
        ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
        break;
    case HTTP_EVENT_ON_HEADER:
        ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
        break;
    case HTTP_EVENT_ON_DATA:
        ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
        if (!esp_http_client_is_chunked_response(evt->client))
        {
            // Write out data
            //printf("%.*s", evt->data_len, (char*)evt->data);
        }
        break;
    case HTTP_EVENT_ON_FINISH:
        ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
        break;
    case HTTP_EVENT_DISCONNECTED:
        ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED");
        break;
    }
    return ESP_OK;
}


static void http_test_task(void *pvParameters)
{
    esp_http_client_config_t config =
    {
        //.url = "http://192.168.20.96:8070/get/5FD8.bin",
        .url = "http://192.168.20.96:8070/get/hello-world.bin",
        .event_handler = _http_event_handler,
    };

    esp_err_t ret = esp_https_ota(&config);
    if (ret == ESP_OK) {
        esp_restart();
    } else {
        ESP_LOGE(TAG, "Firmware Upgrades Failed:%d\n",ret);
    }
    while (1) {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }

}

void app_main()
{
    printf("Hello world!\n");
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }

    ESP_ERROR_CHECK(ret);
    app_wifi_initialise();

    ESP_LOGI(TAG, "1------------------>Connected to AP, begin http example\n");
    app_wifi_wait_connected();
    ESP_LOGI(TAG, "2------------------>Connected to AP, begin http example\n");
    xTaskCreate(&http_test_task, "http_test_task", 8192, NULL, 5, NULL);

    while(1)
    {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }

    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}


d僵芹、修改esp_https_ota.c文件中函數(shù)
esp_err_t esp_https_ota(constesp_http_client_config_t *config),將幾條語句屏蔽小槐。

/*
    if (!config->cert_pem)
    {
        ESP_LOGE(TAG, "Server certificate not found in esp_http_client config");
        return ESP_FAIL;
    }
*/

3拇派、 測試
a、make erase_flash flash monitor


image.png

可以看到已經(jīng)開始在運行hello-world.bin的例子凿跳。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末件豌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子控嗜,更是在濱河造成了極大的恐慌茧彤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躬审,死亡現(xiàn)場離奇詭異棘街,居然都是意外死亡,警方通過查閱死者的電腦和手機承边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門遭殉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人博助,你說我怎么就攤上這事险污。” “怎么了富岳?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵蛔糯,是天一觀的道長。 經(jīng)常有香客問我窖式,道長蚁飒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任萝喘,我火速辦了婚禮淮逻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阁簸。我一直安慰自己爬早,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布启妹。 她就那樣靜靜地躺著筛严,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饶米。 梳的紋絲不亂的頭發(fā)上桨啃,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天车胡,我揣著相機與錄音,去河邊找鬼照瘾。 笑死吨拍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的网杆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼伊滋,長吁一口氣:“原來是場噩夢啊……” “哼碳却!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笑旺,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤昼浦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筒主,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體关噪,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年乌妙,在試婚紗的時候發(fā)現(xiàn)自己被綠了使兔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡藤韵,死狀恐怖虐沥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泽艘,我是刑警寧澤欲险,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站匹涮,受9級特大地震影響天试,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜然低,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一喜每、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脚翘,春花似錦灼卢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沃于,卻和暖如春涩咖,著一層夾襖步出監(jiān)牢的瞬間海诲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工檩互, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留特幔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓闸昨,卻偏偏與公主長得像蚯斯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饵较,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容