一、簡介。
想當年,安信可公司推出一款低成本的WIFI模塊(基于樂鑫公司的ESP8266芯片)之后,火了一段時間。這個模塊是支持AT指令和SDK兩種開發(fā)方式。
AT指令很簡單,用串口發(fā)送幾條指令,即可讓模塊進入串口透傳模式,用戶基本不用涉及復雜的TCP/IP協(xié)議。
SDK開發(fā),相當于固件庫開發(fā),官方提供豐富的例子,有帶操作系統(tǒng)和不帶操作系統(tǒng)等等,代碼可讀性好,上手難度并不高。
由于ESP8266本身的定位就是低成本的聯網方案,所以它的性能不會太高,不適合做太復雜的事情。
后來,安信可又推出了一款WIFI/藍牙模塊ESP32,它可以說是ESP8266的增強版。除了增加了藍牙4.2之外,還增加了非常豐富的外設,如:ADC、SPI、IIC、IIS、SDIO、UART、PWM、紅外控制器、有線以太網MAC、AES、SHA、RSA、隨機數產生器、PID控制器、電容觸摸傳感器、低噪放、溫度傳感器、DAC等。同時,CPU主頻高達240MHz,但是,價格也不高。
STM32也推出了一款類似的芯片,就是STM32WB系列,也就是STM32增加了藍牙5、OpenThread、ZigBee 3.0等功能。
TI也有類似的芯片CC2652R,集成了48MHz主頻的ARM M4F內核,支持藍牙5、WIFI、Thread、ZigBee,可以在淘寶上買到,但是比較貴。
顯然,ESP32比STM32WB和CC2652R更有價格優(yōu)勢。
以下均以ESP32S模塊為例,介紹開發(fā)時的注意事項。不定期更新。
二、硬件設計。
2.1 串口。
ESP8266系列的ESP-01模塊默認一個串口輸出調試信息以及AT指令的通信。
ESP32系列的ESP32S模塊一共有3個串口,其中,使用串口0輸出調試信息以及燒錄固件,串口2做AT指令的通信。
串口0也就是U0RXD、U0TXD引腳,串口2則是U2RXD、U2TXD引腳。
也就是說使用AT指令時,ESP32不再像ESP8266那樣,一上電就打印一串調試信息,用戶體驗有所提高。
2.2 天線。
ESP32模塊在PCB上的布局,要求天線超出板邊,如下圖所示,否則可能會影響無線通信距離。
其中,天線的連接器是IPEX座一代。
2.3 Micro SD/TF卡。
ESP32S模塊的SDMMC Host驅動,支持兩個槽:
Slot 0:8bit模式。
Slot 1:4bit模式。其引腳定義如下圖所示。
其中CD和WP引腳可以接任意的GPIO口,CD引腳就是SD卡的檢測腳。
Slot 0部分引腳連接了內部Flash,無法使用,建議使用Slot 1 4bit模式。
具體方法請看《ESP32使用SD卡注意事項》。
2.4 GPIO口。
ESP32有部分引腳只能設為輸入引腳,如下圖所示,黃色區(qū)域。
其中IO6~IO11連接內部Flash,無法當GPIO口使用,如下圖紅色方框內的引腳,但是部分引腳可以擴展PSRAM。
GPIO0為配置上電模式,拉低時為配置模式,可燒錄固件;拉高時為正常工作模式。
GPIO2和GPIO12做普通IO口使用,請看《ESP32使用SD卡注意事項》。
2.5 片內溫度傳感器。
ESP32有片內的溫度傳感器TSENS,需要使用ULP協(xié)處理器才能使用,但是讀到的溫度不是絕對溫度,而是相對溫度,而且是沒有標定的相對溫度。這個溫度傳感器實用價值并不高,不建議使用。
2.6 RTC時鐘。
增加32.768kHz時鐘,主要用于低功耗模式切換CPU主頻用的,不能直接#include rtc.h,因為rtc.h在librtc.a中,而不是公共API。ESP32的RTC不能獲得實時時鐘,需要另外增加RTC芯片,如:DS1302、M41T62等。
2.7 復位。
使用電池供電時,建議增加電源監(jiān)視器以防止ESP32發(fā)生異常。電源電壓低于2.3V時,拉低CHIP_PU引腳。
2.8 PSRAM。
當任務需要大量內存時,ESP32自身的內存不足,那么就需要擴展PSRAM內存,對應的芯片型號是ESP-PSRAM64H。其原理圖如下圖所示。
然后在make menuconfig中配置PSRAM。
初始化成功的話,會在串口中打印如下信息。
三、SDK開發(fā)環(huán)境。
3.1 ESP32-IDF配置。
這里的SDK使用ESP32-IDF,具體的環(huán)境配置可以參考官網《示例4:ESP32_IDF 使用》。
需要注意的是,IDF不需要使用git下載,直接在AiThinkerIDE_V0.5的安裝目錄下就有了,不過是舊的IDF v2.0,我這里是C:\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\esp-idf。
而git下載的是新的IDF v4.0,在AiThinkerIDE_V0.5下,不能使用IDF v2.0的以上版本。(官方的技術支持表示在開發(fā)新版本的AiThinkerIDE)
所以這里是把IDF v2.0拷貝出來,把example下的helloword拷貝出來,改名為app,其它的按照示例4的去做就可以了。
IDFv2.0不支持SDIO接口的SD卡,建議使用v3.2或以上版本。
建議使用官方推薦的lubuntu,安裝vmware,直接打開就可用了。make menuconfig之前先make clean。
vmware可以安裝workstation 15,不要安裝player,因為player破解不了。
3.2 使用Eclipse燒錄固件。
Windows系統(tǒng)下,在Make Menuconfig那一步,進入Serial flasher config。
進入Default serial port。
我的這里的串口號為COM10,對應于cgywin下的串口號為ttyS9。如果是COM1,對應ttyS0,對應的數字減1。
這里配置為/dev/ttyS9。
此外,還要配置波特率為921600。
我這里試了1152000,燒錄失敗,具體波特率視硬件上串口的信號質量而定,信號質量差,需要降低波特率。然后退出,保存即可。
先打開Make Target窗口。
雙擊download,這樣,比shift F9要方便很多。
出現下圖所示,即為燒錄成功。
這個方法比ESP Flash Download Tool要方便得多,但是串口號不要更改。
3.3 其它問題。
出現下圖所示問題,可以不管,只要Build成功就說明代碼沒問題。(可能是IDE的詞法分析器沒做好,實際是找得到這些變量)
四、SDK開發(fā)。
4.1 Secure Boot。
由于ESP32是使用外部Flash來存放代碼的,如果外部Flash不加密的話,很容易被人竊取代碼。所以商業(yè)應用,必須使用Secure Boot來加密代碼??梢詤⒖肌?strong>ESP32-Secure Boot安全方案》。
五、ESP32-CAM開發(fā)板。
ESP32-CAM開發(fā)板不是開箱即用,需要重新燒寫固件。
手機打開熱點,賬號設置為aithinker,密碼設置為aithinker888。ESP32會自動連接上這個熱點,并在串口0上打印IP地址。
手機打開瀏覽器,輸入ESP32的IP地址 /jpg,可以看到靜態(tài)圖像, jpg_stream可看到動態(tài)圖像。
但是這里測試發(fā)現,動態(tài)圖像很卡,不流暢。測試用的手機為OPPO A59m。
六、ESP32-S2。
ESP32-S2只有WIFI功能,但是加密和溫度傳感器等功能有所改善,GPIO口也增多。
ESP32-S2對應的模塊為ESP-12K。
七、參考資料。
ESP-IDF在線API。(中文)
聯系客服