RockPro64でarmbianそしてRust

Pine64のRockPro64をarmbianで使ってみた。
だいぶ以前に購入したが、OSが安定しなかったのであまり使ってなかった。
armbian OSがRockPro64のサポートを始めたのでArmbian Focalをインストルールした。
RockPro64 4GBはHex Core Arm(6 CPU)のシングルボードでRaspberry Pi 4よりもCPUは高性能だ。
Wi-fiやBluetoothは標準では付いてないが、最近の価格だとRaspberry Pi 4B 4GBよりお買い得かもしれない。
Armbian FocalのOSイメージをMicroSDに焼いてOSをインストールした。
大容量の256GB MicroSDも使用できる。
ボードの電源を入れても起動しない場合は、resetボタンを押すとうまくいくかも知れない。
日本語を選択してインストールしても、文字化けする場合は、以下の日本語フォントと、ついでに日本語IMEをインストールする。

sudo apt install language-pack-ja language-pack-gnome-ja
sudo apt install fonts-takao fonts-vlgothic
sudo apt install ibus ibus-kkc ibus-mozc 

その他、初期設定は以下ツールを起動

sudo armbian-config  

 

次はPythonと開発環境をインストール、pythonコマンドでpython3を実行するようになる。

sudo apt install python3 python3-pip
sudo apt install python-is-python3 
sudo apt install build-essential cmake curl

Mesaのvulkanドライバーもインストールする。

sudo apt install libvulkan1 mesa-vulkan-drivers vulkan-utils

次はRyzenやiCoreと比べると非力なArm CPUでも不満のないレスポンスのアプリを開発するためにRustコンパイラーをインストール。
コンパイルされたバイナリコードを直接実行するので、Pythonなどのスクリプト系の言語より高速。
Rustの最新版はここからインストール。

Rustをインストールしたら早速、ボードのGPIO PinにLEDを接続してLチカをやってみる。
projectsホルダーを作成して、最初のプロジェクトを作成して実行。

mkdir projects
cd projects
cargo new gpio
cd gpio
cargo run

これでうまく行けば"Hello World"が表示されるはず。
RockPro64のGPIO Pinの説明はここにある。
今回は空いているPin16(GPIO1_A4)を使ってLEDを点滅させる。
LEDに直列に300Ω程度の抵抗を接続して、LEDの+側をPin16に、ー側をPin14(GND)に接続する。
プログラムでPin16を出力に設定して、1(High)にするとLEDが点灯、0(Low)にすると消灯する。
それではLED点滅用のプログラムコードを作成する。
cargo.tomlを編集して以下のように追加。

[dependencies]
sysfs_gpio = "0.6"


src/main.rsを以下のように書き換える。
main.rs

use sysfs_gpio::{Direction, Pin};
use std::thread::sleep;
use std::time::Duration;
 
// Define GPIO arrays
static BOARD_TO_ROCK: &'static [u8] = &[0, 0, 0, 52, 0, 53, 0, 152, 148, 0, 147, 54, 120, 50, 0, 33, 36, 0, 149, 40, 0, 39, 153, 41, 42, 0, 45, 43, 44, 155, 0, 156, 124, 125, 0, 122, 126, 121, 123, 0, 127];
static ROCK_VALID_CHANNELS: &'static [u8] = &[52, 53, 152, 54, 50, 33, 40, 39, 41, 43, 155, 156, 125, 122, 121, 148, 147, 120, 36, 149, 153, 42, 45, 44, 124, 126, 123, 127];
static BCM_TO_ROCK: &'static [u8] = &[43, 44, 52, 53, 152, 155, 156, 45, 42, 39, 40, 41, 124, 125, 148, 147, 124, 54, 120, 122, 123, 127, 33, 36, 149, 153, 121, 50];
 
fn main() {
    let my_pin_num = 16;//gpio number: 36
    let my_led = Pin::new(BOARD_TO_ROCK[my_pin_num].into()); // Pin 16 GPIO1_A4 gpio number 36 depends on chip, etc.
    //let my_bcm_num = 23;//gpio number: 36
    //let my_led = Pin::new(BCM_TO_ROCK[my_bcm_num].into()); // Pin 16 GPIO1_A4 gpio number 36 depends on chip, etc.
    println!("Start Blinking GPIO1_A4(36) Pin 16");
my_led.with_exported(|| {
        my_led.set_direction(Direction::Out).unwrap();        
        loop {
            my_led.set_value(0).unwrap();
            sleep(Duration::from_millis(100));
            my_led.set_value(1).unwrap();
            sleep(Duration::from_millis(100));
             }
    }).unwrap();
}


書き換えたら、再度プロジェクトをビルドして、root権限で実行。

cargo build --release
sudo target/release/gpio

Pinに接続したLEDが点滅したら成功。

これであなたもRustプログラマー。

 

コメント powered by CComment