ESP8266_02程序的編譯與下載

ESP8266_01搭建開發環境

ESP8266_02程序的編譯與下載

ESP8266_03SDK與Makefile的基本用法

ESP8266_04管腳控制與軟件定時器

ESP8266_05 ESP8266有幾個串口?

ESP8266_06硬件定時器與IO中斷

ESP8266_07基於PWM的呼吸燈

ESP8266_08基於flash的數據掉電保護

ESP8266_09基於IIC控制的OLED屏幕

ESP8266_10 ESP8266的STATION模式

ESP8266_11 ESP8266的UDP廣播

ESP8266_12 ESP8266客戶端模式下的TCP通信

ESP8266_13服務器端模式下的TCP通信

ESP8266_14 SOFTAP模式下的服務器端和客戶端

ESP8266_15天氣預報之TCP的GET操作

ESP8266_16天氣預報之JSON數據的生成與解析

ESP8266_17簡單網絡時間協議-SNTP

ESP8266_18 MQTT協議接入ONENET平臺

ESP8266_19MQTT協議接入ONENET平臺_訂閱主題

ESP8266_20 基於ONENET平臺的數據上傳之TCP的POST操作

ESP8266_21基於ESP8266的一鍵配網

ESP8266_22基於自身ADC的電壓採樣

ESP8266_23基於硬件定時器的紅外遙控器解碼

         這一節主要看下如何對ESP8266的程序進行編譯和下載,首先打開 AiThinker_IDE.exe。如下圖所示,咱們選中其中一個現有的工程文件進行編譯:

         工程選擇:esp8266_helloworld,依次打開包含的文件夾:user,以及user下面的user_main.c文件。

         這裏的user_main.c文件,就相當於單片機工程裏的main.c文件;而文件裏的user_init(void)函數,就相當於單片機程序裏的main函數。理解了這兩點,剩下的就好理解了。

         user_init(void)函數裏面只包含了三行代碼:第一行通過串口打印當前SDK的版本,第二行打印當前程序的編譯時間。

第三行稍微麻煩一點,它是在註冊系統初始化完成的回調函數。如果是搞單片機的,估計大部分是第一次聽說回調函數。關於回調函數,這裏摘抄一段網上講的比較好的說明:

對普通函數的調用:

調用程序發出對普通函數的調用後,程序執行立即轉向被調用函數執行,直到被調用函數執行完畢後,再返回調用程序繼續執行。從發出調用的程序的角度看,這個過程爲“調用-->等待被調用函數執行完畢-->繼續執行”

對回調函數調用:

調用程序發出對回調函數的調用後,不等函數執行完畢,立即返回並繼續執行。這樣,調用程序和被調用函數同時在執行。當被調函數執行完畢後,被調函數會反過來調用某個事先指定函數,以通知調用程序:函數調用結束。這個過程稱爲回調(Callback),這正是回調函數名稱的由來。

回調函數與普通函數的區別在於調用者不同。普通函數的調用是直接或者間接由main函數發起的。回調函數由系統發起調用,與main函數無關。

 

       也就是說,官方提供的SDK,是內含一個系統的,而咱們的程序是在這個系統下運行。回到程序裏,system_init_done_cb是調用程序,system_done是回調函數,而system_done內部又註冊了一個回調函數,實現了一個定時輸出hello world的功能。

        程序是直接就能用的,咱們編譯看一下。鼠標右鍵點擊左側工程欄裏的esp8266_helloworld,在彈出的頁面先點擊:Clean Project,執行完成之後,再點擊Build Project。編譯完成之後,下方的輸出框會有類似信息輸出:

         這裏生成的是bin文件,而不是hex文件。注意user1.2048.new.3.bin生成的位置,在工程目錄下的bin/upgrade裏。

         這裏說一下,編譯器生成的bin文件,根據Makefile裏面的配置不同,分爲兩種:一種是不支持雲端升級的,一種是支持雲端升級的。Makefile如何配置,後面會講,這一節主要說和下載相關的東西。

         使用樂鑫提供的下載工具,鏈接如下:

         https://wiki.ai-thinker.com/_media/esp8266/flash_download_tools_v3.6.4.rar

         同時要準備一個串口助手,用來顯示接收到的信息。

注意:串口助手的波特率要能支持78400.

下載軟件打開後如圖所示:

         選擇最上面的按鈕,點擊,彈出下面的工具框:

         第一次使用這個工具的人,看到上圖可能會有點懵!因爲我同時選中了四個bin文件,這就意味着要給芯片燒錄四個文件。和單片機的程序燒錄不一樣,單片機一般一次只燒一個hex文件,而這裏,根據配置不同,你可能一次要燒錄4~5個bin文件。

         怎麼回事?

         這幾個文件裏面,有兩個是編譯器編譯生成的,有2~3個是SDK裏面自帶的(包括系統參數和啓動程序),如果同時有多個版本,建議使用最新版。

