将Python脚本(DHT22 CircuitPython)与(RPLCD)相结合,用于RPi上1602 LCD上的温度读数

2024-06-01 22:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

前言:我是Pi/Python的noob

在与这个DHT22传感器进行了大量的斗争之后,我终于能够使用Adafruit CircuitPython库,如图here。我使用了他们页面(和下面)上显示的脚本,得到了温度。从那以后,我转到了LCD,在许多教程中,我决定使用Python选项使用“输出到LCD”(也在下面)。它们都可以工作,但现在我正在努力弄清楚如何正确地组合这两个脚本。这是我根据CircuitBasics网站上的一些示例提出的,我已经克服了许多语法错误来纠正它们,只是没有将它们正确地结合起来。我想让16x2在进行标准的2秒睡眠时,在第1行显示F中的温度,在第2行显示湿度,同时忽略错误(因为我得到了很多错误)。下面是我的最新尝试,其中添加了@Frank的建议和一些修改:

#!/usr/bin/python
import time
import board
import adafruit_dht

from RPLCD import CharLCD
from RPi import GPIO

dhtDevice = adafruit_dht.DHT22(board.D4)
lcd - CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows =2, pin_rs=37, pin_e=35, pins_data=[33,31,29,40]

while True:
    try:
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity

        lcd.cursor_pos = (0, 0)
        lcd.write_string("Temp: {:.1f} F ".format(temperature_f, temperature_c))
        lcd.cursor_pos = (1, 0)
        lcd.write_string("Humidity: {}% ".format(humidity))
    except:
        pass

所以最终我不知道如何正确地连接这两个脚本,或者我只是将它们作为单独的脚本,并用另一个脚本调用它们。正如我所说的,我对Python和一般的编码都是相当陌生的,希望社区能给予我一些帮助

提前谢谢

编辑:为了简化每个人的生活(以及我首先应该做的事情),这里是我试图将两者结合在一起的两个例子

dht脚本

import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D4)

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(
            "Temp: {:.1f} F / Humidity: {}% ".format(
                temperature_f, temperature_c, humidity
            )
        )

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])

    time.sleep(2.0)

和当前的lcd脚本

from RPLCD import CharLCD
from RPi import GPIO
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33,31,29,40])
lcd.cursor_pos = (0, 0)
lcd.write_string(u'This is')
lcd.cursor_pos = (1, 0)
lcd.write_string(u'a test')


Tags: fromposimportboardadafruit脚本gpiolcd
2条回答

最终,我已经能够使用用于DHT传感器和控制16x2 LCD的CircuitPython库来实现这一点。如果其他任何人需要完成此任务,请随意使用此代码,只需更改lcd/dht的数据管脚即可

import time
import board
import adafruit_dht
import adafruit_character_lcd.character_lcd as characterlcd
import digitalio

dhtDevice = adafruit_dht.DHT22(board.D4)

# Modify this if you have a different sized character LCD
lcd_columns = 16
lcd_rows = 2

# Raspberry Pi Pin Config:
lcd_rs = digitalio.DigitalInOut(board.D26)
lcd_en = digitalio.DigitalInOut(board.D19)
lcd_d7 = digitalio.DigitalInOut(board.D21)
lcd_d6 = digitalio.DigitalInOut(board.D5)
lcd_d5 = digitalio.DigitalInOut(board.D6)
lcd_d4 = digitalio.DigitalInOut(board.D13)
lcd_backlight = digitalio.DigitalInOut(board.D4)

# Initialise the lcd class
lcd = characterlcd.Character_LCD_Mono(
lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, 
lcd_backlight
)

while True:
    try:
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        lcd.message = ("Temp: {:.1f} F \nHumidity: {}% ".format(
                           temperature_f, temperature_c, humidity
                       )
                   )

    except:
       pass

    time.sleep(2.0)

看起来您的代码缩进不正确。删除while循环前面的空格,并对while循环中的块执行相同操作,但保留一个缩进

在python中,缩进很重要

第二个问题是,try没有exceptHow to properly ignore exceptions

#!/usr/bin/python
import time
import board
import adafruit_dht

from RPLCD import CharLCD
from RPi import GPIO

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT22(board.D4)
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 40])

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        lcd.cursor_pos = (0, 0)
        lcd.write_string(temperature_f)
        lcd.cursor_pos = (1, 0)
        lcd.write_string(humidity)

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])

    time.sleep(2.0)

相关问题 更多 >