#aws-iot #iot-devices #sdk #mqtt #connect #events #publish

aws-iot-device-sdk-rust

连接到 AWS IoT Core 的易用 SDK

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

Download history 3/week @ 2024-03-13 8/week @ 2024-03-20 23/week @ 2024-03-27 9/week @ 2024-04-03 1/week @ 2024-04-24 16/week @ 2024-05-08 29/week @ 2024-05-15 125/week @ 2024-05-22 278/week @ 2024-05-29 153/week @ 2024-06-05 118/week @ 2024-06-12 106/week @ 2024-06-19 247/week @ 2024-06-26

每月下载量 698

MIT 许可

21KB
307 代码行

Documentation crates.io

aws-iot-device-sdk-rust

aws-iot-device-sdk-rust 是一个用于Rust的AWS IoT设备SDK,允许开发者使用Rust编写代码来通过MQTT访问AWS IoT平台。这是我第一个Rust crate和项目,因为我还在学习,所以我希望随着时间的推移它会变得越来越好。我最近对这个crate进行了更新,因为我有一段时间没有更新它了。当前功能包括

  • 连接
  • 监听传入事件
  • 订阅主题
  • 发布到主题

使用方法

  1. 使用 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(())
}
  1. 获取 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