简单案例可以直接实现如下:

Arduino DHT22温湿度采集实验报告
(Word格式,A4纸张,2页以内)
一、实验目的
- 掌握Arduino MEGA主控板的基础使用。
- 理解DHT22数字温湿度传感器的工作原理。
- 学会DHT传感器库的调用,完成温度、湿度数据读取。
- 在串口监视器输出采集到的温湿度数据,熟悉Wokwi仿真平台。
二、实验器材
- Arduino MEGA开发板 1块
- DHT22(AM2302)温湿度传感器 1个
- 杜邦线若干
- Wokwi在线仿真平台
三、实验原理
DHT22是数字式温湿度复合传感器,采用单总线通信协议,只需要一根IO口完成数据收发。传感器内部集成测温测湿元件,经过内部模数转换,输出数字信号给单片机。
- VCC:供电,接5V
- GND:电源地
- DATA:数据信号线,接单片机数字IO口
本仿真接线:
- DHT22 VCC → Arduino 5V
- DHT22 GND → Arduino GND
- DHT22 DATA → Arduino 数字引脚2
四、实验电路(仿真图)
接线说明:红色电源线接5V,黑色接GND,绿色信号线接数字2号引脚。
五、实验代码
cpp
#include "DHT.h"
#define DHTPIN 2 //数据引脚为2
#define DHTTYPE DHT22 //选用DHT22传感器
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float hum = dht.readHumidity(); //读取湿度
float temp = dht.readTemperature();//读取温度
if(isnan(hum) || isnan(temp)){
Serial.println("读取DHT22失败!");
delay(2000);
return;
}
Serial.print("湿度:");
Serial.print(hum);
Serial.print(" %RH\t");
Serial.print("温度:");
Serial.print(temp);
Serial.println(" ℃");
delay(2000); //DHT22最小采样间隔2秒
}
六、实验步骤
- 打开Wokwi仿真网站,新建Arduino MEGA项目。
- 添加DHT22传感器元件,按照电路图完成接线。
- 将代码粘贴到编辑器,导入DHT传感器库。
- 点击运行仿真,打开串口监视器,波特率设置9600。
- 观察串口输出的温度、湿度数值,记录实验现象。
七、实验现象与结果
仿真运行后,串口监视器每隔2秒打印一组数据:
湿度:45.20 %RH 温度:24.50 ℃
可以实时输出环境相对湿度与摄氏温度;若接线错误或库配置错误,串口会打印"读取DHT22失败!"。
八、实验分析与思考
- DHT22必须间隔≥2秒读取一次,频繁读取会造成数据读取错误。
- 通信失败常见原因:引脚接错、库版本不对、供电异常。
- DHT22相比DHT11精度更高,温度范围更大。
九、实验总结
本次实验完成DHT22温湿度传感器与Arduino MEGA的硬件接线与软件编程,成功读取环境温湿度,掌握单总线传感器的使用方法,熟悉Wokwi仿真调试流程。
复杂案例通常需要多次交流才能得到合适解答:

