贺公子之数据科学与艺术 2024-03-06 10:09 采纳率: 0%
浏览 8

Rust写入数据库的程序

Rust和设备交互通讯,将设备的数据写入数据库里面

use serialport::{DataBits, Parity, StopBits, SerialPortSettings, Error};
use rusqlite::{params, Connection, Result};
use std::io::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 连接到数据库
    let conn = Connection::open("data.db")?;
    conn.execute(
        "CREATE TABLE IF NOT EXISTS device_data (
            id INTEGER PRIMARY KEY,
            data TEXT
        )",
        params![],
    )?;

    // 配置串口参数
    let mut settings = SerialPortSettings::default();
    settings.baud_rate = 9600;
    settings.data_bits = DataBits::Eight;
    settings.parity = Parity::None;
    settings.stop_bits = StopBits::One;

    // 打开串口
    let port = serialport::open("/dev/ttyUSB0")?;
    port.set_timeout(std::time::Duration::from_millis(1000))?;
    port.configure(&settings)?;

    // 读取设备数据并写入数据库
    let mut buffer: Vec<u8> = vec![0; 1024];
    loop {
        match port.read(buffer.as_mut_slice()) {
            Ok(t) => {
                if t > 0 {
                    let data = String::from_utf8_lossy(&buffer[..t]);
                    println!("Received data: {}", data);

                    // 将数据写入数据库
                    conn.execute(
                        "INSERT INTO device_data (data) VALUES (?1)",
                        params![data],
                    )?;
                }
            }
            Err(ref e) if e.kind() == ErrorKind::Timeout => (),
            Err(e) => eprintln!("{:?}", e),
        }
    }
}
  • 写回答

5条回答 默认 最新

  • 专家-百锦再 全栈领域优质创作者 2024-03-06 10:09
    关注

    use std::result::Result;
    use std::boxed::Box;

    use serialport::{DataBits, Parity, StopBits, SerialPortSettings, Error};
    use rusqlite::{Connection, params};
    use std::io::prelude::*;

    fn main() ->
    Result<
    (), Box<
    dyn std::error::Error>
    >
    {// Connect to the databaselet conn = Connection::open("
    data.db"
    )?;
    conn.execute("
    CREATE TABLE IF NOT EXISTS device_data (id INTEGER PRIMARY KEY,data TEXT)"
    , [])?;

    // Configure serial port parameterslet mut settings = SerialPortSettings::default();
    settings.baud_rate = 9600;
    settings.data_bits = DataBits::Eight;
    settings.parity = Parity::None;
    settings.stop_bits = StopBits::One;

    // Open the serial portlet mut port = serialport::open("
    /dev/ttyUSB0"
    )?;
    port.set_timeout(std::time::Duration::from_millis(1000))?;
    port.set_settings(&
    settings)?;

    let mut buffer = Vec::<
    u8>
    ::with_capacity(1024);
    loop {match port.read(buffer.as_mut_slice()) {Ok(t) if t >
    0 =>
    {let data = String::from_utf8_lossy(&
    buffer[..t]);
    println!("
    Received data: {}"
    , data);
    // Write data to the databaseconn.execute("
    INSERT INTO device_data (data) VALUES (?1)"
    , params![data])?;
    }Err(ref e) if e.kind() == ErrorKind::Timeout =>
    (),Err(e) =>
    eprintln!("
    {}"
    , e),}}}

    在此Rust代码示例中,通过串口与设备进行数据交互,并将接收到的设备数据写入到SQLite数据库中。首先连接到数据库,然后配置串口参数并打开串口。随后循环读取串口数据,将数据转换为字符串并打印出来,然后将数据插入到数据库中。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论

报告相同问题?

问题事件

  • 创建了问题 3月6日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么