๋์นจ๋ฐ
I2C ๋์นจ๋ฐ์์ ๋ฐฉํฅ์ ์ฝ๊ณ ํ๋ ๊ฐ์ ์ง๋ ฌ ํฌํธ์ ๊ธฐ๋กํ์ธ์. ์๊ฐ์ด ์์ผ๋ฉด ์ด๋ป๊ฒ๋ LED์ ํ์ํ๊ฑฐ๋ ๋ฒํผ์ ์ฌ์ฉํ์ธ์.
ํํธ:
lsm303agr
๋ฐmicrobit-v2
ํฌ๋ ์ดํธ ๋ฐ micro:bit ํ๋์จ์ด์ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.- LSM303AGR ๊ด์ฑ ์ธก์ ์ฅ์น๋ ๋ด๋ถ I2C ๋ฒ์ค์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- TWI๋ I2C์ ๋ ๋ค๋ฅธ ์ด๋ฆ์ด๋ฏ๋ก I2C ๋ง์คํฐ ์ฃผ๋ณ๊ธฐ๊ธฐ๋ TWIM์ด๋ผ๊ณ ํฉ๋๋ค.
- LSM303AGR ๋๋ผ์ด๋ฒ์๋
embedded_hal::blocking::i2c::WriteRead
ํธ๋ ์์ ๊ตฌํํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.microbit::hal::Twim
๊ตฌ์กฐ์ฒด๊ฐ ์ด๋ฅผ ๊ตฌํํฉ๋๋ค. - ๋ค์ํ ํ๊ณผ ์ฃผ๋ณ๊ธฐ๊ธฐ์ ๊ดํ ํ๋๊ฐ ์๋
microbit::Board
๊ตฌ์กฐ์ฒด๊ฐ ์์ต๋๋ค. - ์ํ๋ ๊ฒฝ์ฐ nRF52833 ๋ฐ์ดํฐ์ํธ๋ฅผ ํ์ธํ ์๋ ์์ง๋ง ์ด ์ฐ์ต์์ ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค.
์ฐ์ต ํ
ํ๋ฆฟ์ ๋ค์ด๋ก๋ํ๊ณ compass
๋๋ ํฐ๋ฆฌ์์ ๋ค์ ํ์ผ์ ์ฐพ์ต๋๋ค.
src/main.rs:
#![no_main] #![no_std] extern crate panic_halt as _; use core::fmt::Write; use cortex_m_rt::entry; use microbit::{hal::uarte::{Baudrate, Parity, Uarte}, Board}; #[entry] fn main() -> ! { let board = Board::take().unwrap(); // Configure serial port. let mut serial = Uarte::new( board.UARTE0, board.uart.into(), Parity::EXCLUDED, Baudrate::BAUD115200, ); // Use the system timer as a delay provider. let mut delay = Delay::new(board.SYST); // Set up the I2C controller and Inertial Measurement Unit. // TODO writeln!(serial, "Ready.").unwrap(); loop { // Read compass data and log it to the serial port. // TODO } }
Cargo.toml (๋ณ๊ฒฝํ ํ์๊ฐ ์์):
[workspace]
[package]
name = "compass"
version = "0.1.0"
edition = "2021"
publish = false
[dependencies]
cortex-m-rt = "0.7.3"
embedded-hal = "1.0.0"
lsm303agr = "0.3.0"
microbit-v2 = "0.13.0"
panic-halt = "0.2.0"
Embed.toml (๋ณ๊ฒฝํ ํ์๊ฐ ์์):
[default.general]
chip = "nrf52833_xxAA"
[debug.gdb]
enabled = true
[debug.reset]
halt_afterwards = true
.cargo/config.toml (๋ณ๊ฒฝํ ํ์๊ฐ ์์):
[build]
target = "thumbv7em-none-eabihf" # Cortex-M4F
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
rustflags = ["-C", "link-arg=-Tlink.x"]
๋ค์์ ์ฌ์ฉํ์ฌ Linux์์ ์ง๋ ฌ ์ถ๋ ฅ์ ํ์ธํ์ธ์.
picocom --baud 115200 --imap lfcrlf /dev/ttyACM0
๋๋ ๋ค์๊ณผ ๊ฐ์ด Mac OS(๊ธฐ๊ธฐ ์ด๋ฆ์ ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์)์์ ํ์ธํ์ธ์.
picocom --baud 115200 --imap lfcrlf /dev/tty.usbmodem14502
Ctrl+A Ctrl+Q๋ฅผ ์ฌ์ฉํ์ฌ picocom์ ์ข ๋ฃํฉ๋๋ค.