文章目錄標題
將程式碼上傳到ESP8266
ESP8266開發板的上傳程式碼過程與一般Arduino過程略有不同。當上載新程式碼時,大多數Arduino將自動reset,並自動進入編程模式。
在某些ESP板上,您必須手動進入編程模式,而在準系統模組上,甚至必須手動reset它們。
但是,您可以使用一些簡單的電路來自動上傳。
Auto-reset
這僅適用於無內建USB-to-Serial轉接器的開發板。
如果您使用的USB-to-Serial轉接器具有DTR流量控制線,則可以自動執行複位信號。將數據發送到ESP時,DTR線變為低電位,並保持低電位一段時間。要復位ESP,我們需要在RST引腳上施加一個低脈衝。問題在於DTR引腳保持低電位。為了解決這個問題,我們將使用電容器來建構粗邊檢測器電路。看一下以下原理圖:
您可能會認識到,這基本上是一個低切濾波器。在正常情況下,由於上拉電阻R2,DTR為高(3.3V),並且複位線也為高。意思是電容器兩端的電壓為0V。當DTR突然下降(降至0V)時,電容器兩端的電壓仍為0V,這意味著復位線將處於0V + 0V = 0V,並觸發復位。
但是,C1立即開始通過R2充電,並達到3.3V。此時,DTR仍為0V,而電容器兩端現在有3.3V。當DTR再次上升時,復位線將為3.3V + 3.3V = 6.6V,然後立即開始通過R2放電,最終再次達到3.3V,C1兩端為0V。
這是一個問題:6.6V會損壞ESP,因此我們必須找到一種方法來消除正峰值。
對此MATLAB模擬讓我們一目了然,我們發現了問題:
藍色信號是DTR引腳上的電壓,黃色信號是複位引腳上的電壓。
解決方案是新增一個二極管:在給電容器充電時,它不應改變任何東西,因此應逆向偏壓(這只是一種奇特的說法,因為極性相反,它不傳導任何電流),並且電容器放電時,應“立即”對電容器放電。
看起來像這樣:
讓我們再次執行模擬以檢查問題是否得到解決:
如您所見,6.6V的峰值現在非常狹窄,就像我們想要的那樣。不可能立即使電容器放電,這將需要電容器和串聯電阻為0Ω的二極管以及無限大的電流,這顯然是不可能的。還有一個較小但相對較寬的峰值,約為3.9V。這是因為二極管僅在其兩端的電壓高於〜600mV時才導通。這意味著電容器中剩下的最後一個0.6V(從3.9V到3.3V)仍將僅通過R2放電。
不過,與沒有二極管的情況相比,電壓峰值要低得多且窄得多,並且可以安全地連接到ESP8266。
此精確電路也用於Arduino Uno。
注意:如果正確遵循了硬體步驟中的說明,則應該將R2加到ESP中。
如何使用Auto-reset
要使用此auto-reset電路,請將其連接到USB-to-Serial轉接器的DTR線以及ESP的reset線,如圖所示。然後點擊編譯(因為第一次編譯可能要花費一些時間)。轉到工具>reset,然後選擇“ ck”。編譯完成後,按住我們在硬體步驟中新增的程序按鈕,然後點擊上載。等待它顯示“正在上傳…”,然後釋放程序按鈕。
自動重置和自動編程
這僅適用於不帶板載USB到串行轉換器的闆卡。
上面的方法仍然需要您按下按鈕才能上傳新草圖。如果您的USB到串行轉換器同時具有RTS線和DTR線,則可以使整個過程自動化。
您可能會發現4.7kΩ電阻不適合您。在這種情況下,請嘗試其他一些值,例如10kΩ。
此方法首先在NodeMCU中使用,因此請轉到“工具”>“重置方法”,然後選擇“ nodemcu”。這將以正確的順序將DTR&RTS引腳驅動為高電平和低電平,以使其在上載之前處於編程模式。
到目前為止,這是最好的方法,但是問題是您需要同時訪問RTS和DTR引腳,而大多數USB到串行適配器僅會出現這兩者之一。
手動復位和手動程序
這僅適用於不帶板載USB到串行轉換器的闆卡。
如果您沒有帶DTR和RTS線的USB到串行轉換器,也可以只使用我們在硬件一章中添加的複位和程序按鈕。要使ESP進入程序模式,啟動時GPIO0必須為低電平:
- 按住重置按鈕
- 按住程序按鈕
- 釋放復位按鈕,ESP將以程序模式啟動
- 釋放程序按鈕
- 上傳草圖
如果要退出而不上傳程序模式,只需按一下reset(無需按程序按鈕)。
管理者選項
如果您的特定主板在“工具”>“主板”列表中(例如,NodeMCU,SparkFun和Adafruit主板),則只需選擇它,即可獲得正確的設置。如果您的開發板不在列表中,則必須選擇通用ESP8266。在這種情況下,Arduino IDE的“工具”選單中有很多新選項,因此讓我們遍歷它們並選擇正確的設置。
閃光模式
就像我之前說過的那樣,ESP8266使用一個外部閃存晶片進行存儲。您可以通過2條數據線(DIO)或全部4條數據線(QIO)與該晶片進行通信。使用4行比2行快兩倍,因此在大多數情況下,您應該選擇QIO。(如果您正在做一些高級工作,並且需要另外2個GPIO引腳,則可以使用2條線代替4條線,並使用2條線作為I / O。不過,大多數模塊都無法訪問這些引腳。 )
閃光燈尺寸
不同的板/模塊在板上具有不同大小的快閃記憶體晶片。有帶512kB,1MB,2MB和4MB閃存的主板。要知道您的主板有多少快閃記憶體,可以嘗試用範例> ESP8266> CheckFlashConfig來查看您的快閃記憶體設置是否正確,或者您可以在線查看特定主板的規格。
您還可以選擇SPIFFS(SPI快閃記憶體文件系統)大小。SPIFFS分區是用於存儲文件的小型文件系統。如果您不使用它,則可以選擇最小值。在本文的稍後部分,我們將使用SPIFFS,並且提醒您選擇更大的SPIFFS大小,但是到目前為止,這並不重要。
調試端口
在執行ESP時,有很多事情在進行:Wi-Fi連接,TCP連接,DNS查找…等等。所有這些小任務都會產生大量調試輸出,以幫助您進行故障排除。但是,在正常情況下,您的程序的執行情況符合預期,因此不需要所有這些調試消息來填充串行監視器,因此只需選擇“禁用”即可將其關閉。
如果您確實希望接收調試消息,則可以選擇將其發送到的端口。(串行在引腳1和3上,或串行在引腳2上)
調試級別
這使您可以選擇要顯示的調試消息類型。
重置方式
如以上各段所述,自動重置和自動編程有不同的方法。如果使用第一種方法(使用邊緣檢測器),則應使用“ ck”,如果使用雙晶體管電路,則選擇“ nodemcu”。
閃光頻率
如果需要額外的存儲速度,則可以將記憶體頻率從40MHz更改為80MHz。這是SPI / SDIO鏈接的時鐘頻率。
CPU頻率
如果您需要一些額外的CPU性能,則可以將時鐘速度從80MHz翻倍到160MHz。它實際上是一個超頻,但是我從來沒有任何問題或不穩定。
上傳速度
上載到ESP的波特率。預設值為115200波特,但您可以將其設置得更高一些(如果您要更改草圖很多,可能會太慢)。921600波特在大多數情況下都有效,但是有時可能會出現錯誤,如果這樣,切換回115200可能會解決所有問題。