Crates.io | aws-iot-device-sdk-rust |
lib.rs | aws-iot-device-sdk-rust |
version | 0.4.1 |
source | src |
created_at | 2019-12-25 13:34:00.369962 |
updated_at | 2024-09-18 11:50:49.561302 |
description | An easy to use SDK for connecting to AWS IoT Core. |
homepage | |
repository | https://github.com/arnstein/aws-iot-device-sdk-rust |
max_upload_size | |
id | 192325 |
size | 44,019 |
The AWS IoT Device SDK for Rust allows developers to write Rust to use their devices to access the AWS IoT platform through MQTT. This is my first crate, and project, in Rust, and as I am still learning it will hopefully get a lot better with time. I have recently done a revamp of this crate, as I hadn't had time to update it in a while. Current functionality is:
connect
listen to incoming events
subscribe to topic
publish to topic
#[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(())
}
Example:
#[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();
}