用Python讓Raspberry Pi「動」起來

【編者按】本文是來自奧鬆機器人社區的投稿,做者爲小強之工,真名貝振權,無線電、電子、嵌入式愛好者。python

前 段時間,接觸了一款在開源硬件界被稱爲是「人氣之王」的樹莓派(Raspberry Pi)袖珍計算機,功能強大的她擁有一顆SOC,集CPU、GPU、 DSP和SDRAM爲一體,以SD卡爲內存硬盤,擁有網卡、USB口(能夠直接鏈接鍵盤、鼠標、U盤等外設)、同時具有視頻、音頻模擬輸出以及HDMI高 清輸出的能力,在外部接口上還具有了通常計算機設備不具備的GPIO、SPI、I2C、UART等硬件配置,爲咱們的創新機器人制做提供硬件條件。切入正 題,用Python讓Raspberry Pi動起來,在這個醒目的標題中能夠看出我這個製做的主題就是利用Raspberry Pi的硬件和 Python語言來完成一個機器人制做,那下面就聽我娓娓到來吧! 網絡


硬件搭建篇 框架

在 此次製做中,我選擇了一款AS-4WD鋁合金的小車平臺,以小車平臺爲基礎,在上面添加了7寸高清液晶顯示器、無線鍵盤、藍牙模塊以及電機驅動器等配件, 如圖1是羅列製做機器人所用的物料。整個樹莓派的小車系統分兩步來搭建,首先是搭建樹莓派的計算機系統,雖然是一個袖珍的計算機,可是「麻雀雖小,五臟俱 全」,除去樹莓派的主板外,還需準備一套標準通用的USB鍵盤鼠標,一個顯示器(在本文描述的是一個用於車載監控設備的7寸顯示器,經過RCA接口相 連),一塊電池用於整個系統供電,最後也是最關鍵的須要準備預裝了Debian系統的SD卡(對於SD卡要求讀寫最好在4MB/S以上、容量大於2GB, 固然容量更大速度越快更好)。在完成計算機系統搭建後,接下來是完成機器人系統的搭建,在原理上,主要利用樹莓派那兩排外置的針腳的GPIO功能控制外置 樹莓派專用的驅動器(Raspi Driver)來實現電機的使能、正反轉控制,以及利用UART功能與藍牙數傳模塊實現數據通訊,這樣就能經過手機端的 藍牙遙控器對小車進行控制,如圖2是總體硬件搭建完後的靚圖,在圖3中給出了樹莓派機器人的硬件連線圖。編輯器

圖1 機器人所用物料性能

圖2-1 會行走的樹莓派電腦學習

圖3 樹莓派機器人的硬件連線圖測試

上手樹莓派之Python庫配置篇spa

在使用樹莓派時,也是我第一次接觸Python這門語言,經過對相關資料的學習,發現Python是門簡單易學的語言,若是有着C或者其餘的計算機語言基礎,基本上半天就能上手編寫程序,在開始編寫小車控制程序前須要對咱們的樹莓派計算機的相關Python的庫文件進行安裝設置,首先是GPIO,打開LX終端(LXTerminal),更新apt-get軟件安裝包列表(注意必需要在網絡鏈接正常狀況下),而後執行安裝命令來安裝raspberry-gpio-python包,具體指令以下:.net

pi@raspberrypi  ~ $ sudo apt-get update調試

pi@raspberrypi  ~ $ sudo apt-get install python-rpi.gpio

在安裝完成Python的GPIO庫後,接下來是安裝Python的UART庫,和上述以前步驟類似,更新apt-get軟件安裝包列表,後安裝Python的串口通訊模塊,具體指令以下:

pi@raspberrypi  ~ $ sudo apt-get update

pi@raspberrypi  ~ $ sudo apt-get install python-serial

經過上述兩個步驟,已經安裝好了Python與樹莓派外置硬件GPIO以及UART庫文件,在接下來的小車控制程序裏就能夠直接調用代碼了,在開始編寫控制程序前,須要對默認串口的一些參數進行更改,因爲系統默認的串口功能用於輸出內核日誌,相關的參數與咱們的外界的串口設備有所不一樣,因此須要對其啓動配置文件進行更改,在LXTerminal經過鍵入「sudo nano /boot/cmdline.txt」進入/boot/cmdline.txt,用vi編輯器打開cmdline.txt文件,將

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

去掉

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

退出vi編輯器時,注意要對文件進行保存;同時須要對系統初始化文件進行編輯,在 LXTerminal中,鍵入「 sudo nano /etc/inittab」,而後找到如下片斷內容

#Spawn a getty on Raspberry Pi serial line

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

改成以下,註釋掉對「ttyAMA0」端口的參數便可,退出vi編輯器時,一樣須要注意要對文件進行保存

#Spawn a getty on Raspberry Pi serial line

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

重啓樹莓派,該配置就能夠生效了,完成了上述步驟,就能夠進入下一章節,機器人調試進程。

上手樹莓派之Python GPIO調試篇

做爲第一次上手樹莓派外置IO時可能有些不惑,如何利用在計算機上的語言來讓你的計算機的IO出現跳動呢!!其實並不複雜,只要打開系統桌面上的IDLE3編輯器,分4步走,

