[Baker link. Dev] RustとRP2040マイコンでLチカしてみた-Lチカ編-
はじめに
本記事はBaker link. Tutrial を参考にしています。詳細については、そちらをご確認ください。
Baker link. Envについて
Baker linkプロジェクトでは、Baker link. Devを用いたRust言語での組み込み開発環境をBaker link. Envによって簡単に構築することができます。本記事は、ソフトウェアに詳しくない著者が体験してみた記事です。
Baker link. Envのインストール
こちらの記事を参考にしてください。
Baker link. Envの使い方
Baker link. Envは、3つの機能があります。
- プロジェクトを作成する機能
- DAP Serverを起動する機能
- Log機能
これらの機能は、プロジェクト作成、DAP Serverの起動の順序で行います。もし、動作がおかしいなと思った時は出力されるLogをご確認ください。
本開発環境では、Rancher Desktopの起動が必須です。
**Baker link. Envを起動すると自動でRancher Desktopが起動する仕様になっています。**
もし起動していなかったら、Rancher Desktopのアプリのアイコンをクリックして起動状態にしてください。
プロジェクトの作成
-
Baker link. Envの
Create Project
のProject name
に好きなプロジェクト名を入力します。 -
create
をクリックして、プロジェクトの作成先のフォルダーを選択します。(
Visual Stduio Code open
にチェックが入っているとプロジェクト作成後に、VS Codeが自動起動します。) -
VS Codeの起動直後に左下の
コンテナーで再度開く
をクリックしてください。
DAP Severの起動&デバック
プロジェクトがDev Containerで立ち上がったら、次はBaker link. Devを接続し、probe-rsのDAP Serverを起動させ、デバックを動作させます。
- PCとBaker link. DevをUSBで接続してください。
-
接続したらBaker link. EnvのDAP Serverの
Run
クリックしてServerを起動してください。 -
F5
を押すと.vscode/launch.json
のprobe-run
という設定が動作します。
もう一度F5
を押すと、プログラムが実行されます。
VS Code上でログが表示されていることも確認できるかと思います。
今画面に見えているのは、3色のLEDが光りながらログに何色が点灯しているか表示するプログラムです。
Lチカプログラム
動作しているプログラムを以下に示します。本プログラムの詳細については、こちらをご覧ください。
#![no_std]
#![no_main]
use defmt::*;
use defmt_rtt as _;
use panic_probe as _;
use rp2040_hal as hal;
use hal::pac;
use embedded_hal::delay::DelayNs;
use embedded_hal::digital::OutputPin;
#[link_section = ".boot2"]
#[used]
pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER_GENERIC_03H;
const XTAL_FREQ_HZ: u32 = 12_000_000u32;
#[rp2040_hal::entry]
fn main() -> ! {
info!("Program start!");
let mut pac = pac::Peripherals::take().unwrap();
let mut watchdog = hal::Watchdog::new(pac.WATCHDOG);
let clocks = hal::clocks::init_clocks_and_plls(
XTAL_FREQ_HZ,
pac.XOSC,
pac.CLOCKS,
pac.PLL_SYS,
pac.PLL_USB,
&mut pac.RESETS,
&mut watchdog,
)
.ok()
.unwrap();
let mut timer = rp2040_hal::Timer::new(pac.TIMER, &mut pac.RESETS, &clocks);
let sio = hal::Sio::new(pac.SIO);
let pins = hal::gpio::Pins::new(
pac.IO_BANK0,
pac.PADS_BANK0,
sio.gpio_bank0,
&mut pac.RESETS,
);
let mut green_led = pins.gpio22.into_push_pull_output();
let mut orange_led = pins.gpio21.into_push_pull_output();
let mut red_led = pins.gpio20.into_push_pull_output();
loop {
info!("green");
green_led.set_high().unwrap();
timer.delay_ms(2000);
green_led.set_low().unwrap();
info!("orange");
for _ in 1..4 {
orange_led.set_high().unwrap();
timer.delay_ms(500);
orange_led.set_low().unwrap();
timer.delay_ms(500);
}
orange_led.set_low().unwrap();
info!("red");
red_led.set_high().unwrap();
timer.delay_ms(2000);
red_led.set_low().unwrap();
}
}
まとめ
著者がイメージするRust言語を用いた組み込み開発は、環境構築に高難度、長時間、高費用が必要というものでした。しかし、Baker linkプロジェクトで提供されるBaker link. Dev, Env, 本記事が参考にするBaker link. Tutrialでは、Lチカまでが最短で実現できます。もちろん、プログラムの詳細については、続けて学習する必要がありますが、Tutrialでサポートされています!
Discussion