Showing posts with label Banana Pi. Show all posts
Showing posts with label Banana Pi. Show all posts

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/06/13

Banana Pi:試用Raspbian映像檔

大致了解Banana Pi之後,讓我們試試看安裝軟體部分吧。在Banana Pi官網的下載頁面,可找到四個映像檔,Lubuntu、Raspbian、Android、Scratch。

這一篇要嘗試Raspbian_For_BananaPi_v2.0,釋出日期2014-05-27,下載後的檔名是
Raspbian_For_BananaPi_v2.0.tgz,大小1.2 GB,解壓縮後得到3.7 GB的映像檔Raspbian_For_BananaPi_v2_0.img,所以至少需要4 GB的SD記憶卡,不過我用的是SanDisk 8 GB Ultra UHS-I Class 10。

關於Banana Pi需要的基本周邊設備,跟Raspberry Pi差不多,5V/1A或2A的電源供應器(官方論壇建議使用2A,但我用1A勉強還行,或許再加入其他東西、跑大程式時就不行了吧)、HDMI線(或轉接頭)、鍵盤、滑鼠、網路線、SD記憶卡。

映像檔頗大,下載後最好先檢查一下SHA1或MD5對不對,至於如何燒錄映像檔,咳咳,還請參考拙作「Raspberry Pi從入門到應用」。

燒錄完成後,發現它把記憶卡分成好幾個分割區,原本Raspberry Pi用的Raspbian只會有兩個,嗯,因為Banana Pi用的是NOOBS,可安裝多個OS,但只安裝Raspbian。
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk1
   1:             Windows_FAT_16 RECOVERY                118.8 MB   disk1s1
   2:                      Linux                         33.6 MB    disk1s3
   3:             Windows_FAT_32 BOOT                    62.9 MB    disk1s5
   4:                      Linux                         3.7 GB     disk1s6


插入Banana Pi,開機!先看到紅色電源LED燈亮起、然後是藍色以太網路指示燈閃爍。哇,跟Lubuntu不一樣,看得到螢幕輸出耶。
也可以使用預設帳號pi、密碼banana,透過SSH登入。
安裝xrdp,遠端桌面登入。Banana Pi的硬體規格比Raspberry Pi好,執行時的速度也較順,真不錯。
既然這是Raspbian,所以原本Raspberry Pi專屬的東西也都有,譬如Mathematica(但需要啟動碼)、Sonic Pi、Pi Store、Scratch。
哇,可以透過Pi Store安裝Freeciv耶,我很久以前沉迷的遊戲。
然後我想試試Pi版本的Minecraft,不過會出現錯誤訊息「failed to open vchiq instance」,vchiq應該是介於CPU與GPU之間的底層溝通機制,既然Banana Pi與Raspberry Pi採用不同的SoC(CPU與GPU),所以大概也不能玩了。


參考資料:

2014/06/11

Banana Pi:試用Lubuntu映像檔

大致了解Banana Pi之後,讓我們試試安裝軟體部分吧。在Banana Pi官網的下載頁面,可找到四個映像檔,Lubuntu、Raspbian、Android、Scratch。

這一篇嘗試的是Lubuntu_For_BananaPi_v2.0,釋出日期2014-05-16,下載後的檔名是Lubuntu_For_BananaPi_v2.0.tgz,大小516 MB,解壓縮後得到3.61 GB的映像檔Lubuntu_For_BananaPi_v2_0.img,所以至少需要4 GB的SD記憶卡,不過論壇上有人說4 GB空間不足,所以我用的是SanDisk 8 GB Ultra UHS-I Class 10。

關於Banana Pi需要的基本周邊設備,跟Raspberry Pi差不多,5V/1A或2A的電源供應器(官方論壇建議使用2A,但我用1A勉強還行,或許再加入其他東西、跑大程式時就不行了吧)、HDMI線(或轉接頭)、鍵盤、滑鼠、網路線、SD記憶卡。

映像檔頗大,下載後最好先檢查一下SHA1或MD5對不對,至於如何燒錄映像檔,咳咳,還請參考拙作「Raspberry Pi從入門到應用」。

燒錄完成後,發現它把記憶卡分成兩個分割區,都屬於Linux形式的檔案系統,所以插入Windows或Mac OS X看不到,但下指令後得知如下資訊:

   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk1
   1:                       0x81                         19.9 MB    disk1s1
   2:                       0x81                         3.9 GB     disk1s2

完成後,插入Banana Pi,開機!

螢幕黑黑一片,什麼都沒有,我也不知道怎麼解決。不過在論壇裡找找後發現,因為我的螢幕只有DVI、用了HDMI轉DVI轉接頭,好像會出問題,哇哩咧。

