首頁 > 評測 > 一板兩用,這個可以有!——GrovePi+擴展板使用手記

一板兩用,這個可以有!——GrovePi+擴展板使用手記

  • 作者:SATURN
  • 來源:21ic
  • [導(dǎo)讀]
  • GROVE模塊眾多,類型豐富,但是對于大部分樹莓派用戶來說,使用杜邦線來連接設(shè)備,有點不勝其煩。如果有個能提供標(biāo)準(zhǔn)GROVE接口的擴展板,而且又能與樹莓派引腳兼容的話,使用起來就方便多了!

GROVE模塊眾多,類型豐富,但是對于大部分樹莓派用戶來說,使用杜邦線來連接設(shè)備,有點不勝其煩。如果有個能提供標(biāo)準(zhǔn)GROVE接口的擴展板,而且又能與樹莓派引腳兼容的話,使用起來就方便多了!

GROVEPI+能滿足你的需求。

image1.jpg

GROVEPI+的口號就是:連接樹莓派及GROVE傳感器!

GROVEPI+起源于Dexter公司的BrickPi,其初衷是將LEGO Mindstorms與樹莓派連接起來,項目以眾籌的方式發(fā)起,項目最初的目標(biāo)是針對愛好者、黑客、工程師及創(chuàng)客等用戶群體,隨后發(fā)起者發(fā)現(xiàn)了更大的目標(biāo)即教育市場。

GROVEPI+擴展板是GROVEPI+ START KIT套件中的一部分,該套件除了擴展板之外,還提供了大量的GROVE傳感器模塊,配合擴展板使用,在樹莓派上能完成大部分的學(xué)習(xí)及原型驗證任務(wù)。

image2.jpg

擴展背面是26pin的GPIO連接器,其中包括電源接口等,GROVEPI+通過樹莓派的供電輸出來取電。

image3.jpg

GROVEPI+擴展板中間部分的MCU是一顆ATMeg328p,提供了Arduino擴展功能,在MCU四周排列的GROVE接口均由這一顆MCU提供。GROVEPI+與樹莓派之間的通信通過I2C接口進行,所有Grove模塊通過通用4針連接器電纜連接到GrovePi +上的通用Grove連接器。

Grove Pi +上的ATMEGA328微控制器,充當(dāng)Raspberry Pi和Grove傳感器之間的解釋器,通過I2C接口來發(fā)送,接收和執(zhí)行RaspberryPi發(fā)送的命令。ATMEGA328中預(yù)先寫入了控制代碼,具體詳情可以參考GROVEPI+在Github上的代碼。

如果想對這顆MCU進行編程,重新定制擴展板的功能,可以使用擴展板上的ISP接口來進行。該ISP接口只引出了焊盤,沒有焊接排針。

image4.png

另外一種更直接的方式是使用avrdude直接對其進行編程,這是命令行方式的編程操作,需要預(yù)先將代碼編譯成.hex格式的二進制文件,這種方法適合用來對固件進行升級。參考代碼如下

avrdude -c gpio -p m328p -U flash:w:.build/uno/firmware.hex

參考官方給出的原理圖,其中Arduino部分的內(nèi)容如下

image5.png

可以看到擴展板上引出的所有接口均來自ATMEG328,至于樹莓派本身的GPIO等接口,只引出了1~26pin(物理接口),參考原理圖如下

image6.png

接下開始安裝配置軟件部分。

只需要使用一條簡單的命令就可以,如下

curl -kL dexterindustries.com/update_grovepi | bash

該腳本程序會下載并配置好所有相關(guān)的軟件依賴及硬件配置,該命令會從網(wǎng)絡(luò)上下載相關(guān)的軟件包,所以先要保證樹莓派能正常連接Internet。

接下來使用git將演示代碼下載到本地,命令如下

git clone https://github.com/DexterInd/GrovePi

我們先來研究下相關(guān)的python代碼,看看樹莓派是如何與擴展板通信的,部分代碼如下

 

PYcode.jpg

 

上述代碼中的digitalRead及digitalWrite函數(shù)都使用了I2C操作,默認(rèn)的I2C地址為0x04,我們可以通過i2cdetect命令來查看設(shè)備狀態(tài)

image7.png

可以看到0x04地址,這就是擴展板上I2C設(shè)備的地址。為什么不使用串口來通信呢?我們都知道,樹莓派上的串口默認(rèn)讓BLE占用了,所以要使用BLE的話,就不能使用該串口了。

接下來就可以使用C#、Python語言通過I2C接口來控制Arduino了。一段簡單的代碼及程序運行效果,如下

from grove_rgb_lcd import *

setText("Hello world\nLCD test")

setRGB(0,128,64)

# Slowly change the colors every 0.01 seconds.

for c in range(0,255):

setRGB(c,255-c,0)

time.sleep(0.01)

setRGB(0,255,0)

setText("Bye bye, this should wrap")

程序運行效果如下

image8.jpg

此時的ATMEG328充當(dāng)一個解釋器,接收來自樹莓派的命令,然后忠實的執(zhí)行,當(dāng)然此時的ATMEG328也不能另作它用了。

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+