c++ - DHT22和GPIO如何工作?

标签 c++ linux embedded sensors

我刚刚给自己买了一个温度和湿度传感器 DHT22,但我有一些疑问: - 该设备只能与 arduino 或 Rpi 一起使用吗? - 如果答案是否定的,那么它如何与 GPIO 配合使用?据我了解,gpio有2个选项:-Direcion(输入或输出)和值(0或1)。因此,据此,我检查了很多arduino和Rpi的示例,了解如何使用该设备,并且所有示例都连接到gpio的端口。那么这是如何运作的呢? c/c++ 有更大的能力来处理这些读数吗? - 如果传感器可以与更多设备一起使用,是否有任何Linux标准库/代码来处理该设备?

谢谢。

最佳答案

正如您所描述的,DHT22 是通过 GPIO 引脚工作的。这意味着任何具有 GPIO 的设备都可以使用它。

关于图书馆。有两个主要的库用于通过编写的 GPIO 进行通信,一个用于 C++,一个用于 Python。这意味着任何具有 GPIO 并且可以运行 Python 或 C++ 的设备都可以使用您的 DHT22。

没有基于 C++、Python、Java...的库怎么办?嗯,没有Linux 标准库用于通过 GPIO 进行通信。当然,如果您渴望学习和探索,您可以使用 Assembly 或 Bash 编写一个库,这将尽可能接近 LSL。通过这样做,您可以从 Linux shell 通过 GPIO 进行 native 通信,而无需任何其他编程语言。如果您对 Bash 感兴趣,请查看 this .

当 Linux 只能读取 0 和 1 时,它如何知道温度和湿度?考虑两件事:

  1. 计算机如何存储数字32?计算机只知道01,所以他需要将32转换为二进制。十进制的 32 = 2^6 是二进制的 100000
  2. 计算机如何读取温度和湿度?当你执行像

    这样的函数时
    get_temperature()
    

    它向DHT22请求温度,实际发生的是您的计算机向DHT22发送信号(它通过DHT22上的IN通过GPIO“写入”到DHT22,这与计算机上的OUT相同)。然后 DHT22 感测温度并“发送”回数据。 它如何发送它?它通过GPIO(计算机上的GPIO IN和DHT22上的GPIO OUT)创建一系列电荷。在我们的例子中,如果温度为 32,那么它会发送下一个序列:1-0-0-0-0-0。计算机读取该序列,当您尝试将其打印到屏幕上时,它会将其转换为十进制。

希望我说清楚了,这就是你想要的。

在此link如果您想要的话,您可以找到用于读取 DHT22 温度和湿度的 C 代码。请让我知道您一般想要做什么(通过库读取温度和嗡嗡声,编写用于通过 GPIO 通信的新库,用另一种语言为 DHT22 编写新库...)。

关于c++ - DHT22和GPIO如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036474/

相关文章:

c - linux 驱动程序间通信

linux - 如何在传出流量上设置 Evil Bit

c - 在32位系统(sint/uint)中的32位和64位之间进行操作

c - 如何知道应用程序的启动点

c - 嵌入式系统上的外部文件资源(C语言加FAT)

c++ - 如何使函数异步信号安全?

c++ - 代码在 g++ 4.4.1 上本地编译,但在 codepad.org (g++ 4.1.2) 上不编译? (引用引用问题)?)

linux - 'www-data' 不足配股

c++ - 流式传输 stringstream 是 libstdc++ 扩展吗?

c++ - 形式差异 T、T& 和 T&&