人工智能小車(chē):基于ESP32的GPIO控制智能小車(chē)運(yùn)動(dòng)(MicroPython)

摘要

本文介紹用MicroPython實(shí)現(xiàn)ESP32的GPIO控制智能小車(chē)朝各個(gè)方向運(yùn)動(dòng)(點(diǎn)擊此處黃色字體領(lǐng)取文中相關(guān)資料

前邊的Mixly開(kāi)發(fā)之后,對(duì)應(yīng)生成的代碼是C語(yǔ)言的。可能很多人都覺(jué)得C語(yǔ)言很難學(xué),現(xiàn)在學(xué)Python的人很多,覺(jué)得學(xué)起來(lái)更容易一些。其實(shí),語(yǔ)言本身的難度差別不大,難在實(shí)現(xiàn)的功能不同以及各語(yǔ)言的庫(kù)函數(shù)(或者類(lèi)庫(kù))不太相同,才會(huì)覺(jué)得開(kāi)發(fā)的難度不同。

對(duì)于嵌入式開(kāi)發(fā)來(lái)說(shuō),本身對(duì)語(yǔ)言的要求是不高的,簡(jiǎn)單應(yīng)用的邏輯都是不復(fù)雜的,大家可以嘗試一下C語(yǔ)言的開(kāi)發(fā)方法。畢竟C語(yǔ)言在嵌入式開(kāi)發(fā)領(lǐng)域的好處是顯而易見(jiàn)的,程序精簡(jiǎn),運(yùn)行速度快。特別適合需要高速響應(yīng)的系統(tǒng)中,在運(yùn)動(dòng)控制、機(jī)器人領(lǐng)域是應(yīng)用最廣的開(kāi)發(fā)語(yǔ)言。

為了照顧更多的讀者,在智能小車(chē)這一系列文章中,還是增加一些MicroPython的講解。在整個(gè)系列文章中,還是會(huì)以C語(yǔ)言為主,也會(huì)階段性的增加一些MicroPython的實(shí)現(xiàn)方法。下面就先來(lái)講解一下用Mixly的Python Esp32功能模塊如何實(shí)現(xiàn)小車(chē)的各種運(yùn)動(dòng)。

運(yùn)行“Mixly”軟件,在初始的開(kāi)發(fā)板和開(kāi)發(fā)語(yǔ)言選擇頁(yè)面選擇“Python Esp32”功能,單擊后進(jìn)入到軟件開(kāi)發(fā)設(shè)計(jì)界面。這時(shí)需要在右上角選擇開(kāi)發(fā)板為“ESP32 Generic(4MB)”,端口選擇為開(kāi)發(fā)板在電腦上生成的串口設(shè)備對(duì)應(yīng)的串口。如下圖所示:

對(duì)于第一次使用MicroPython的開(kāi)發(fā)板,在開(kāi)發(fā)之前需要首先執(zhí)行一下菜單欄上的“初始化固件”功能,這是因?yàn)镻ython是一種解釋型編程語(yǔ)言,它不像C語(yǔ)言那樣,執(zhí)行前需要把源程序編譯成機(jī)器代碼,然后在上傳到機(jī)器中去執(zhí)行。解釋型編程語(yǔ)言,在開(kāi)發(fā)的時(shí)候是不需要編譯的,上傳也只是把源代碼傳到了執(zhí)行的機(jī)器上,等到程序執(zhí)行的時(shí)候,再邊解析邊執(zhí)行。而機(jī)器本身并不認(rèn)識(shí)Python源代碼,這就需要有一個(gè)中間機(jī)構(gòu),可以把源代碼動(dòng)態(tài)解析成機(jī)器碼去執(zhí)行。這個(gè)就是通常說(shuō)的虛擬機(jī)。就是可以運(yùn)行Python程序的虛擬的主機(jī),初始化固件的目的就是把這個(gè)虛擬的主機(jī)安裝到ESP32芯片中,這樣它就可以執(zhí)行Python程序了。

初始化固件成功之后在輸出窗口會(huì)顯示“燒錄成功”,如下圖所示。

接下來(lái)我們就來(lái)實(shí)現(xiàn)一個(gè)讓小車(chē)向前運(yùn)動(dòng)3秒鐘的MicroPython程序。首先需要使用的是“輸入/輸出”功能模塊里面的初始化功能,需要初始化控制智能小車(chē)向前前進(jìn)的4個(gè)GPIO引腳,為每個(gè)引腳定義一個(gè)唯一的名字,配置好之后,如下圖所示。

接下來(lái)就是將這4個(gè)引腳設(shè)置成高電平輸出,然后延遲3秒鐘,再恢復(fù)成低電平輸出了。這需要使用的功能是“輸入/輸出”功能模塊區(qū)的數(shù)字輸出功能了,相信有了前面的基礎(chǔ),應(yīng)該很容易就完成了。如下圖所示:

好了,程序的開(kāi)發(fā)工作就完成了。下面就來(lái)測(cè)試一下。需要將源程序上傳到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)功能模塊來(lái)實(shí)現(xiàn),這是與C語(yǔ)言不同的地方。

接下來(lái)也看一下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)

下面對(duì)主要代碼解釋一下:

import machine import time

這兩句用來(lái)引入machine和time包,表示你要使用這兩個(gè)包中的功能。

pin21 = machine.Pin(21, machine.Pin.OUT)

將21引腳設(shè)置成輸出狀態(tài),并生成一個(gè)引腳對(duì)象。

pin21.value(1)

將21引腳的輸出設(shè)置為1(高電平為1,低電平為0)。

time.sleep_ms(3000)

延時(shí)3000毫秒。

這個(gè)生成的代碼基本也是和頁(yè)面中的功能是一一對(duì)應(yīng)的。應(yīng)該不難理解。接下來(lái)可以自己嘗試一下實(shí)現(xiàn)其他的各種運(yùn)動(dòng)了。

完整資料可進(jìn)群免費(fèi)領(lǐng)取!!!

嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長(zhǎng),不少人因?yàn)閷W(xué)習(xí)路線不對(duì)或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯(cuò)失高薪offer。不過(guò)別擔(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ā)哦!

點(diǎn)擊這里找小助理0元領(lǐng)取

the end

評(píng)論(0)