2014/07/25

Banana Pi:試用映像檔Raspbian_For_BananaPi_v3.0並存取GPIO(連接LED與按壓式開關)

之前已試用過Lubuntu_For_BananaPi_v2.0Raspbian_For_BananaPi_v2.0,雖然一直想玩玩Android,可是開機後一按滑鼠就會當掉、螢幕沒訊號,原因不明。

這篇要試用Raspbian_For_BananaPi_v3.0,並且試著存取GPIO控制LED明滅與讀取開關狀態。

此版本的變動如下:

  • 以Raspbian 2014-06-20為基礎修改而來。
  • 分割區變正常了(兩個)、不再有NOOBS的分割區。
  • Linux核心版本是3.4.90。
  • 不僅可給Banana Pi使用,也可給Raspberry Pi使用。
  • 預設帳號密碼是pi/bananapi。
  • FEX組態有些更動。(嗯,這是什麼?)
  • 修改GPIO驅動程式,使之與RPi.GPIO相容。
  • 核心加入i2c-sunxi和i2cdev驅動程式。
  • 增加模組spi-sun7i.ko和spi-dev.ko。
  • 核心加入LED驅動程式,使用者定義的LED會像心跳一樣閃爍。
  • 開啟CSI相機模組的支援,譬如ov5460。
  • 預先安裝Arduino 1.5.4、S4A。
  • 預先安裝RPi.GPIO
  • 預先安裝wiringPi,仍處於測試階段,但除了SPI有點問題,其餘大部分功能皆可使用。
  • 預先安裝ScratchGPIO5,仍有點小問題。
  • 修正關機問題,可完全切斷電源。
  • 預先安裝eject,可安全移除儲存裝置。
  • 預先安裝ntfs-3g,可存取NTFS檔案系統。
  • 更新Banana Pi桌面環境的桌布。
  • 開啟序列埠,可從ttyS0登入。
  • 修正動態MAC位址的問題。
把映像檔燒錄到記憶卡後,插入Banana Pi開機,看到畫面囉!
然後更新套件,安裝相關套件,我也忘了安裝些什麼,大概就是python-setuptools、python-pip、python-dev、等等之類的。

然後連接好電路,如下,其中11與13代表實體針腳編號。
Banana Pi的GPIO腳位功能與Raspberry Pi相同,如下圖。
開始寫程式吧,先是Python(使用RPi.GPIO程式庫)、然後是C(使用wiringPi程式庫)。

讓LED閃爍的Python程式碼:
#!/usr/bin/env python

import time
import RPi.GPIO as GPIO

LED_PIN = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

while True:
    print("LED is on")
    GPIO.output(LED_PIN, GPIO.HIGH)
    time.sleep(1)
    print("LED is off")
    GPIO.output(LED_PIN, GPIO.LOW)
    time.sleep(1)

GPIO.cleanup()

以PWM控制LED漸亮漸暗的Python程式碼:
#!/usr/bin/env python

import time
import RPi.GPIO as GPIO

LED_PIN = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

pwm = GPIO.PWM(LED_PIN, 50)
pwm.start(0)

while True:
    for dc in range(0, 101, 5):
        pwm.ChangeDutyCycle(dc)
        time.sleep(0.1)
    for dc in range(100, -1, -5):
        pwm.ChangeDutyCycle(dc)
        time.sleep(0.1)

pwm.stop()
GPIO.cleanup()

以按壓式開關控制LED明滅的Python程式碼(並去除彈跳現象):
#!/usr/bin/env python

import time
import RPi.GPIO as GPIO

LED_PIN = 11
SWITCH_PIN = 13
TIME_LAPSE = 0.2

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(SWITCH_PIN, GPIO.IN)

status = GPIO.LOW
GPIO.output(LED_PIN, status)
timemark = time.time()

while True:
    timemark2 = time.time()
    if GPIO.input(SWITCH_PIN) == GPIO.HIGH and (timemark2 - timemark) > TIME_LAPSE:
        timemark = timemark2
        if status == GPIO.LOW:
            status = GPIO.HIGH
        else:
            status = GPIO.LOW
        GPIO.output(LED_PIN, status)

GPIO.cleanup()

讓LED閃爍的C程式碼:
#include <stdio.h>
#include <wiringPi.h>

#define LED_PIN 11

int main()
{
    wiringPiSetupPhys();
    pinMode(LED_PIN, OUTPUT);

    while(1){
        digitalWrite(LED_PIN, HIGH);
        delay(1000);
        digitalWrite(LED_PIN, LOW);
        delay(1000);
    }

    return 0;
}

以PWM控制LED漸亮漸暗的C程式碼:
#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h>

#define LED_PIN 11

int main()
{
    int i;
    wiringPiSetupPhys();
    softPwmCreate(LED_PIN, 0, 100);

    while(1){
        for(i = 0; i <= 100; i+=5){
            softPwmWrite(LED_PIN, i);
            delay(100);
        }
        for(i = 100; i >= 0; i-=5){
            softPwmWrite(LED_PIN, i);
            delay(100);
        }
    }

    return 0;
}

以按壓式開關控制LED明滅的C程式碼(並去除彈跳現象):
#include <stdio.h>
#include <wiringPi.h>

#define LED_PIN 11
#define SWITCH_PIN 13

