作者: linuxuser

  • PocketBeagle 2 技術實驗室 – 第一部分

    TechLab 是一款擴充板,用於幫助學習 PocketBeagle 1 和 2 的程式設計。 TechLab 內建了許多元件,因此它是學習程式設計的一種經濟實惠的方式。

    您可以下載 PocketBeagle 2 的鏡像文件,其中包含一個名為「Workshop」的鏡像。連接 TechLab 時需要使用此鏡像,因為它包含 TechLab 擴充板核心的驅動程式。 PocketBeagle

    TechLab 的規格:

    TechLab 是一款擴充板,可連接到 PocketBeagle,並添加感測器和輸出機制以增強 PocketBeagle 的功能。 TechLab 主要用於教育目的,用於教授程式設計知識,並增強 PocketBeagle 的功能。

    感測器和輸出機制包括:

    • 使用者輸入:
      • 2 個按鈕(左和右)
      • 1 個通過 ADC(類比數位轉換器)的光感測器
    • 用戶輸出:
      • 1 個採用 PWM(脈衝寬度調變)技術的三色 RGB LED
      • 透過 SPI 介面連接 2 位元 7 段數位管顯示器。
      • 1 個蜂鳴器透過 PRU(可程式實時單元)
    • 感應器:
    • 擴張:
      • 1 個 mikroBus 接頭,用於連接相容的擴充板
    • 記憶:
      • 1 個 I²C EEPROM(寫入保護),用於電路板識別和附加資料存儲

     要實現這一點,您需要Linux Debian 映像的「Workshop」版本,其中包含所有驅動程式以及與 TechLab 互動所需的腳本。

    圖 1 顯示了 TechLab。

    圖 1.gif

    圖 1:

    將 PocketBeagle 2 連接到 TechLab 時,您需要確保 PocketBeagle 2 上的 USB-C 介面與圖中「USB Reference」(USB 參考)標籤位於同一側,該標籤靠近 USB-A 介面。 SD 卡的位置與 PocketBeagle 2 上的標籤所示不同,它現在位於與 USB-C 介面同一側。

    將 PocketBeagle 2 推入引腳並通電後,指示燈應像之前一樣亮起,同時 TechLab 上的指示燈也應亮起。首次啟動後,如果 TechLab 上的指示燈在 PocketBeagle 2 上沒有亮起,則需要斷開電源,並檢查 PocketBeagle 2 與 TechLab 板的連接是否正確,以及所有引腳是否都已連接。

    注意: PocketBeagle 2 無法完全貼合 TechLab 上的接腳。 HAT

    與 CAPE:

    您可能聽說過擴充設備被稱為 HAT。這是樹莓派設備的通用名稱。對於 Beagle Board 設備,這些被稱為 CAPE。 HAT (Hardware Attached on Top,頂部硬體擴充) CAP E(Capulets Attached on Peripheral Expansion,週邊擴充模組)

    還有 其他類型的擴充板:

    • 樹莓派專用pHAT(頂部附加部分硬體)
    • Capes(適用於 BeagleBone),其中可以包括顯示 Capes
    • DIP封裝(用於晶片)
    • 夾層(可容納 96 個展板)
    • Arduino擴充板
    • 子板或擴充板是這些部件的通用電子術語。

    範例程式碼:

    TechLab 運作正常後,您需要確保已連接到互聯網,具體步驟請參閱文章「PocketBeagle 2」。

    請務必執行儲存庫更新,然後再進行升級:

    代碼:

    sudo apt update
    sudo apt upgrade -y

    完成此步驟後,您需要下載研討會範例程式碼。請使用以下命令下載;請記住,下載的檔案會儲存到目前工作目錄 (pwd) 中。

    代碼:

    學習物理

    git clone https://openbeagle.org/beagleboard/vsx-examples.git

    下載完成後,應該會有一個名為「vsx-examples」的資料夾。進入該資料夾後,裡面有四個子資料夾:

    1. 文件
    2. 比格爾骨
    3. 圖書館
    4. PocketBeagle-2

    對於我們的設備,我們需要一個名為「PocketBeagle-2」的資料夾。該資料夾下有八個重要的子資料夾。每個子資料夾都包含特定感測器或輸出裝置的範例程式碼。這八個子資料夾分別是:

    1. 加速度計
    2. 按鈕
    3. LED燈
    4. 七段
    5. RGB LED
    6. 光感應器
    7. 音調蜂鳴器
    8. EEPROM

    我們很快就會講解 Python 範例。下載套件中使用的語言是 Python 和 Rust,但我們將以 Python 為例,因為我已經寫過關於 Python 程式設計的文章。

    對於每個感測器和輸出設備,我們都會講解下載包中的範例。您可以在圖 2 中看到感測器和輸出機制。

    圖 2.jpg

    圖 2

     加速度計

    此加速度計採用的是「MMA-8453」晶片,這是一款三軸數位加速度計。

    在程式碼中,我們指定了晶片型號“mma8453”,然後找到該設備並將其位置賦值給一個變數。之後,我們可以存取晶片暫存器中的信息,以確定 X、Y 和 Z 軸的變化值。

    您可以在「/vsx-examples/PocketBeagle-2/accelerometer」資料夾下的「Python」類別中的「main.py」檔案中找到相關程式碼。

    如圖 1 所示,X 軸指向左右兩側。如果電路板水平放置,則 X 值為「0」。如果右側高於左側,則 X 值為正;如果右側低於左側,則 X 值為負。

    對於 Y 軸,如果電路板水平放置,則其值為「0」。如果頂部高於底部,則該值為正;如果底部高於頂部,則該值為負。

    如果電路板水平,則 Z 軸會上下穿過電路板。

    有三個檔案包含特定軸的值:

    • /sys/bus/iio/devices/iio\:device1/in_accel_x_raw
    • /sys/bus/iio/devices/iio\:device1/in_accel_y_raw
    • /sys/bus/iio/devices/iio\:device1/in_accel_z_raw

    每個檔案中的值是 加速度計在各個軸上的基本值,但要獲得以米每秒每秒 (m/s²) 為單位的值,您需要將該軸的值乘以靈敏度(或比例),該靈敏度或比例位於“/sys/bus/iio/devices/iio\:device1/in_accel_scale”中。當我使用“cat”命令查看內容時,我的比例值為“0.​​038307”。請記住,設備靜止時,Z 軸的加速度值為 9.8 m/s²,這是重力加速度。如果移動電路板,所有軸的加速度值都會改變,移動速度越快,加速度值越大。

    「vsx-examples」中提供的加速度計代碼如下:

    代碼:

    學習 Linux

    from time import sleep
    from sysfs import Device
    
    DEV_NAME = "mma8453"
    accel = Device(name=DEV_NAME)
    scale = accel.sysfs("in_accel_scale").read_float()
    x_raw = accel.sysfs("in_accel_x_raw")
    y_raw = accel.sysfs("in_accel_y_raw")
    z_raw = accel.sysfs("in_accel_z_raw")
    
    while True:
        x_scaled = x_raw.read_float() * scale
        y_scaled = y_raw.read_float() * scale
        z_scaled = z_raw.read_float() * scale
        print(
            f"Acceleration along X = {x_scaled:.2f} ms^2, Y = {y_scaled:.2f} ms^2, Z = {z_scaled:.2f} ms^2"
        )
        sleep(1)

    腳本開頭導入的「sysfs」檔案用於建立硬體與核心的介面。

    腳本隨後將裝置名稱賦值給變數“DEV_NAME = “mma8453″”,並在下一行將裝置位置賦值給變數“accel”。接下來,我們將變數「scale」、「x_raw」、「y_raw」和「z_raw」分別對應到包含各軸數值的檔案位置。這樣,我們就可以每秒讀取一次這些數值,計算出三個軸的加速度。

    如果需要,我們可以測試X軸值,判斷設備是向左還是向右移動。測試Y軸值可以判斷設備是向前還是向後移動。測試Z軸值則可以判斷設備是正放還是倒放。 TechLab板上有兩個

    按鈕

    ,分別是左鍵和右鍵,分別標示為「L」和「R」。您可以在圖2的左下角看到它們的標記。

    我們可以使用 Python 編寫程式碼來捕捉使用者按下或放開按鈕的事件。在此之前,我們需要了解按鈕的工作原理以及如何判斷按鈕是否被按下或放開。

    按鈕透過通用輸入/輸出 (GPIO) 引腳傳輸資料。這些腳位的輸入位於

    `/dev/char/` 目錄下。它將程式碼傳送到磁碟機 13 (GPIO) 的 64 號引腳,因此該資料夾中的檔案名稱為 `13:64`。該檔案的內容是二進位格式,我們需要透過從 `main.py` 匯入的 `chardev.py` 檔案將其轉換為二進位格式。範例程式碼位於 `vsx-example/PocketBeagle-2/button/python/` 目錄下。如果您載入 `main.py` 並存取變數 `evt`,則輸出如下所示:

    代碼:

    科技裝備商店

    InputKey(timeval=Timeval(tv_sec=8.72694379e-315, tv_usec=5.19105e-319), inp_type=1, code=105, value=0)

    清單中的每個項目都由“evt”變數進行細分,例如,“code”被引用為“evt.code”或“evt.value”。事件代碼 (evt.code) 代表按鈕的代碼。左側按鈕的代碼為“105”,右側按鈕的代碼為“106”。

    「evt.value」決定使用者是按下按鈕(0)還是放開按鈕(1)。

    在初始範例程式碼中,它只偵測右側按鈕是否被按下以及是否被放開。我們可以修改“main.py”文件,使其包含左側按鈕並檢測按鈕是否已按下:

    代碼:

    from chardev import CharDev
    BUTTONS_NAME = "buttons"
    LEFT_CODE = 105
    RIGHT_CODE = 106
    btn = CharDev.input_device_by_name(BUTTONS_NAME)
    print("Waiting for Input")
    while True:
        evt = btn.read_evt()
        if evt.code == RIGHT_CODE and evt.value == 1:
            print("Right button released")
        if evt.code == LEFT_CODE and evt.value == 1:
            print ("Left button released")
        if evt.code == RIGHT_CODE and evt.value == 0:
            print("Right button pressed")
        if evt.code == LEFT_CODE and evt.value == 0:
            print ("Left button pressed")

    在程式碼中,我們首先導入 ‘chardev.py’。我們將 ‘BUTTONS_NAME’ 變數的值設為 ‘buttons’。然後,我們分別在各自的變數中設定左右按鈕的值。接著,我們指定變數 ‘btn’ 應該包含從匯入的 ‘chardev’ 檔案中讀取的按鈕輸入。之後,代碼會列印“等待輸入”。程式碼的最後一步是運行一個循環。在循環中,我們從之前提到的資料夾中取得事件 (evt)。然後,程式碼會檢查 ‘evt’ 項目以確定發生了哪個事件,並列印輸出以顯示哪個按鈕被按下或釋放。您可以按住按鈕以查看單個按鈕的輸出,然後再釋放按鈕以查看最終輸出「釋放」。

    總結:

    為了避免文章篇幅過長而涵蓋所有感測器和輸出機制,我們將在下一篇文章中詳細介紹。

    我必須說,TechLab 開發板是 PocketBeagle 2 的一個非常有趣的擴充設備。這兩款開發板都很好用,而且就它們的尺寸而言,功能非常強大。

    請造訪www.BeagleBoard.com並儘快訂購。

    比較電腦配件

  • 網站第一篇文章

    歡迎使用 WordPress。這是這個網站的第一篇文章,試試為這篇文章進行編輯或直接刪除,然後開始撰寫新文章!