Step1:導入GPIO庫,在編輯行中鍵入「import RPi.GPIO as GPIO」,按「回車」鍵執行便可;

Step2:設定GPIO引腳使用標號模式,如果選擇板子上的標號,在編輯器中鍵入「GPIO.setmode(GPIO.BOARD)」如果使用芯片自己的標號模式,只要鍵入「GPIO.setmode(GPIO.BCM)」;

Step3:設定對應GPIO的模式,如果使用其輸出功能「GPIO.setup(pin_number,GPIO.OUT)」,使用輸入功能只要將GPIO.OUT修改成GPIO.IN便可;

Step4:在輸出模式下,使對應管腳的電平置高或者置低,在輸入模式下只要讀取相應管腳的電平便可。若是你對上述4個步驟有了理解,那就嘗試一下,我在此對RasPi Driver上熄滅LED1以及點亮LED2操做爲例說明,給出試驗代碼以及試驗實際的照片(如圖4),若是你也能實現上述操做,那就恭喜你,已經掌握了在樹莓派上對GPIO的使用。

import RPi.GPIO as GPIO

#### gpio init

GPIO.setmode(GPIO.BCM)

GPIO.setup(7,GPIO.OUT) #LED2

GPIO.setup(8,GPIO.OUT) #LED1

GPIO.output(7,GPIO.LOW) #LED2 ON

GPIO.output(8,GPIO.HIGH)#LED1 OFF

 圖4 試驗截圖

上手樹莓派之Python UART調試篇

對於樹莓派的UART功能的實現其實方法和步驟與上面的GPIO 的使用相似,也是分做4步走:

Step1:導入串口庫,鍵入「import serial」;

Step2:初始化串口,在此設置於外部藍牙配套的參數,BUAD=9600,timeout = 0.5,相應的鍵入「ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0.5)」;

Step3:打開使能串口,「if ser.isOpen() == False:ser.open()」;

import serial

import time

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0.5)

while True:

if ser.isOpen() == False:

ser.open()

print ser.read()

 ser.write('A')

time.sleep(1)

Step4:當讀取數據時使用「ser.read() 」,當發送數據時使用「ser.write(數據)」。在這裏我通過IDLE3編輯了一個Python的程序Serial_test.py,而後直接在LXTerminal鍵入「sudo python Serial_test.py」(注意,因爲默認狀態下是利用帳戶名:pi進行操做,因此須要將文件放置在/home/pi目錄下,才能直接執行,無需),而後手機藍牙遙控器(如圖5)與藍牙透傳模塊相鏈接,成功通信後,既能夠經過手機遙控器的按鍵按鈕發送相應字符在串口上看見對應字符打印至屏幕。在此我給出了測試的源程序(以下),經過電腦端的藍牙虛擬出串口與樹莓派外接的藍牙透明串口模塊鏈接,進行數據傳遞,電腦端的串口助手發送字母「B」,同時收到樹莓派發送來的字母「A」並顯示在調試的接收窗口,樹莓派端收到由電腦端發送來的字母「B」,並打印出來,經過此現象既能夠證實樹莓派的UART功能測試正常,以下附實驗的屏幕截圖6。

圖5 手機藍牙遙控器

圖6 測試照片 


上手樹莓派之機器人控制篇

對於AS-4WD小車的控制而言就比較簡單了,在本製做中用到了RasPi專用的電機驅動板,板載以L293爲核心的電機驅動電路,以及經過兩組每組2個IO來實現電機的正反轉、以及使能。

經過上述的管腳佈置能夠清晰的看出,樹莓派外置硬件與RasPi Driver的鏈接關係,通過GPIO4以及GPIO17控制其中一路電機的轉向以及使能(高電平有效),利用GPIO8來對正反轉進行狀態指示,同理可見GPIO25用於另外一路的正反轉控制、GPIO10爲使能、GPIO7狀態指示;同時利用板上外置的UART接口與藍牙串口模塊鏈接,具體方法不在贅述。

 對於整個程序框架相對之前的單片機版的遙控小車而言是比較簡單的,主要分功能模塊初始化設置、循環判斷遙控值以及輸出對應功能運動值,詳見系統控制原理框圖8。導入庫文件,對GPIO和串口配置,具體參數和上述一致,不在贅述;完成上述設置後,就是整個控制小車的程序了,讀取串口緩衝區的值,隨後完成循環判斷由手機藍牙遙控器發送的字符數據「A」、「B」、「C」、「D」,對應相應的運動動做(注意:在對應相應的動做時,可能因爲驅動板電機的接線緣由高低電平不對應預設動做,能夠靈活適當調整接線或者軟件修改電平)

圖8 系統控制原理框圖

至此,用樹莓派的小車已經告一段落,也是完成了筆者對樹莓派的電子製做的處女做,經過幾天的的學習,發現其資源以及各方面的性能容許咱們開發更多更好地電子製做、機器人制做,相信在不久的未來,還能繼續爲你們奉上樹莓派大餐!

相關文章
相關標籤/搜索