最近用 Rust 寫了一個 serial port tool 給自己用,GUI 的部分使用 gtk-rs, serial port 通訊的部分使用 tokio-serial (serialport-rs 的 tokio 運行時版本),USB hotplug 的部分使用 rusb (libusb 的 Rust 包裝)。
不過,因為 libusb 不支持 Windows 上的 hotplug,所以在 Windows 上執行時,我使用一個 loop 每隔一秒列舉一次 USB 裝置,來判斷是否有 USB 裝置插入或拔出。
Serial Port Tool 的原始碼:https://github.com/riddleling/serial-tool
然後可以用 Arduino 寫一個 serial echo 程式來測試,把寫入 serial port 的字元回傳回來:
// Arduino serial echo
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available() > 0) {
Serial.print((char)Serial.read());
}
}
在 Linux (Raspberry Pi OS) 上執行 serial port tool 的畫面:
在 Windows 上執行的 demo 影片 (透過 serial port 傳輸指令,打開或關閉 LED):