人工智能小車:基于ESP32的GPIO控制智能小車運(yùn)動(dòng)(MicroPython)
摘要
本文介紹用MicroPython實(shí)現(xiàn)ESP32的GPIO控制智能小車朝各個(gè)方向運(yùn)動(dòng)(點(diǎn)擊此處黃色字體領(lǐng)取文中相關(guān)資料)
前邊的Mixly開發(fā)之后,對應(yīng)生成的代碼是C語言的。可能很多人都覺得C語言很難學(xué),現(xiàn)在學(xué)Python的人很多,覺得學(xué)起來更容易一些。其實(shí),語言本身的難度差別不大,難在實(shí)現(xiàn)的功能不同以及各語言的庫函數(shù)(或者類庫)不太相同,才會(huì)覺得開發(fā)的難度不同。
對于嵌入式開發(fā)來說,本身對語言的要求是不高的,簡單應(yīng)用的邏輯都是不復(fù)雜的,大家可以嘗試一下C語言的開發(fā)方法。畢竟C語言在嵌入式開發(fā)領(lǐng)域的好處是顯而易見的,程序精簡,運(yùn)行速度快。特別適合需要高速響應(yīng)的系統(tǒng)中,在運(yùn)動(dòng)控制、機(jī)器人領(lǐng)域是應(yīng)用最廣的開發(fā)語言。
為了照顧更多的讀者,在智能小車這一系列文章中,還是增加一些MicroPython的講解。在整個(gè)系列文章中,還是會(huì)以C語言為主,也會(huì)階段性的增加一些MicroPython的實(shí)現(xiàn)方法。下面就先來講解一下用Mixly的Python Esp32功能模塊如何實(shí)現(xiàn)小車的各種運(yùn)動(dòng)。
運(yùn)行“Mixly”軟件,在初始的開發(fā)板和開發(fā)語言選擇頁面選擇“Python Esp32”功能,單擊后進(jìn)入到軟件開發(fā)設(shè)計(jì)界面。這時(shí)需要在右上角選擇開發(fā)板為“ESP32 Generic(4MB)”,端口選擇為開發(fā)板在電腦上生成的串口設(shè)備對應(yīng)的串口。如下圖所示:
對于第一次使用MicroPython的開發(fā)板,在開發(fā)之前需要首先執(zhí)行一下菜單欄上的“初始化固件”功能,這是因?yàn)镻ython是一種解釋型編程語言,它不像C語言那樣,執(zhí)行前需要把源程序編譯成機(jī)器代碼,然后在上傳到機(jī)器中去執(zhí)行。解釋型編程語言,在開發(fā)的時(shí)候是不需要編譯的,上傳也只是把源代碼傳到了執(zhí)行的機(jī)器上,等到程序執(zhí)行的時(shí)候,再邊解析邊執(zhí)行。而機(jī)器本身并不認(rèn)識Python源代碼,這就需要有一個(gè)中間機(jī)構(gòu),可以把源代碼動(dòng)態(tài)解析成機(jī)器碼去執(zhí)行。這個(gè)就是通常說的虛擬機(jī)。就是可以運(yùn)行Python程序的虛擬的主機(jī),初始化固件的目的就是把這個(gè)虛擬的主機(jī)安裝到ESP32芯片中,這樣它就可以執(zhí)行Python程序了。
初始化固件成功之后在輸出窗口會(huì)顯示“燒錄成功”,如下圖所示。
接下來我們就來實(shí)現(xiàn)一個(gè)讓小車向前運(yùn)動(dòng)3秒鐘的MicroPython程序。首先需要使用的是“輸入/輸出”功能模塊里面的初始化功能,需要初始化控制智能小車向前前進(jìn)的4個(gè)GPIO引腳,為每個(gè)引腳定義一個(gè)唯一的名字,配置好之后,如下圖所示。
接下來就是將這4個(gè)引腳設(shè)置成高電平輸出,然后延遲3秒鐘,再恢復(fù)成低電平輸出了。這需要使用的功能是“輸入/輸出”功能模塊區(qū)的數(shù)字輸出功能了,相信有了前面的基礎(chǔ),應(yīng)該很容易就完成了。如下圖所示:
好了,程序的開發(fā)工作就完成了。下面就來測試一下。需要將源程序上傳到ESP32芯片內(nèi)部,單擊最上邊工具欄中的“上傳”按鈕就可以了。程序上傳完成后,會(huì)自動(dòng)啟動(dòng)運(yùn)行。再這里需要注意的是,這里的主程序并不會(huì)被循環(huán)調(diào)用,而是只會(huì)運(yùn)行一次。如果需要循環(huán)運(yùn)行,則需要相應(yīng)的循環(huán)功能模塊來實(shí)現(xiàn),這是與C語言不同的地方。
接下來也看一下Mixly為程序生成的MicroPython源代碼。如下所示:
import machine
import time
pin21 = machine.Pin(21, machine.Pin.OUT)
pin23 = machine.Pin(23, machine.Pin.OUT)
pin26 = machine.Pin(26, machine.Pin.OUT)
pin32 = machine.Pin(32, machine.Pin.OUT)
pin21.value(1)
pin23.value(1)
pin26.value(1)
pin32.value(1)
time.sleep_ms(3000)
pin21.value(0)
pin23.value(0)
pin26.value(0)
pin32.value(0)
下面對主要代碼解釋一下:
import machine import time
這兩句用來引入machine和time包,表示你要使用這兩個(gè)包中的功能。
pin21 = machine.Pin(21, machine.Pin.OUT)
將21引腳設(shè)置成輸出狀態(tài),并生成一個(gè)引腳對象。
pin21.value(1)
將21引腳的輸出設(shè)置為1(高電平為1,低電平為0)。
time.sleep_ms(3000)
延時(shí)3000毫秒。
這個(gè)生成的代碼基本也是和頁面中的功能是一一對應(yīng)的。應(yīng)該不難理解。接下來可以自己嘗試一下實(shí)現(xiàn)其他的各種運(yùn)動(dòng)了。
完整資料可進(jìn)群免費(fèi)領(lǐng)取!!!
嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長,不少人因?yàn)閷W(xué)習(xí)路線不對或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯(cuò)失高薪offer。不過別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點(diǎn)擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點(diǎn)贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!
- 贊