參照下面的截圖,以及上面生成bin文件的截圖,可以知道當前程序是支持雲端升級的模式,需要下載5個bin文件。

        

         同時,你會發現,根據flash的大小不同,即便是同一個文件,它的燒錄地址也有可能不同。具體如何配置,參照上圖。

         注意:雖然上圖給出了eagle.irom0test.bin、user1.bin、user2.bin這三個文件在不同flash下的地址,但是每次編譯器編譯完成後,會再次輸出分配好的地址。這裏以編譯器輸出地址爲主。

那麼,怎麼知道你的ESP8266的FLASH是多大空間?依然參照截圖,安信可不同型號的模塊,flash的大小都在這裏表明了。

注意:flash大小的單位是bit,不是byte。意味着,32Mbit=4Mbyte。

         打開工程文件所在路徑(這是我的路徑,你要找你的):

         C:\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\esp8266_helloworld\bin\upgrade

         你會發現只有一個user1.2048.new.3.bin,它對應上圖中的user1.bin,是咱們要的,剩下四個文件都沒有!不要急,看上面的截圖你會找到提示:由樂鑫在SDK中提供。

所以找到ESP8266_NONOS_SDK,打開路徑:

         C:\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\ESP8266_NONOS_SDK\bin

         你會發現你要的這都有了:

         boot.bin有兩個,一個是1.2版本,一個是1.6版本,儘量用新的。但是,還有個問題,user2.bin在哪?筆者推測,這是因爲hello world這個程序代碼量太小,所以沒有生成這麼多需要燒錄的bin文件,因此空着就行。

         我們對下載軟件進行配置,SPI SPEED,SPI MODE,這兩個位置參照截圖裏的配置,SPI FLASH一定要根據你手裏的模塊選擇。每個bin文件的下載地址一定要寫對,否則程序無法正常運行。

         注意:SPI MODE這裏,它表示的其實是ESP8266芯片和flash芯片的連接方式,一般以DOUT和QIO居多。如果你不確定,建議你的模塊買回來之後,先不要燒程序,先上電看一下串口打印的信息,裏面有說明。如下所示:

        

       硬件連接方面,使用一條USB轉串口線,一端連接你的ESP8266模塊,另一端連接電腦,根據電腦裏顯示的端口號選擇串口號。玩過單片機的應該都懂,如果不會,重新學一下基礎。

       同時,官方要求把GPIO0和GPIO15管腳拉低,GPIO2置高。但是筆者在使用過程中發現,只要把GPIO0和GPIO15接到GND,其它管腳懸空即可。

        然後,先點擊軟件上的START按鈕,再給模塊供電,這時模塊自動進入下載過程(有點像STC的冷啓動)。如果無法下載,建議多嘗試幾次,或者參照安信可的網站內容。

      下載完成後,要把GPIO0懸空,否則無法正常工作,同時給模塊重新上電,可以看到串口輸出相關信息:

ets Jan  8 2013,rst cause:2, boot mode:(3,7)

 

load 0x40100000, len 2408, room 16

tail 8

chksum 0xe5

load 0x3ffe8000, len 776, room 0

tail 8

chksum 0x84

load 0x3ffe8310, len 632, room 0

tail 8

chksum 0xd8

csum 0xd8

 

2nd boot version : 1.6

  SPI Speed      : 40MHz

  SPI Mode       : DOUT

  SPI Flash Size & Map: 16Mbit(512KB+512KB)

jump to run user1 @ 1000

 

rf cal sector: 507

rf[112] : 00

rf[113] : 00

rf[114] : 01

 

SDK ver: 2.0.0(656edbf) compiled @ Jul 19 2016 17:58:40

phy ver: 1055, pp ver: 10.2

 

 

SDK version:2.0.0(656edbf) , Compile time:Jul  5 2019 14:34:40

mode : softAP(5e:cf:7f:c3:f1:49)

add if1

dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)

bcn 100

 

 

[2019-07-05 15:02:42.575]# RECV ASCII>

 

Hello world !

 

Hello world !

 

         其中的“SDK version:2.0.0(656edbf) , Compile time:Jul  5 2019 14:34:40”對應user_init函數裏前兩行打印的信息。而下面,每隔3秒,串口會打印一個“hello world”並換行!

         注意,串口波特率要設置爲78400。本片教程主要參照樂鑫的文檔:3a-esp8266_sdk_flash_tool_user_guide_cn_v1.0,以及安信可網址:

         https://wiki.ai-thinker.com/esp_download

         https://wiki.ai-thinker.com/esp8266

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章