int main()
{
    int ledStatus = LOW;
    unsigned int t = 0;

    wiringPiSetupPhys();
    pinMode(LED_PIN, OUTPUT);
    pinMode(SWITCH_PIN, INPUT);
    digitalWrite(LED_PIN, ledStatus);

    while(1){
        int switchStatus = digitalRead(SWITCH_PIN);
        if(switchStatus == HIGH){
            unsigned int temp = millis();
            if(temp - t > 300){
                t = temp;
                ledStatus = ledStatus == HIGH ? LOW : HIGH;
                digitalWrite(LED_PIN, ledStatus);
            }
        }
    }

    return 0;
}


參考資料:

2014/07/23

Banana Pi外殼

之前蒙Banana Pi開發團隊致贈一片Banana Pi,現在又拿到外殼,在此說聲謝謝並發篇文章介紹。

另外,在Lamobo網站可看到改名為Lamobo-M1的Banana Pi,在其拍賣網站現在也開始接受預購,分為精裝版與豪華版,不光只賣一片板子,還有很多周邊設備,內容物超所值。

回到正文,下圖是外殼的底座。

這個則是上蓋。
這四塊是圍繞在四周的,為各種端子連接埠鑽出孔洞。
四個螺絲與腳墊。
並且附上組裝說明書,真不錯。
步驟很簡單,按圖施工、保證成功。
按照說明書開始組裝吧,真的很簡單。下圖是組裝到一半的樣子。
蓋上上蓋後,完成囉。
四周的端子、連接埠、按鈕等等,一個不少。
這是底部的樣子,有散熱縫;四腳鎖上螺絲並黏上腳墊。
上蓋有兩片可拆卸,便可存取裡頭的GPIO與其他插槽。
滿不錯的,讓板子有個棲身之所,不用露宿野外了。

2014/07/20

Raspberry Pi新板子Model B+概略介紹與開箱

Raspberry Pi終於推出新板子了,嚴格說來不算全新,主晶片仍與之前Model B Rev 2相同,算是中幅程度的進化,所以叫做Model B+,定價仍是$35。據說Raspberry Pi基金會於2017年才會推出下一代全新板子,到時才會提昇硬體規格,目前正集中心力在軟體方面。

B+看起來仍很熟悉,改動的地方也不少,我最在意的是電源部分。

與Model B Rev 2相同的地方:
  • 主晶片仍是BCM2835,含有同樣的CPU、GPU。
  • 記憶體仍是512MB。
  • 板子大小長寬基本上仍相同。
  • 可跑的軟體仍相同,但記得下載2014.06之後的版本或自行更新。
  • 仍有DSI(連接將來的螢幕模組)、CSI(連接相機模組)。
改動的地方:
  • GPIO針腳現在有40個,其中前26個的功能仍與舊版相同。詳細腳位功能圖在此,而這裡有彩色腳位圖。多了9個GPIO、3個GND、2個跟PiPlate ID EEPROM相關的腳位(ID_SD與ID_SC)。
  • USB埠現在有4個,之前只有2個。改用新的USB/以太網路控制晶片,從LAN9512改成LAN9514。每個USB埠最多可供給600mA,但全部的上限是1.2A。
  • 記憶卡插槽現在是Micro SD卡,以前是SD卡。
  • 改用交換式穩壓器,之前是線性穩壓器,現在有兩個Step-Down(Buck)電源轉換器,效率更高更省電,功率耗損可減少0.5W到1W。
  • Micro-USB電源輸入端子,現在改成2A保險絲,具備極性保護功能,可熱插換(插入USB裝置不會重開機囉)。
  • 音訊線路納入低雜訊電源供應,提供更好的音質。
  • AV端子與3.5 mm音訊端子結合成一個。
  • USB埠往板子內推,突出板子的部份與以太網路埠對齊。
  • 四個組裝孔,位在矩形的四角落。
  • 把連接端子集中在兩邊,電源、HDMI、AV端子/音訊端子在一邊,USB埠與以太網路在一邊。既然連接端子位置變了,也就需要新的外殼。
關於省電部分,可看看這篇How Much Less Power does the Raspberry Pi B+ use than the old model B? » RasPi.TV,得知前後差異多少。

GPIO針腳現在有40個了,更方便。
既然有了B+,也會有Model A+,規格雖尚未確定,但從B+已可推想得到,據說將會有2個USB埠與40個GPIO腳位,而且耗電量也會更低,但沒有以太網路。

element14還在倫敦舉辦活動,贈送100片板子,需想辦法找出該冰淇淋攤位並說出通關密語「extra raspberry sauce」,就可以率先拿到B+板。真羨慕。

承蒙CAVEDU教育團隊鄭先生餽贈一片板子,謝謝。[廣告]他們也有進貨,可前往購買

盒子的正面,標示著「B+」字樣。
盒子的背面。
一張沒啥用的紙,正面。
一張沒啥用的紙,背面。
看到板子了,包在防靜電塑膠袋內
正面照。
背面照,可看到Micro SD記憶卡的插槽。。
Micro USB B型電源插座、HDMI、CSI、結合AV端子與耳機孔的插座。
以太網路、四個USB埠。
40個GPIO針腳。
DSI,將來會推出螢幕模組。

參考資料: