Primal Display:树莓派 LCD 温度监测仪
本指南展示如何将 16x2 HD44780 兼容 LCD 连接到树莓派 3,显示来自 DHT11 传感器的实时温湿度读数。涵盖硬件选型、接线(4 位与 8 位模式)、所需库及完整 Python 脚本。
故事
引言
LCD 显示屏是任何树莓派项目的多功能扩展。通过将 HD44780 兼容屏幕直接接线到 GPIO 引脚,无需 I2C 或 SPI 适配器即可展示传感器数据或自定义消息。
硬件
- HD44780 兼容 16x2 LCD (成本 <$10)
- 树莓派 3 (或更新型号)
- DHT11 温湿度传感器
- 装有 Raspbian OS 的 Micro-SD 卡
- 1–2 个 10 kΩ 电位器 (对比度/亮度)
- 面包板、跳线、5V 电源
我们将使用 6 个 GPIO 引脚驱动 LCD,这种直接方式释放串口且无需 I2C 驱动。
接线
提供两种接线模式:
- 4 位模式 — 使用 4 根数据线,一个电位器调对比度。
- 8 位模式 — 使用 8 根数据线,两个电位器分别调对比度和亮度。
4 位模式下 8 位命令字节拆分为两个 4 位半字节发送,数据总线宽度减半。实际中 LCD 内部处理时间掩盖了 8 位模式的速度优势,按可用引脚数选择即可。
LCD 引脚连接 (4 位模式)
- Pin 1 (GND) — 地
- Pin 2 (+5V) — 电源
- Pin 3 (Vo) — 电位器中间脚 (对比度)
- Pin 4 (RS) — GPIO 37
- Pin 5 (RW) — 地 (仅写入)
- Pin 6 (EN) — GPIO 35
- Pin 7–10 — 悬空
- Pin 11 (D4) — GPIO 33
- Pin 12 (D5) — GPIO 31
- Pin 13 (D6) — GPIO 29
- Pin 14 (D7) — GPIO 23
- Pin 15 (LED+) — +5V
- Pin 16 (LED−) — 地
LCD 引脚连接 (8 位模式)
- Pin 1 — 地
- Pin 2 — +5V
- Pin 3 — 电位器中间脚 (对比度)
- Pin 4 — GPIO 37 (RS)
- Pin 5 — 地 (RW)
- Pin 6 — GPIO 35 (EN)
- Pin 7 (D0) — GPIO 40
- Pin 8 (D1) — GPIO 38
- Pin 9 (D2) — GPIO 36
- Pin 10 (D3) — GPIO 32
- Pin 11 (D4) — GPIO 33
- Pin 12 (D5) — GPIO 31
- Pin 13 (D6) — GPIO 29
- Pin 14 (D7) — GPIO 23
- Pin 15 — +5V
- Pin 16 — 地
DHT11 传感器接线
DHT11 使用三脚:VCC、Data、GND。VCC 接 3.3V (Pin 1);读数不稳定时可改接 5V (Pin 2)。Data 脚接 GPIO 18 (物理 Pin 12)。建议在 VCC 与 Data 间接 4.7 kΩ 上拉电阻。
所需库
确保系统有构建工具和 Python 头文件:
sudo apt-get update
sudo apt-get install build-essential python-dev
安装 RPLCD 控制 LCD:
sudo apt-get install python-pip
sudo pip install RPLCD
从 GitHub 安装 Adafruit DHT11 库:
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
Python 脚本 (8 位模式)
用编辑器 (如 nano) 创建 temperature.py:
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import Adafruit_DHT
from RPLCD import CharLCD
GPIO.cleanup()
# LCD 配置 — 8 位模式
lcd = CharLCD(
numbering_mode=GPIO.BOARD,
cols=16, rows=2,
pin_rs=37, pin_e=35,
pins_data=[40, 38, 36, 32, 33, 31, 29, 23]
)
while True:
humidity, temperature = Adafruit_DHT.read_retry(11, 18)
if humidity is None or temperature is None:
print('Failed to retrieve data from sensor')
continue
print(f'Temp: {temperature:.1f} C Humidity: {humidity:.1f} %')
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string(f'Temp: {int(temperature)} C')
lcd.cursor_pos = (1, 0)
lcd.write_string(f'Humidity: {int(humidity)} %')
time.sleep(5)
赋予执行权限并运行:
chmod +x temperature.py
./temperature.py
4 位模式替代方案
将 pins_data 列表改为四个 GPIO 引脚 (如 [33, 31, 29, 23]) 并相应调整 LCD 初始化。
总结
按这些步骤操作,你将获得一个功能完整的 LCD 显示实时温湿度的装置,适合气象站、物联网仪表盘或教学项目。
阅读更多详情
深入了解 LCD 驱动和高级配置,请探索 Adafruit DHT 仓库 和 RPLCD 文档。
制造工艺
- 擀面杖:从伊特鲁里亚起源到现代工艺的演变
- 现代保龄球瓶的演变与工艺
- 液晶显示器(LCD):技术、制造与未来展望
- Drone Pi:双模Multiwii+树莓派四轴飞行器,支持手机与遥控器控制
- DIY Arduino LCD 游戏机:16x2 字符屏打造“躲避防守队员”足球小游戏
- 用桌面级 3D 打印机设计定制 iPad 展示支架
- 从模拟到 LCD:航天飞机玻璃驾驶舱的演进
- 74LS74 双 D 触发器:引脚、时序、特性与应用全参考
- 阿特拉斯·科普柯携NGP+制氮机亮相2017 WIN Expo酒业展
- 阿特拉斯·科普柯NPE2018塑料展亮相:GA VSD+、GHS VSD+、DZS 150V、GVS 60A全矩阵赋能塑料制造
- 理解便携盲文显示器:关键洞察与创新
- 掌握Linux设备驱动Pin Control子系统