🍞

[Baker link. Dev] RustとRP2040マイコンでLチカしてみた-Lチカ編-

2024/10/06に公開

はじめに

本記事は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機能

baker-link-env-page

これらの機能は、プロジェクト作成DAP Serverの起動の順序で行います。もし、動作がおかしいなと思った時は出力されるLogをご確認ください。

本開発環境では、Rancher Desktopの起動が必須です。

**Baker link. Envを起動すると自動でRancher Desktopが起動する仕様になっています。**
もし起動していなかったら、Rancher Desktopのアプリのアイコンをクリックして起動状態にしてください。

プロジェクトの作成

  1. Baker link. EnvのCreate ProjectProject nameに好きなプロジェクト名を入力します。

  2. createをクリックして、プロジェクトの作成先のフォルダーを選択します。

    (Visual Stduio Code openにチェックが入っているとプロジェクト作成後に、VS Codeが自動起動します。)

  3. VS Codeの起動直後に左下のコンテナーで再度開くをクリックしてください。

dev_container_load

DAP Severの起動&デバック

プロジェクトがDev Containerで立ち上がったら、次はBaker link. Devを接続し、probe-rsのDAP Serverを起動させ、デバックを動作させます。

  1. PCとBaker link. DevをUSBで接続してください。

connection

  1. 接続したらBaker link. EnvのDAP ServerのRunクリックしてServerを起動してください。

  2. F5を押すと.vscode/launch.jsonprobe-runという設定が動作します。
    もう一度F5を押すと、プログラムが実行されます。
    VS Code上でログが表示されていることも確認できるかと思います。

pj_run

今画面に見えているのは、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