9 个不稳定版本 (3 个重大更新)
0.3.0 | 2023年9月4日 |
---|---|
0.2.1 | 2023年2月23日 |
0.1.2 | 2022年1月26日 |
0.1.1 | 2021年12月6日 |
0.0.3 | 2019年12月26日 |
在 网络编程 中排名 1677
每月下载量 698
21KB
307 代码行
aws-iot-device-sdk-rust
aws-iot-device-sdk-rust 是一个用于Rust的AWS IoT设备SDK,允许开发者使用Rust编写代码来通过MQTT访问AWS IoT平台。这是我第一个Rust crate和项目,因为我还在学习,所以我希望随着时间的推移它会变得越来越好。我最近对这个crate进行了更新,因为我有一段时间没有更新它了。当前功能包括
- 连接
- 监听传入事件
- 订阅主题
- 发布到主题
使用方法
- 使用 AWSIoTAsyncClient 和事件广播 创建一个 AWSIoTAsyncClient,然后在监听传入事件(listen((eventloop, event_sender))的线程中启动。在这个线程中接收到的消息将被广播到所有接收器。要获取一个新的接收器,请调用 client.get_receiver()。请参阅示例文件夹中的同步和异步示例。示例
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let aws_settings = client::AWSIoTSettings::new(
"clientid".to_owned(),
"AmazonRootCA1.pem".to_owned(),
"cert.crt".to_owned(),
"key.pem".to_owned(),
"endpoint.amazonaws.com".to_owned(),
None
);
let (iot_core_client, eventloop_stuff) = client::AWSIoTAsyncClient::new(aws_settings).await?;
iot_core_client.subscribe("test".to_string(), QoS::AtMostOnce).await.unwrap();
iot_core_client.publish("topic".to_string(), QoS::AtMostOnce, "hey").await.unwrap();
let mut receiver1 = iot_core_client.get_receiver().await;
let mut receiver2 = iot_core_client.get_receiver().await;
let recv1_thread = tokio::spawn(async move {
loop {
match receiver1.recv().await {
Ok(event) => {
match event {
Packet::Publish(p) => println!("Received message {:?} on topic: {}", p.payload, p.topic),
_ => println!("Got event on receiver1: {:?}", event),
}
},
Err(_) => (),
}
}
});
let recv2_thread = tokio::spawn(async move {
loop {
match receiver2.recv().await {
Ok(event) => println!("Got event on receiver2: {:?}", event),
Err(_) => (),
}
}
});
let listen_thread = tokio::spawn(async move {
client::async_event_loop_listener(eventloop_stuff).await.unwrap();
});
tokio::join!(
recv1_thread,
recv2_thread,
listen_thread);
Ok(())
}
- 获取 Rumqttc 客户端和事件循环,并以自己的方式实现它 如果当前的实现无法适用于您的代码,您可以始终创建一个客户端并使用 get_client() 函数轻松连接到 IoT Core,然后自行实现其余部分。请参阅 rumqttc 文档,了解如何使用客户端和事件循环。
示例
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let aws_settings = client::AWSIoTSettings::new(
"clientid".to_owned(),
"AmazonRootCA1.pem".to_owned(),
"cert.crt".to_owned(),
"key.pem".to_owned(),
"endpoint.amazonaws.com".to_owned(),
None
);
let (iot_core_client, (eventloop, _)) = client::AWSIoTAsyncClient::new(aws_settings).await?;
let client = iot_core_client.get_client();
}
依赖项
~5–17MB
~175K SLoC