5 个版本
0.1.4 | 2023 年 10 月 1 日 |
---|---|
0.1.3 | 2023 年 7 月 23 日 |
0.1.2 | 2023 年 7 月 15 日 |
0.1.1 | 2023 年 7 月 15 日 |
0.1.0 | 2023 年 7 月 13 日 |
#893 在 硬件支持
29 每月下载次数
36KB
647 行
Rust 库,通过 UART 向 3D 打印机发送 Gcode
基于流的 GCode 发送器。API 仍在开发中,可能有所变化。
快速入门代码
use gcode_serial::gcode_serial::GcodeSerial;
use gcode_serial::models::action::{Action, Command, PrinterStatus, TelemetryData};
use gcode_serial::models::serial_connector::SerialConnector;
use tokio::sync::broadcast;
use tokio::runtime::Runtime;
fn main() {
// initialize Tokio runtime
let t = Runtime::new().unwrap();
let filename = "test.gcode";
t.block_on(async move {
let (tx, _) = broadcast::channel(32);
let t = tx.clone();
tokio::spawn(async move {
// create printer object
let mut gs = GcodeSerial::new(t);
// start printer service
gs.start(SerialConnector::Auto).await;
});
// send print start command
tx.send(Action::Command(Command::StartPrint(filename)));
let mut rx = tx.subscribe();
// monitor for receiving actions
loop {
if let Ok(v) = rx.recv().await {
match v {
Action::Telemetry(t) => {
match t {
TelemetryData::Temps(v) => {
println!("Extruder temp: {}; Bed temp: {}", v.ex_temp, v.bed_temp);
}
TelemetryData::Progress(x) => {
println!("Number of commands left in que: {}", x);
}
TelemetryData::TargetExtruderTemp(t) => {
println!("Target Extruder Temp change: {}", t);
}
TelemetryData::TargetBedTemp(t) => {
println!("Target Extruder Temp change: {}", t);
}
TelemetryData::TotalCommandCount(n) => {
println!("Number of total commands to send: {}", n);
}
TelemetryData::ActiveFile(f) => {
println!("Current file changed: {}", f.unwrap().name);
}
_ => {}
}
}
Action::StateChange(_) => {}
Action::PrinterAction(_) => {}
Action::Command(_) => {}
}
}
}
})
}
用法
GcodeSerial 对象
首先,您需要为每个要连接的打印机创建一个 GcodeSerial
实例 let mut gs = GcodeSerial::new(t)
,其中 t 是与库通信所需的广播通道。
之后,您可以使用 gs.start(SerialConnector::Auto).await;
连接到打印机。您可能希望在一个单独的(软)线程中调用此操作,因为此调用是阻塞的。
SerialConnector
您可以选择使用 SerialConnector::Auto
自动查找串行端口,或者使用 SerialConnector::Manual("/dev/ttyUSB0", 115_200)
手动查找。
从/向打印机接收/发送数据
连接到广播流并使用 Enum 接收所需的数据。请参见上面的示例。
Enum 字段 | 功能 | 示例 | 触发 |
---|---|---|---|
Action::Telemetry(t) | 接收遥测数据 | 温度、进度、目标温度、风扇速度 | 值更改 |
Action::StateChange(t) | 打印机状态改变 | 断开连接、活动、空闲、出错 | 值更改 |
Action::PrinterAction(t) | 打印机发送动作命令 | 取消/暂停/恢复打印 | 打印机 |
Action::Command(t) | 向库发送动作 | 开始/取消打印、设置温度 | 库用户 |
许可证
MIT 许可证
版权所有 © 2023 Lukas Heiligenbrunner
特此授予任何人免费获得本软件及其相关文档文件(“软件”)的副本的权利,无需限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供此类权利的人这样做,但受以下条件限制:
上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。
软件按“原样”提供,不提供任何形式(明示或暗示)的保证,包括但不限于适销性、适用于特定目的和不侵犯版权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,并源于、因之或与软件或软件的使用或其他方式有关。
依赖关系
~7-10MB
~188K SLoC