6.4 悟空類別範例:Grove模組

在悟空類別的實作介紹之後,這章節會繼續了解一些相仿的範例,讓開發者能夠針對個別應用的需要,來實作新的悟空類別。

我們的範例是使用Grove模組(http://www.seeedstudio.com/wiki/Grove_System), 選擇Grove模組的原因是,這個模組可以透過各家的擴充板,輕易地連接到物聯網開發板(Edison, Galileo and Raspberry Pi),並且,Grove系列提供了非常豐富的元件與函式庫給物聯網的開發者。

關於更多Grove開發模組(Grove Starter Kit)的資訊,請參考以下的網頁:
使用Intel Edison or Galileo: https://software.intel.com/iot/hardware/devkit
使用Raspberry Pi: http://www.dexterindustries.com/grovepi/

輸入/輸出介面(IO Interface)

如同上節所述,爲了讓同一個Grove模組的範例能執行在Edison, Galileo和Raspberry Pi,我們新增了這個介面(udpdevice_io_interface.py)來決定如何使用三個不同的GPIO函式庫,對Edison,Galileo來說,所需要匯入的GPIO函式庫爲mraa;對Raspberry Pi來說,所需要匯入的GPIO函式庫爲rpi,若使用Grove Pi擴充板的話,所需要匯入的GPIO函式庫則爲grovepi,因此,在這個介面的一開始(如下圖),我們定義三種裝置的選項:DEVICE_TYPE_MRAA,DEVICE_TYPE_GPI以及DEVICE_TYPE_RPI,並於第12行決定要使用哪一個選項來執行Grove模組的範例。

GPIO使用方式

除了用這個介面決定使用哪一種裝置外,這個介面也定義了如何在裝置上使用GPIO,目前爲止,我們在這個介面中定義了6個使用GPIO的共同方式,如下所示:

pin_mode(pin, pin_type, pin_mode, **kwargs)  
# 這個函式是用來初始化GPIO腳位(pin)的設定,包括型態(pin_type)是數位或類比(digital/analog),
# 或者模式(pin_mode)是輸入或輸出。

digital_read(pin_obj)   
# 若腳位的型態設定爲數位,模式設定爲輸入,我們可以用這個函式來讀取GPIO的值,
# pin_obj是pin_mode的回傳物件。  

digital_write(pin_obj, val)   
# 若腳位的型態設定爲數位,模式設定爲輸出,我們可以用這個函式來寫入GPIO,
# pin_obj是pin_mode的回傳物件,val是要寫入GPIO的值。  

analog_read(pin_obj)  
# 若腳位的型態設定爲類比,模式設定爲輸入,我們可以用這個函式來讀取GPIO,  
# pin_obj是pin_mode的回傳物件。
# 但由於Raspberry Pi本身不支援類比輸入,
# 所以此函式只適合用在Edison,Galileo以及使用grovepi擴充板的Raspberry Pi。 

analog_write(pin_obj, val)
# 若腳位的型態設定爲類比,模式設定爲輸出,我們可以用這個函式來寫入GPIO,
# pin_obj是pin_mode的回傳物件,val是要寫入GPIO的值。 
# 但目前只有使用grovepi擴充板的Raspberry Pi支援類比輸出。

temp_read(pin_obj)
# 這是針對Grove模組中的溫度感測器所定的介面函式,
# pin_obj是pin_mode的回傳物件。
# 但由於Raspberry Pi本身不支援類比輸入,
# 所以此函式只適合用在Edison,Galileo以及使用grovepi擴充板的Raspberry Pi。

目前關於Grove開發模組的悟空裝置程式,大都是使用以上的介面函式來讀取或寫入開發板的GPIO,然而,這個介面目前只限於使用數位和類比GPIO,尚未支援共同的PWM,I2C,SPI,以及UART介面,主要的原因是,各個GPIO函式庫在處理數位和類比GPIO的方式較爲接近,所以容易定義一個共同的介面,但其餘的傳輸方式就有許多差異,因此,目前若需使用PWM,I2C,SPI,以及UART傳輸的Grove模組時,就不會使用這個介面,而是針對各個開發板獨自開發,比方說蜂鳴器(Buzzer),mraa函式庫是用PWM來控制蜂鳴器,但grovepi函式庫只支援用類比輸出(analog write)來控制蜂鳴器,於是蜂鳴器的範例就沒有使用這個介面。

Grove開發模組範例(Grove Starter Kit)

以下列出使用各個GPIO介面函式的範例:

  • 使用數位輸入GPIO的按鈕(Button)

  • 使用數位輸出GPIO的繼電器(Relay)

  • 使用類比輸入的旋轉電位器(Slider)

  • 使用特定函式的溫度感測器(Temperature Sensor)

這些範例程式均存放於:

https://github.com/wukong-m2m/wukong-darjeeling/tree/release0.4/wukong/gateway/udpwkpf

開發板的腳位編號

在選擇使用哪一個裝置執行Grove開發模組的範例後,我們需要確認範例程式中所定義的腳位編號,並將Grove開發模組連接到合適的位置,以下分別是Edison的Grove擴充板,Raspberry Pi與其GrovePi擴充板的腳位定義,這些腳位編號通常定義在每個悟空裝置程式的最前面。