2个版本
0.10.5 | 2023年11月23日 |
---|---|
0.10.2 | 2023年11月18日 |
0.9.0 |
|
0.8.1 |
|
#212 in 多媒体
56KB
1K SLoC
gopro-controller
使用BLE和(可能最终)WiFi与GoPro相机交互的开源Rust库
动机
GoPro是很好的小设备,但与它们交互的唯一好方法是使用它们的移动应用,这不可扩展。这个crate希望提供一个起点,以无线方式编程控制相机,并最终使用像Raspberry Pi和其他SBC、微控制器等更DIY友好的计算机从它们下载媒体。
GoPro规范
https://gopro.github.io/OpenGoPro/
支持的相机
- GoPro Hero 11 Black
我没有其他型号用于测试,因此目前我只能验证Hero 11 Black。所有相机的命令结构看起来都一样,因此它应该与任何支持OpenGoPro规范的相机一起工作,但是相机的设置各不相同,因此我无法保证任何特定的设置与不同型号一起工作。
特性 -- 进行中
- 连接 *(查看配对说明)
- 命令
- 快门开始
- 快门停止
- 关机
- 添加高亮
- 更改模式
- 设置
- 分辨率
- 帧率
- 自动关机
- 视频数字镜头
- 照片数字镜头
- 时间间隔数字镜头
- 媒体格式
- 防闪烁
- 超级平滑
- 水平校正
- 最大镜头
- 回望
- 控制
- 速度
- 夜景照片
- 无线频段
- 轨迹长度
- 视频模式
- 查询相机状态和设置
- 以人类友好的方式解释相机状态
- 从相机下载媒体
- 实时预览
- WiFi支持
- 更多相机型号
- 支持Protobuf
注意事项
BLE
在冷启动时,蓝牙低功耗(BLE)也显得有点不稳定。要让配对工作(或者在GoPro在10小时不活动后完全进入睡眠状态后重新连接)可能需要多次关闭和打开相机,或者拔出并重新插入电池。
配对
目前,库无法第一次配对相机。您必须通过将相机置于配对模式(首选项 -> 无线连接 -> 连接设备 -> GoPro Quik应用程序)并在系统蓝牙设置中进行连接,与您的系统配对相机。一旦相机配对,您就可以在不进入配对模式下从这个库中连接到它。
自动唤醒
关闭后,相机将继续发送广告数据包长达10小时。在这段时间内,重新连接到它将导致其唤醒并继续在预设的位置空闲。
支持的平台
这个库目前仅在Linux上进行了测试,尽管它并不打算是特定平台的。
基本用法
use gopro_controller::{connect, init, scan, GoProCommand};
use std::time::Duration;
use tokio::time;
let mut central = init(None).await.unwrap();
let mut devices = scan(&mut central).await.unwrap();
devices.retain(|d| d.contains("GoPro"));
assert!(devices.len() > 0, "No GoPro devices found");
let gopro = connect(devices.first().unwrap().clone(), &mut central)
.await
.unwrap();
println!("Connected to GoPro");
time::sleep(Duration::from_secs(4)).await;
println!("Starting Shutter");
gopro
.send_command(GoProCommand::ShutterStart)
.await
.unwrap();
//Record for 3 Seconds
time::sleep(Duration::from_secs(3)).await;
println!("Stopping Shutter");
gopro.send_command(GoProCommand::ShutterStop).await.unwrap();
time::sleep(Duration::from_secs(2)).await;
println!("Powering Off");
gopro.disconnect_and_poweroff().await.unwrap();
依赖关系
~5–34MB
~509K SLoC