シリアル越しにbase64でくる画像データを表示するRustスクリプト
実際のところ
cargo.toml
[dependencies] base64 = "0.13" image = "0.23" serialport = "4.0"
logic.rs
use base64::decode; use image::load_from_memory; use serialport::prelude::*; use std::io::BufReader; use std::time::Duration; fn main() -> Result<(), Box<dyn std::error::Error>> { // シリアルポートの設定 let port_name = "/dev/ttyUSB0"; let baud_rate = 115200; let settings = SerialPortSettings { baud_rate, ..Default::default() }; // シリアルポートを開く let mut port = serialport::open_with_settings(port_name, &settings)?; // バッファを用意 let mut buffer: Vec<u8> = vec![0; 1024]; loop { // シリアルポートからデータを読み取る let n = port.read(&mut buffer)?; let base64_data = String::from_utf8_lossy(&buffer[..n]); // Base64デコード match decode(&base64_data) { Ok(decoded_data) => { // 画像として読み込む match load_from_memory(&decoded_data) { Ok(img) => { // 画像を表示 img.show().unwrap(); } Err(e) => eprintln!("Failed to load image: {}", e), } } Err(e) => eprintln!("Failed to decode Base64: {}", e), } // 少し待つ std::thread::sleep(Duration::from_secs(5)); } }