怎样使用树莓派读取传感器上的温度和湿度

电子说

1.3w人已加入

描述

步骤1:连接

树莓派

EzTemp使用串行端口在您的Raspberry Pi上进行通信。

确定Raspberry Pi上的串行引脚。然后将:

RPi GND连接到EzTemp GND。

RPi Tx到EzTemp Rx。

RPi Rx到EzTemp Tx。

RPi 3.3V至EzTemp 3.3V。

请注意,Tx引脚必须连接到Rx引脚,反之亦然。

现在您可以使用EzTemp!

[您可以在Tindie上获得EzTemp]

步骤2:禁用串行控制台

树莓派

树莓派

树莓派

默认情况下,Raspberry Pi使用串行端口作为外壳程序。正如MarcR在评论中所指出的(感谢提示),我们需要禁用串行控制台才能使用EzTemp。

方法1:raspi-config脚本

最简单的方法通过运行raspi-config脚本来禁用串行控制台。打开外壳并键入:

sudo raspi-config

它将显示一个菜单,只需转到 8 Advanced Options》 A7 Serial ,然后选择 否 。

现在重新启动Pi并转到下一步。

方法2:自动脚本

我们可以使用 rpi-serial-console 脚本禁用和启用串行控制台。要安装它,请打开外壳并键入:

sudo wget https://raw.githubusercontent.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console && sudo chmod +x /usr/bin/rpi-serial-console

要显示当前是否启用了串行控制台,只需运行:

rpi-serial-console status

To禁用串行控制台,只需运行:

sudo rpi-serial-console disable

要启用串行控制台,只需运行:

sudo rpi-serial-console enable

在启用或禁用串行控制台后,您可以

方法3:手动

然后用您喜欢的编辑器打开此文件:

sudo nano /boot/cmdline.txt

它的内容应该是这样的:

dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

删除对ttyAMA0的任何引用,得到这样的内容:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

保存更改,然后打开inittab:

sudo nano /etc/inittab

在文件末尾,注释掉以下行:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

重新启动Pi并转到下一步。

[您可以在Tindie上获得EzTemp]

步骤3:下载示例脚本

树莓派

在Raspberry Pi上,您必须下载此脚本。您可以打开外壳并输入以下内容:

wget https://raw.githubusercontent.com/CAIMANICS/EzTempRH-for-Raspberry-Pi/master/software/EzTempRH.py

现在运行脚本输入:

python EzTempRH.py

就是这样!您正在运行EzTemp。

EzTemp&RH build 2

Temperature: 24.0C

Humidity: 48.0%

External: 1018 / 2048 counts

Version: 2

让我们看看如何在程序中使用它。

[您可以在Tindie上获得EzTemp]

第4步:修补程序

树莓派

在这里,我们将分析脚本的各个部分,以便您可以理解它,并针对项目进行修改

首先,我们需要打开串行端口。该脚本使用PySerial模块执行此操作。

import serial

ser = serial.Serial(‘/dev/ttyAMA0’, 9600, timeout=1)

现在,让我们在传感器中查询构建值。这是一个静态值,用于标识EzTemp的版本。

首先,我们需要向EzTemp发送命令‘v’:

ser.write(“v”)

构建值是2字节的值,因此我们应该期望EzTemp提供4字节(1字节回声+ 2字节构建+ 1字节校验和)的响应。现在,读取响应:

s = ser.read(4)

尽管构建标识符是2字节的值,但数据是以单独的字节接收的。要“重构”它,我们必须将最高有效字节向左移8位,然后添加最低有效字节。这样,我们可以正确地恢复2字节的字段:

version = (ord(s[1]) 《《 8) + ord(s[2])

每次从EzTemp收到2字节的值时,都可以使用上面的句子。

最后一行此块的代码只是在屏幕上打印结果:

print ‘EzTemp&RH build ’ + str(version)

脚本的其余部分从EzTemp中查询传感器值相同。让我们以温度值为例:

ser.write(“d”)

s = ser.read(4)

temperature = (ord(s[1]) 《《 8) + ord(s[2])

print‘Temperature:’+ str(1.0 * temperature/10)+‘C’

在这种情况下,我们使用命令“ d”以摄氏0.1度的精度查询温度。如您所见,响应的捕获非常相似。区别在于如何处理返回的值。

当我们以0.1精度查询温度或任何其他参数时,数据将以2个字节的整数形式接收,占该值的十分之一。也就是说,如果温度为21.5ºC,则EzTemp会收到值215,并且用户脚本必须除以10才能获得实际温度。

如果不需要,所有值都具有整数精度命令。小数点。使用这些命令简化了读取和处理返回数据的过程。检查数据表中完整的命令列表。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分