1use bevy::prelude::*;
2use bevy_serial::{SerialPlugin, SerialReadMessage, SerialWriteMessage};
3
4#[derive(Resource)]
6struct SerialWriteTimer(Timer);
7
8const SERIAL_PORT: &str = "/dev/ttyUSB0";
9
10fn main() {
11 App::new()
12 .add_plugins(MinimalPlugins)
13 .add_plugins(SerialPlugin::new(SERIAL_PORT, 115200))
15 .insert_resource(SerialWriteTimer(Timer::from_seconds(
17 1.0,
18 TimerMode::Repeating,
19 )))
20 .add_systems(Update, read_serial)
22 .add_systems(Update, write_serial)
23 .run();
24}
25
26fn read_serial(mut reader: MessageReader<SerialReadMessage>) {
28 for SerialReadMessage(label, buffer) in reader.read() {
30 let s = String::from_utf8(buffer.clone()).unwrap();
31 println!("Received packet from {label}: {s}");
32 }
33}
34
35fn write_serial(
37 mut writer: MessageWriter<SerialWriteMessage>,
38 mut timer: ResMut<SerialWriteTimer>,
39 time: Res<Time>,
40) {
41 if timer.0.tick(time.delta()).just_finished() {
43 let buffer = b"Hello, bevy!";
45 writer.write(SerialWriteMessage(SERIAL_PORT.to_string(), buffer.to_vec()));
46 }
47}