图中32×32 RGB LED矩阵点亮完整方案(Wokwi仿真,Arduino Mega2560)
这是Wokwi仿真环境里标准HUB75接口32×32 RGB大屏(不是MAX7219单色矩阵),采用**逐行扫描(动态扫描)**驱动方案,由Arduino Mega2560直接驱动RGB面板。
仿真链接:
[https://wokwi.com/projects/446149466101088257](https://wokwi.com/projects/446149466101088257),文件名mega7219matrixtur
1. 硬件组成
- 主控:Arduino Mega2560(ATmega2560,IO引脚多,适合驱动HUB75)
- 显示屏:32×32 RGB LED点阵屏(HUB75接口,1/16扫描方式)
- 连接线:多组杜邦线,分为RGB数据信号线、行地址线、时钟CLK、锁存LAT、输出使能OE、电源GND
2. HUB75驱动原理(核心点亮逻辑)
HUB75 32×32屏采用动态扫描 :屏幕分为上下两半(上16行、下16行),一次点亮2行,快速轮流刷新,利用人眼视觉暂留形成完整图像。
引脚功能:
- R0,G0,B0:屏幕**上半区(行0~15)**红、绿、蓝色彩数据
- R1,G1,B1:屏幕**下半区(行16~31)**红、绿、蓝色彩数据
- A,B,C,D:4根行地址线,用来选择当前点亮的两行(4位地址可以选出0~15共16组行)
- CLK(时钟):移位时钟,每来一个时钟脉冲,RGB数据移入面板内部移位寄存器
- LAT(锁存):数据全部移入后,锁存脉冲把数据锁存到输出寄存器
- OE(输出使能):控制LED点亮/熄灭,用来做PWM调光,消隐鬼影
- VCC、GND:5V电源和公共地
3. 接线方案(图中的连线)
Arduino Mega引脚 ↔ HUB75屏:
- R0、G0、B0,R1、G1、B1 → Mega一组数字IO,传输像素色彩
- A,B,C,D → Mega数字IO,行选通地址
- CLK → 移位时钟
- LAT → 锁存信号
- OE → 显示使能
- GND:Mega GND与屏幕GND相连(共地是信号稳定的必要条件)
实物使用注意:HUB75屏幕工作电流很大,Arduino的5V引脚供电不足,实物必须单独5V大电流电源给LED屏供电,仿真无此限制。
4. 软件方案
方式1:Adafruit RGBMatrix库(最常用,推荐)
使用Adafruit_RGBmatrixPanel库,专门驱动HUB75 RGB矩阵。
程序逻辑:
setup():初始化RGB面板对象,定义全部引脚- 建立帧缓存buffer,在内存中绘制画面(画圆、色块、文字)
loop():- 在帧缓存里绘制图形(图中就是彩色圆环图案)
- 调用库函数,自动完成逐行扫描输出:移位RGB数据→锁存→选行→OE打开点亮该行
- 循环刷新整屏,肉眼看到稳定彩色图像
方式2:裸机Bit-bang(软件模拟SPI移位)
不使用现成库,手动写digitalWrite模拟CLK、LAT、OE时序,手动移位每一位RGB色彩数据,逐行输出,图里这个仿真项目原始代码就是软件位爆破(bit-banged)驱动。
5. 点亮工作流程(单帧画面)
- 选择行:设置A/B/C/D地址,选中要刷新的两行
- 移位送RGB像素:逐个像素把R0G0B0/R1G1B1共6路色彩bit,在CLK脉冲下移入屏幕内部移位寄存器
- 锁存 LAT:全部32列像素移入完成,触发LAT脉冲,保存这一行的色彩数据
- 打开OE,点亮当前选中两行LED,维持极短时间
- 关闭OE,消隐,切换下一组行地址,重复步骤2~4
- 16组行全部扫描一遍,完成一整屏画面;快速循环刷新(几十Hz),视觉上就是稳定彩色图片。
6. 图中画面效果
截图里屏幕是4色环形图案(红、绿、蓝、黄),代码预先在帧缓存中设置对应坐标点的RGB颜色,驱动库自动扫描刷新,把图案渲染在32×32点阵上。
7. 仿真 vs 实物的差别
- ✅ Wokwi仿真:不需要考虑大电流、电源压降,直接Mega IO驱动即可
- ⚠️ 实物硬件:
- RGB屏电流巨大,不能用Arduino主板5V供电,需要外接5V 2A+电源
- 建议增加电平转换芯片(74HC245),增强驱动能力,保护Arduino IO口
- 长排线会有信号干扰,需要降低刷新频率
✅ Wokwi 32×32 HUB75 RGB矩阵 Arduino Mega2560 完整代码
适配你截图这个项目,画面就是彩色同心圆环,直接复制粘贴到Wokwi里运行即可。
使用库:
Adafruit RGB Matrix Panel,Wokwi自带,不需要手动安装。
#include <Adafruit_RGBmatrixPanel.h>
// ============ 引脚定义(和你图上接线对应!)============
#define R0 22
#define G0 23
#define B0 24
#define R1 25
#define G1 26
#define B1 27
#define A 28
#define B 29
#define C 30
#define D 31
#define CLK 32
#define LAT 33
#define OE 34
// 创建屏幕对象:宽32,高32,R0,G0,B0,R1,G1,B1,A,B,C,D,CLK,LAT,OE, false=不使用双缓冲
Adafruit_RGBmatrixPanel matrix(32, 32, R0, G0, B0, R1, G1, B1, A, B, C, D, CLK, LAT, OE, false);
// 颜色宏定义
#define RED matrix.Color(255,0,0)
#define GREEN matrix.Color(0,255,0)
#define BLUE matrix.Color(0,0,255)
#define YELLOW matrix.Color(255,255,0)
#define BLACK matrix.Color(0,0,0)
void setup() {
matrix.begin();
}
// 画空心圆函数
void drawCircle(int cx, int cy, int r, uint16_t color) {
int x = r, y = 0;
int dx = 1, dy = 1;
int err = dx - (r << 1);
while (x >= y) {
matrix.drawPixel(cx + x, cy + y, color);
matrix.drawPixel(cx + y, cy + x, color);
matrix.drawPixel(cx - y, cy + x, color);
matrix.drawPixel(cx - x, cy + y, color);
matrix.drawPixel(cx - x, cy - y, color);
matrix.drawPixel(cx - y, cy - x, color);
matrix.drawPixel(cx + y, cy - x, color);
matrix.drawPixel(cx + x, cy - y, color);
y++;
err += dy;
dy += 2;
if (err > 0) {
x--;
dx += 2;
err += dx - (r << 1);
}
}
}
void loop() {
matrix.fillScreen(BLACK);
// 画多层彩色圆环(就是截图上的图案)
drawCircle(16, 16, 15, RED);
drawCircle(16, 16, 11, GREEN);
drawCircle(16, 16, 7, BLUE);
drawCircle(16, 16, 3, YELLOW);
matrix.show(); // 刷新屏幕,输出画面
delay(50);
}
📌 接线对照表(代码 ↔ Arduino Mega ↔ HUB75屏)
| HUB75信号 | Mega引脚 |
|---|---|
| R0 | 22 |
| G0 | 23 |
| B0 | 24 |
| R1 | 25 |
| G1 | 26 |
| B1 | 27 |
| A | 28 |
| B | 29 |
| C | 30 |
| D | 31 |
| CLK | 32 |
| LAT | 33 |
| OE | 34 |
| GND | GND |
📝 Wokwi使用步骤
- 打开你的项目链接
[https://wokwi.com/projects/446149466101088257](https://wokwi.com/projects/446149466101088257) - 把原有代码全部删掉,粘贴上面这段代码
- 点击运行▶,就出现截图中的彩色圆环图案
⚠️ 实物硬件提醒
- 实物不能用Arduino主板5V给LED屏供电,RGB屏峰值电流非常大,必须单独外接5V 3A电源给屏供电。
- 实物推荐加上74HC245电平驱动芯片,保护Mega IO口。
- 这个库是Adafruit经典HUB75驱动库,原理就是前面讲的动态逐行扫描。
可选扩展
如果你想要旋转动画/动态隧道效果 (项目文件名mega7219matrixtur是matrix tunnel隧道),我可以给带旋转滚动圆环的动态版本代码。
项目解析(Wokwi MAX7219 4块16×16矩阵拼接,不是HUB75!)
刚才识别错误,这不是HUB75 RGB屏 !
实际硬件:4片独立MAX7219模块,每块是16×16单色点阵 ,分别是红、绿、蓝、黄四块屏,四块叠放视觉上形成彩色画面;SPI级联串联。
元件:
wokwi-max7219-matrix,chain:4,layout:fc16每块16×16。主控 Arduino Mega,SPI引脚:
- DIN → Mega D11
- CS → Mega D10
- CLK → Mega D13
- 四块MAX7219级联:matrix1(红) → matrix2(绿) → matrix3(蓝) → matrix4(黄)
硬件方案说明
- 4个MAX7219 16×16单色点阵屏
- matrix1:红色
- matrix2:绿色
- matrix3:蓝色
- matrix4:黄色
- 级联方式(SPI串行菊花链)
- 前一块模块的
DOUT→ 下一块模块的DIN - CLK、CS、V+、GND 全部并联
- Arduino Mega只需要3根信号线驱动全部4块屏:DIN(11), CS(10), CLK(13)
- 前一块模块的
- 原理:MAX7219是静态锁存扫描芯片,内置行/列扫描驱动,单片机通过SPI发送16bit数据,芯片自动扫描点亮点阵,不需要软件逐行扫描。>
每块屏是单色,四块独立单色屏幕叠在一起,同步控制,不同屏点亮不同位置像素,组合成截图里红/绿/蓝/黄四色圆环图案。
引脚接线总表(从你给的wokwi json提取)
| Arduino Mega | MAX7219模块 | 功能 |
|---|---|---|
| D11 | matrix1 DIN | SPI数据输入 |
| D10 | matrix1 CS | 片选 |
| D13 | matrix1 CLK | SPI时钟 |
| 5V | matrix1 V+ | 供电 |
| GND | matrix1 GND | 公共地 |
其余matrix2/matrix3/matrix4:CLK/CS/V+/GND并联,DOUT接到下一级DIN,形成4模块菊花链。
Arduino代码(适配该Wokwi工程,使用LedControl库)
LedControl是MAX7219标准库,Wokwi内置,直接复制使用。
4块级联,设备编号:0=红屏(matrix1),1=绿屏(matrix2),2=蓝屏(matrix3),3=黄屏(matrix4)。
每块屏幕尺寸:16行 × 16列
#include <LedControl.h>
// 参数:DIN, CLK, CS, 模块数量
LedControl lc = LedControl(11,13,10,4);
// 画圆函数:在指定MAX7219设备上画空心圆
void drawCircle(uint8_t dev, int cx, int cy, int r)
{
int x = r;
int y = 0;
int err = 1 - r;
while(x >= y)
{
if(cx+x >=0 && cx+x <16 && cy+y >=0 && cy+y <16)
lc.setLed(dev, cy+y, cx+x, true);
if(cx+y >=0 && cx+y <16 && cy+x >=0 && cy+x <16)
lc.setLed(dev, cy+x, cx+y, true);
if(cx-y >=0 && cx-y <16 && cy+x >=0 && cy+x <16)
lc.setLed(dev, cy+x, cx-y, true);
if(cx-x >=0 && cx-x <16 && cy+y >=0 && cy+y <16)
lc.setLed(dev, cy+y, cx-x, true);
if(cx-x >=0 && cx-x <16 && cy-y >=0 && cy-y <16)
lc.setLed(dev, cy-y, cx-x, true);
if(cx-y >=0 && cx-y <16 && cy-x >=0 && cy-x <16)
lc.setLed(dev, cy-x, cx-y, true);
if(cx+y >=0 && cx+y <16 && cy-y >=0 && cy-y <16)
lc.setLed(dev, cy-y, cx+y, true);
if(cx+x >=0 && cx+x <16 && cy-y >=0 && cy-y <16)
lc.setLed(dev, cy-y, cx+x, true);
y++;
if(err < 0)
{
err += 2*y + 1;
}
else
{
x--;
err += 2*(y-x)+1;
}
}
}
void setup() {
for(int i=0; i<4; i++)
{
lc.shutdown(i, false); // 开启显示
lc.setBrightness(i, 8); // 亮度0~15
lc.clearDisplay(i); // 清屏
}
}
void loop() {
// 全部屏幕清空
for(int i=0;i<4;i++) lc.clearDisplay(i);
// 4块屏各自画圆环,对应截图图案
drawCircle(0, 8, 8, 7); // dev0 红色外圈
drawCircle(1, 8, 8, 5); // dev1 绿色环
drawCircle(2, 8, 8, 3); // dev2 蓝色环
drawCircle(3, 8, 8, 1); // dev3 黄色内圈
delay(100);
}
点亮方案完整说明
- 硬件架构
4个独立MAX7219驱动的16×16单色LED矩阵,SPI菊花链式级联,Arduino Mega作为主机发送SPI命令。MAX7219芯片内部包含行扫描寄存器,自动驱动点阵,单片机只负责发送像素数据。
每块屏幕是单一颜色,四块屏幕重叠放置,同步点亮,形成彩色同心圆效果。 - 通信流程
- Arduino 通过DIN引脚串行发送16bit数据,CLK提供移位时钟
- 数据依次穿过4个MAX7219芯片(菊花链)
- CS片选拉低锁存数据,数据分配给4个设备
- 每个MAX7219收到数据后,自动持续扫描自己的16×16LED阵列,维持LED点亮
- 库函数说明:
lc.setLed(dev, row, col, state):dev=模块编号,row行号,col列号,true点亮LEDlc.clearDisplay(dev):清空对应屏幕所有像素lc.setBrightness():调节LED亮度,MAX7219内置PWM调光
Wokwi导入使用方法
- 打开你这个wokwi项目链接
- 清空原有代码,粘贴上面代码
- 直接点击运行,就能复现截图里四色同心圆环效果
补充说明
- MAX7219:只能驱动单色点阵 ,不能单块屏同时输出多颜色,这个仿真实现彩色的技巧是四块不同颜色的单色屏物理叠加。
- SPI级联:信号串行传递,所以只需要3根信号线就可以驱动多块MAX7219。
如果你想要动态旋转/隧道动画版本(项目名 mega7219matrixtur),我可以把动态滚动圆环的代码写出来。