#iot #azure #devices #hub #client #sdk #key

azure_iot_sdk

连接设备到 Azure IoT Hub 的客户端库

8 个版本 (破坏性更新)

0.8.0 2021 年 5 月 11 日
0.7.1 2021 年 1 月 23 日
0.6.0 2020 年 11 月 22 日
0.5.0 2020 年 10 月 18 日
0.1.0 2020 年 4 月 18 日

#24 in #hub

MIT 许可证

67KB
1.5K SLoC

Azure IoT SDK for Rust

用于通过 MQTT 协议与 Azure IoT Hub 交互的自研库

CI docs Crate cratedown cratelastdown

运行示例

复制示例配置文件

cp examples/config.sample.toml examples/config.toml

在 examples/config.toml 中编辑您的 IoT Hub 主机、设备和主密钥的值

使用方法

#[macro_use]
extern crate log;

use azure_iot_sdk::{client::IoTHubClient, message::Message};

use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct DeviceConfig {
    hostname: String,
    device_id: String,
    shared_access_key: String,
}

impl DeviceConfig {
    fn from_env() -> Result<Self, config::ConfigError> {
        let mut cfg = config::Config::default();
        cfg.merge(config::File::with_name("examples/config"))?;
        cfg.try_into()
    }
}

#[tokio::main]
async fn main() {
    env_logger::from_env(env_logger::Env::default().default_filter_or("info")).init();

    let DeviceConfig {
        hostname,
        device_id,
        shared_access_key,
    } = DeviceConfig::from_env().unwrap();

    let token_source = DeviceKeyTokenSource::new(
        &hostname,
        &device_id,
        &shared_access_key,
    )
    .unwrap();

    let mut client = IoTHubClient::new(&hostname, device_id, token_source).await?;

    info!("Initialized client");

    let mut recv = client.get_receiver().await;
    let receive_loop = async {
        while let Some(msg) = recv.recv().await {
            match msg {
                MessageType::C2DMessage(msg) => info!("Received message {:?}", msg),
                _ => {}
            }
        }
    };

    let msg = Message::new(b"Hello, world!".to_vec());
    let sender = client.send_message(msg);

    tokio::join!(receive_loop, sender);
}

依赖项

~7–20MB
~277K SLoC