1

我正在构建我的第一个项目,该项目与云和树莓派 GPIO 引脚(或传感器)相关,但我有点卡住了,希望有人可以通过指出正确的方向来帮助我。

我有带有Sensirion SCD30传感器的 Raspberry Pi 4,按照本指南,我成功地在“/run/sensors/scd30/last”中检索了传感器测量数据,该数据不断更新。

我的目标是将测量数据发送到一些免费的云服务,我正在考虑 Azure IoT Central 或 IoT HUB,因为两者都有免费选项。

我的问题是,如何获取这个文件“/run/sensors/scd30/last”并以 5 或 10 秒的间隔将其转发到 Azure,然后我可以在其中制作所有必要的仪表板和触发器?

4

1 回答 1

1

您需要实现使用Azure IoT 中心设备 SDK的应用程序,该应用程序可以将数据发送到 IoT 中心。

您必须每 4-10 秒从文件中读取数据,并使用上述 SDK 中的 DeviceClient 将信息发送到 IoT 中心。

下面是一个 C# 代码片段,它从 DHt11 温度/湿度传感器中提取数据,并每 2 秒将数据发送到 IoT 中心。

                        ...
                        var deviceClient = DeviceClient.CreateFromConnectionString("ConnectionString");                        

                        var dht = new DHT(pin, gpioController, DHTSensorTypes.DHT11);
                        while (true)
                        {
                            try
                            {
                                var measurement = new Measurement();
                                var dhtData = dht.ReadData();

                                 measurement.Temperature = (int)dhtData.TempCelcius;
                                 measurement.Humidity = (int)dhtData.Humidity;

                                 if (gpioController.IsPinOpen(pin))
                                 {
                                     gpioController.ClosePin(pin);
                                 }
                                }

                                SendMeasurementAsync(deviceClient, measurement).Wait();

                                Console.WriteLine(DateTime.UtcNow);
                                Console.WriteLine(" sent to iot hub temp: " + measurement.Temperature);
                                Console.WriteLine(" sent to iot hub hum: " + measurement.Humidity);
                            }
                            catch (DHTException)
                            {
                                Console.WriteLine(" problem reading sensor data ");
                            }
                            Task.Delay(2000).Wait();
                        }
                        .
                        .
                        .


    private static Task SendMeasurementAsync(DeviceClient deviceClient, Measurement measurement)
    {
        var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(measurement);
        var eventMessage = new Message(Encoding.UTF8.GetBytes(jsonString));

        return deviceClient.SendEventAsync(eventMessage);
    }

关于免费层,您可以在每个订阅中拥有一个具有免费层的 IoT 中心,其中包含所有功能。

于 2019-10-13T18:06:16.567 回答