使用 Android Things 和 i.MX7D 从 DHT11 读取数据

Read data from DHT11 using Android Things and i.MX7D

几天以来,我一直在努力解决使用 Android Things 套件 (i.MX7D) 从传感器 (DHT11) 读取 temperature/humidity 数据的问题。我在谷歌上搜索了很多示例,所有示例都是使用 Arduino、Raspberry Pi 或 STM(因此 C/C++)制作的,但 none 用于 i.MX7D 和 Java。

我的问题是我无法读取 temperature/humidity 的真实值,因为我从传感器得到的只是一个指示 HIGH/LOW 状态的布尔值。我还没有为这个传感器找到任何可以以某种方式帮助将其转换为真实 degrees/percent 值的库。

您知道使用我拥有的硬件是否有可能获得这些真实值吗?如果是,能否请您给我一个提示或展示一些代码如何做到这一点,以便我最终取得一些进展?我将非常感谢所有的帮助。

这是我的一段代码:

import android.app.Activity;
import android.os.Bundle;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManager;

public class MainActivity extends Activity {
    private Gpio gpio;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        PeripheralManager manager = PeripheralManager.getInstance();
        try {
            gpio = manager.openGpio("GPIO2_IO05");
            configureInput(gpio);
            configureOutput(gpio);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private GpioCallback gpioCallback = new GpioCallback() {
        @Override
        public boolean onGpioEdge(Gpio gpio) {
            try {
                if (gpio.getValue()) {
                    System.out.println("high");
                } else {
                    System.out.println("low");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        }

        @Override
        public void onGpioError(Gpio gpio, int error) {
            System.out.println(gpio + ": Error event " + error);
        }
    };

    public void configureInput(Gpio gpio) throws IOException {
        gpio.setDirection(Gpio.DIRECTION_IN);
        gpio.setActiveType(Gpio.ACTIVE_HIGH);

        gpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
        gpio.registerGpioCallback(gpioCallback);
    }

    public void configureOutput(Gpio gpio) throws IOException {
        gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_HIGH);
        gpio.setActiveType(Gpio.ACTIVE_LOW);
        gpio.setValue(true);
    }
}

无法从 Android 事物中读取该传感器。它使用类似于 I2C 的单线协议,但 GPIO 端口能够读取它所需的速度对于 Android 东西来说太快了。

按照建议,您可以使用 Arduino 读取它,然后将 Arduino 连接为 I2C 从设备,或者您可以使用不同的温度和湿度传感器,例如通过 I2C 通信的 BME280,它仍然相当便宜