嘛,算了,SSH伺服器預設已開啟,找出Banana Pi自動取得的私有IP後,使用預設帳號linaro、密碼linaro,以SSH登入,耶!
不過沒看到圖形介面總是有點不爽,安裝xrdp套件後,試著遠端桌面登入吧,呃,連接時出現問題,什麼問題啊?
懶得找,試試看vnc吧,執行tightvncserver後,以vncpasswd設定密碼,從Windows執行vnc viewer連線。
哇,成功啦,看到香蕉囉。
試著執行裡頭的磁碟工具,可看出我的SD記憶卡被分割成兩個分割區,還有約4.1 GB的未用空間。
試著執行各種應用軟體,嗯,速度滿不錯的,畢竟硬體規格比Raspberry Pi好很多。
也有Scratch喔,有些老師應該很需要這個吧。
開啟Chromium瀏覽器,逛逛Banana Pi官網,速度也還不錯。
到處玩玩一陣子後,試著安裝Arduino並執行,再加上AbiWord與Gnumeric,嗯,看看記憶體用量,總共可用約900 MB(有些應該分給GPU了),已用約650 MB,剩餘可用約250 MB。
初步試用後並無發現大問題,照理說底層的核心與驅動程式移植完成後,就有了一套Linux系統,剩餘的就是上層的事情了。


參考資料:

2014/06/10

Banana Pi:開箱簡介

承蒙不棄,獲贈Banana Pi一塊,在此發一篇開箱文,並簡單介紹。

什麼是Banana Pi呢?簡言之就是一塊很小的單板電腦,類似於Raspberry Pi,但硬體規格更強、執行速度更快;使用AllWinner的系統單晶片A20,1 GB的DDR3 SDRAM記憶體。

我手上這塊板子,應屬於早期生產版,只送不賣,供各領域maker試用回饋意見,相當珍貴。Banana Pi開發團隊已完成少量生產與品質測試,想必再過不久就會開始量產,逐步推廣。

拿到的東西,就是一個白白的盒子,裡頭防靜電袋裝著板子。
另外還有一張紙。
嘿,這是板子的正面,可以看到各種連接端子。
這是背面,其中刻著A20的是主晶片,含有ARM Cortex-A7雙核心,屬於ARMv7架構,向後相容於Raspberry Pi較舊的ARMv6架構,主晶片還包含GPU(ARM Mali400MP2,支援OpenGL ES 2.0/1.1) ,左邊兩個黑色的晶片則是DDR3 SDRAM記憶體(CPU與GPU共享),右邊則SD記憶卡插槽。
板子上有三個LED指示燈,1:使用者自己定義的綠色LED,2:電源指示紅色LED,3:以太網路狀態藍色LED。
1:SATA電源,2:Micro USB插座(板子的電源),3:SATA,4:HDMI,5:LVDS(將來應會推出此介面的顯示器、觸控螢幕),6:U-Boot鍵。
1:電源鍵,2:CSI相機連接端子(目前不能使用Raspberry Pi的相機模組,將來呢?),3:重置鍵,4:USB OTG。
1:3.5mm音訊輸出,2:麥克風,3:AV端子視訊輸出,4:2x13排針(GPIO、UART、I2C、SPI、CAN、ADC、PWM、3.3V、5V、GND),腳位功能與Raspberry Pi相同。
1:Gigabit(10/100/1000M)以太網路RJ-45插槽,2:兩個USB 2.0插座,3:紅外線接收器。
除了標示為CON3的2x13排針,標示為CON1的CSI相機連接端子,標示為CON2的LVDS端子,另外還有1x2 J11(UART)與2x4 J12排針(UART、3.3V、5V、GND),各針腳的功能可到此查詢
尺寸是92mm × 60mm,跟Raspberry Pi(85.60mm x 54mm)比一比吧,稍微大一點,不能直接使用Pi的外殼。
光從規格來看,Banana Pi比Raspberry Pi強,但其實比Pi強的板子很多,但價格也較貴,若以性能價格比而言,Pi仍具有不錯的優勢,而且它紅了,社群廣大資源多。但是,據我不負責任的小道消息指出,Banana Pi的價格將會非常便宜,嘿嘿,且看今後誰哭誰笑囉。

Banana Pi比Raspberry Pi多出不少周邊功能,諸如麥克風、SATA、IR接收器、USB OTG、電源鍵與重置鍵,更為便利。

根據官網的下載頁面,可用的作業系統有Lubuntu、Raspbian、Android、Scratch,但只要底層的Linux核心與驅動程式移植完成後,將來應該會有更多選擇。


參考資料: