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が点滅したら成功。
コメント powered by CComment