做產(chǎn)品的時(shí)候,我曾對(duì)ESP32嗤之以鼻,覺(jué)得它只不過(guò)是一個(gè)小玩具,可靠性,易用性,抗干擾等都沒(méi)辦法用來(lái)做到實(shí)際產(chǎn)品里面,直到后來(lái),小米的一些智能家居用品開(kāi)始大批量采用,讓我稍稍改變了一些觀念,但是,我依然不會(huì)在產(chǎn)品里面使用它。
不過(guò),ESP的性價(jià)比以及可玩性確實(shí)非常牛逼,牛逼到我固守著“32們”的順手經(jīng)驗(yàn),都不敢去碰它。因?yàn)樗雌饋?lái)相對(duì)單片機(jī)要復(fù)雜。
實(shí)在抵擋不住它的高性價(jià)比和高可玩度,現(xiàn)在AI又盛行起來(lái),必須要嘗試一下。
我從來(lái)都不是一個(gè)好學(xué)生,老老實(shí)實(shí)的啃幾天數(shù)據(jù)手冊(cè)也從來(lái)不是我的作風(fēng),所以直接擼,反正立創(chuàng)打板子免費(fèi),手里又有些破爛IC。
我直接按照官方推薦的最小系統(tǒng)設(shè)計(jì)圖復(fù)刻了一個(gè),然后右面增加了一個(gè)PAN3029的無(wú)線收發(fā)器。不出所料,亂拳打死老師傅呀,而我就是那個(gè)老師傅。
花了半天的時(shí)間焊好了三塊,0402的小元件,逼瞎了我的眼睛,上電的一瞬間還是頗有成就感,出院兩年了,我得手終于不那么抖了。很快,電腦上的USB就彈出了端口6。
要說(shuō)這esp32還真是方便,直接串口就可以燒寫,而且上電就能打印log信息,只要拉低GPIO0上電復(fù)位,系統(tǒng)就會(huì)進(jìn)入下載狀態(tài),至少到這一步,我們能夠確認(rèn),板子上電沒(méi)問(wèn)題,CP2102也沒(méi)問(wèn)題,串口通信也OK。
接下來(lái),怎么開(kāi)發(fā)難住了我,有兩個(gè)選擇,一個(gè)是基于vs code的IDF,一個(gè)是基于arduino的IDE,由于我從來(lái)沒(méi)使用過(guò)arduino,本身也想帶孩子學(xué)習(xí)一下編程,那么首選就是arduino。
在ardiuno的IDE里面,我們需要安裝ESP32的開(kāi)發(fā)板,可以從開(kāi)發(fā)板管理器中直接搜索想要的芯片方案。
我選了官方出的這一個(gè),至此,不得不說(shuō),這比“32們”搭建環(huán)境可方便太多了,這里也有stm32的一些開(kāi)發(fā)板可以選,有空得玩一玩。除此之外,這里還有很多軟件庫(kù),我簡(jiǎn)單瀏覽了一下,非常全面。
我在開(kāi)發(fā)板中隨便選了個(gè)一個(gè)ESP32 S3的板子,找到了最經(jīng)典的blink工程,編譯,下載,一氣呵…
嗯? ?打不開(kāi)串口,原來(lái)是占用了,關(guān)掉其他的串口調(diào)試工具。再來(lái)一遍。
看來(lái)一氣呵成挺難的,這里的log顯示,沒(méi)有接收到串口數(shù)據(jù),我看上面信息顯示,它把波特率改為921600了,會(huì)不會(huì)是速度太快了呢?或者說(shuō)沒(méi)有修改成功?
從上面的chip型號(hào),晶振頻率和mac地址來(lái)看,串口的收發(fā)開(kāi)始肯定是正常的,那么我只能懷疑是這個(gè)921600的波特率的changing有問(wèn)題,我可以降低這個(gè)波特率,既然默認(rèn)的115200可以讀取到mac地址等信息,直接用115200肯定沒(méi)錯(cuò)。
這里還有很多選項(xiàng)可以設(shè)置,后續(xù)一定要逐一弄清楚才行,等實(shí)踐的時(shí)候再說(shuō),現(xiàn)在顧不上那么多了。編譯,下載…
還是有錯(cuò)呀,這次提示說(shuō)不能夠驗(yàn)證Flash的鏈接,括號(hào)里的也挺詭異,依然是沒(méi)有接收到串口數(shù)據(jù)??墒乔懊婷髅鞫甲x到了mac地址等信息。
于是我Google這個(gè)No serial data received,chatGPT也問(wèn)了,deepseek也問(wèn)了,回答的都很全面,讓我檢查供電,檢查接線,檢查flash。
我也順著Google中的幾個(gè)帖子開(kāi)始驗(yàn)證,電源測(cè)量沒(méi)問(wèn)題,又在電源引腳處堆了幾個(gè)電容,大的小的都加上,不起作用。
我又將ESP32芯片拆下來(lái),短路了tx和rx,驗(yàn)證了cp2102的功能,可以自發(fā)自收。
對(duì)于unable to verify flash chip connection,我查了一個(gè)小時(shí)的帖子,網(wǎng)絡(luò)上遇到這個(gè)的也是五花八門,有的說(shuō)換一個(gè)USB線就好了,因?yàn)樾枰?pin的USB供電線,有的說(shuō)電源要是用LDO供電,DCDC不行。這些都是國(guó)外的帖子,看起來(lái)國(guó)外玩這個(gè)出現(xiàn)問(wèn)題的都是比較初級(jí)的。
看起來(lái)沒(méi)有捷徑了,只能去啃手冊(cè)了。
反復(fù)檢查電源系統(tǒng),一共5個(gè)地方是電源相關(guān)的,只有第五個(gè)地方我懸空了,這個(gè)地方按理說(shuō)是對(duì)外部接入flash時(shí)候供電的。應(yīng)該沒(méi)有問(wèn)題。
我把chip-pu和gpio0的邏輯也反復(fù)看了幾遍,我的板子能夠復(fù)位,通過(guò)拉低gpio0進(jìn)入下載模式,這部分也不知道的懷疑。
直到最后,我才關(guān)注到自己的SPI用法,最開(kāi)始畫圖的時(shí)候,我只是按照引腳映射表來(lái)規(guī)劃線路。
從上圖可以看出,對(duì)于28到35引腳,它們的第一功能F0是默認(rèn)的SPI連接Flash,F(xiàn)1功能映射就是普通的GPIO了。我本來(lái)也像是用GPIO來(lái)模擬SPI的。
可氣至極的是,官方文檔提示:
官方的說(shuō)明文檔里面還有一句話讓我誤解了
這里得避免應(yīng)該是說(shuō)不要的意思,我給理解成盡量不要了。真的不如直接寫不要。我就想當(dāng)然得認(rèn)為IO映射是可以更改的。
我立即把我的SPI通信的RF芯片拆焊下來(lái),編譯,下載。