当前位置: 首页 > news >正文

ESP32-S3入门第八天:往期知识回顾与实战练习

往期知识回顾与迷你环境监测站实战

    • 一、前七天核心知识回顾
      • 1. 基础能力模块(Day1-Day2)
      • 2. 模拟与通信模块(Day3-Day7)
      • 3. 知识串联逻辑
    • 二、实验小产品:迷你环境监测站(融合全知识点)
      • 1. 产品功能定义
      • 2. 硬件清单(含往期元件复用)
      • 3. 硬件接线图(整合多模块)
    • 三、产品开发实战
      • 1. 功能模块拆解与代码实现
        • (1)基础配置(整合 Day1-Day2)
        • (2)传感器数据采集(Day4 ADC 核心)
        • (3)OLED 本地显示(Day5 I2C 实战)
        • (4)PWM 报警与 UART 上报(Day3+Day7)
        • (5)新增 Wi-Fi 基础配网(衔接物联网)
        • (6)主函数整合(全流程串联)
      • 4. 实验现象与验收标准
    • 四、知识拓展与进阶方向
      • 1. 功能升级(基于现有代码)
      • 2. 排错指南(整合往期常见问题)
    • 五、第八天总结与后续规划
      • 1. 今日成果
      • 2. 后续学习方向
  • 本章节系列教学

一、前七天核心知识回顾

1. 基础能力模块(Day1-Day2)

天数核心内容关键技能应用场景
Day1Arduino IDE 使用开发环境搭建、驱动安装、代码上传所有 ESP32-S3 基础实验
Day2GPIO / 延时 / 定时器输入(按钮)/ 输出(LED)、阻塞 / 非阻塞延时、Ticker 定时器硬件开关控制、多任务调度

2. 模拟与通信模块(Day3-Day7)

天数核心内容关键技能代表实验
Day3PWM 脉冲调制ledc库配置、占空比 / 频率调节LED 呼吸灯、舵机控制
Day4ADC 模数转换分辨率 / 衰减器配置、模拟信号采集电位器读取、光敏 / 湿度传感
Day5I2C 通信设备扫描、多设备总线共享OLED 显示、BME280 数据采集
Day6SPI 通信硬件 SPI 配置、多设备片选控制TFT 显示、SPI Flash 存储
Day7UART 通信多串口配置、指令解析串口控制硬件、数据上报

3. 知识串联逻辑

在这里插入图片描述

二、实验小产品:迷你环境监测站(融合全知识点)

1. 产品功能定义

实现「温湿度 + 光照强度」采集,通过 OLED 本地显示、串口上报数据,LED 指示灯提示湿度状态(干 / 湿),核心融合前七天 80% 知识点,新增基础 Wi-Fi 配网能力。

2. 硬件清单(含往期元件复用)

元件数量对应知识点用途
ESP32-S3 开发板1全流程基础核心控制
DHT11 温湿度传感器1ADC/Day4温湿度采集
光敏电阻 + 10kΩ 电阻1 组ADC/Day4光照检测
0.96 寸 I2C OLED1I2C/Day5数据本地显示
板载 LED + 外接 LED2GPIO/PWM/Day2-Day3状态指示(呼吸灯 + 湿度报警)
杜邦线 + 面包板若干全流程电路搭建

3. 硬件接线图(整合多模块)

元件引脚ESP32-S3 引脚对应模块
DHT11 DATAGPIO2(ADC1_CH2)ADC 采集
光敏电阻分压点GPIO36(ADC1_CH0)ADC 采集
OLED SDA/SCLGPIO21/GPIO22I2C 通信
湿度报警 LEDGPIO10(PWM 通道 1)PWM 亮度提示
UART 上报GPIO17/GPIO16(UART2)UART 通信

提示:复用 I2C/SPI/UART 引脚时,需确保不同设备片选 / 地址不冲突(如 OLED 地址 0x3C,无其他 I2C 设备)。

三、产品开发实战

1. 功能模块拆解与代码实现

(1)基础配置(整合 Day1-Day2)
// 引入所需库(覆盖Day4-Day7)
#include "DHT.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Ticker.h>// 引脚定义(Day2 GPIO基础)
#define DHT_PIN 2
#define LDR_PIN 36
#define ALARM_LED_PIN 10
#define UART2_TX 17
#define UART2_RX 16// 模块初始化(Day1-Day7配置逻辑)
DHT dht(DHT_PIN, DHT11);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
HardwareSerial UART2(2);
Ticker timer;  // Day2 定时器// 全局变量
float temp = 0.0, humi = 0.0;
int light = 0;
(2)传感器数据采集(Day4 ADC 核心)
// ADC采集函数(含滤波优化)
int readADCFiltered(int pin) {long sum = 0;for (int i = 0; i < 10; i++) {  // 滑动平均滤波sum += analogRead(pin);delay(1);}return sum / 10;
}// 数据更新函数(定时器触发,Day2 非阻塞逻辑)
void updateSensorData() {// DHT11数据(Day4 模拟传感器)humi = dht.readHumidity();temp = dht.readTemperature();// 光敏电阻数据(Day4 ADC转换)int ldrVal = readADCFiltered(LDR_PIN);light = map(ldrVal, 0, 4095, 100, 0);  // 光照越强值越大
}
(3)OLED 本地显示(Day5 I2C 实战)
void initOLED() {if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {while (1);  // 初始化失败卡死}oled.clearDisplay();oled.setTextColor(SSD1306_WHITE);oled.setTextSize(1);
}void displayData() {oled.clearDisplay();// 显示温湿度(Day5 文本显示)oled.setCursor(0, 0);oled.print("Temp: ");oled.print(temp, 1);oled.println(" C");oled.setCursor(0, 16);oled.print("Humi: ");oled.print(humi, 0);oled.println(" %");// 显示光照(Day5 图形辅助)oled.setCursor(0, 32);oled.print("Light: ");oled.print(light);oled.println(" %");// 湿度状态提示oled.setCursor(0, 48);if (humi < 30) oled.println("Status: Dry");else if (humi < 60) oled.println("Status: Normal");else oled.println("Status: Wet");oled.display();
}
(4)PWM 报警与 UART 上报(Day3+Day7)
void initPWM() {// Day3 PWM配置:报警LED呼吸灯ledcSetup(1, 1000, 8);ledcAttachPin(ALARM_LED_PIN, 1);
}void checkHumidityAlarm() {// 湿度低于30%时LED呼吸(Day3 占空比变化)if (humi < 30) {static int duty = 0;static bool up = true;duty = up ? duty + 5 : duty - 5;if (duty >= 255) up = false;if (duty <= 0) up = true;ledcWrite(1, duty);} else {ledcWrite(1, 0);  // 正常时熄灭}
}void uartReport() {// Day7 UART2上报数据(格式化)String report = "TEMP:" + String(temp,1) + ",HUMI:" + String(humi,0) + ",LIGHT:" + String(light);UART2.println(report);
}
(5)新增 Wi-Fi 基础配网(衔接物联网)
#include <WiFi.h>const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";void initWiFi() {WiFi.begin(ssid, password);oled.setCursor(0, 56);oled.print("WiFi: Connecting");oled.display();while (WiFi.status() != WL_CONNECTED) {delay(500);oled.print(".");oled.display();}oled.clearDisplay();oled.setCursor(0, 56);oled.print("WiFi: Connected");oled.display();
}
(6)主函数整合(全流程串联)
void setup() {// 基础初始化(Day1-Day2)Serial.begin(115200);UART2.begin(115200, SERIAL_8N1, UART2_RX, UART2_TX);dht.begin();analogSetPinAttenuation(LDR_PIN, ADC_11db);  // Day4 ADC衰减器// 模块初始化initOLED();initPWM();initWiFi();  // 新增Wi-Fi// 定时器配置(Day2 非阻塞)timer.attach_ms(2000, updateSensorData);  // 2秒更新一次数据
}void loop() {// 数据处理与输出(串联全知识点)displayData();       // I2C OLED显示(Day5)checkHumidityAlarm();// PWM报警(Day3)uartReport();        // UART上报(Day7)// 调试日志(Day1)Serial.print("Temp:");Serial.print(temp,1);Serial.print(" Humi:");Serial.print(humi,0);Serial.print(" Light:");Serial.println(light);delay(1000);
}

4. 实验现象与验收标准

  1. OLED 显示:分区域显示温度(保留 1 位小数)、湿度(整数)、光照(百分比)及湿度状态

  2. 报警功能:湿度<30% 时,外接 LED 呈呼吸灯效果(PWM 动态调节)

  3. 串口上报

    • UART0(USB)打印调试日志
    • UART2 输出格式化数据(如 “TEMP:25.3,HUMI:45,LIGHT:60”)
  4. Wi-Fi 状态:初始化时 OLED 显示连接过程,成功后提示 “WiFi: Connected”

四、知识拓展与进阶方向

1. 功能升级(基于现有代码)

  • ✅ 新增 SPI Flash 存储(Day6):将历史数据写入 Flash,断电不丢失
  • ✅ 加入舵机控制(Day3):湿度>70% 时舵机触发 “浇水” 动作
  • ✅ 实现 HTTP 请求(Day8+):通过 Wi-Fi 将数据上传至物联网平台(如 Blinker)

2. 排错指南(整合往期常见问题)

问题现象关联知识点解决方法
OLED 不显示I2C/Day5检查地址(0x3C/0x3D)、SDA/SCL 接线
传感器数据异常ADC/Day4增加滤波、校准阈值、检查接线极性
串口乱码UART/Day7统一波特率(115200)、配置 8N1 格式
Wi-Fi 连接失败新增内容确认 SSID / 密码、连接 2.4GHz 网络

五、第八天总结与后续规划

1. 今日成果

  • ✅ 系统回顾前七天核心知识点,形成 “基础 - 模拟 - 通信” 知识体系
  • ✅ 完成首个综合产品,实现多模块协同工作
  • ✅ 新增 Wi-Fi 基础能力,衔接物联网进阶内容

2. 后续学习方向

  1. 物联网深化:MQTT 协议、OTA 无线更新、云端平台对接

  2. 硬件拓展:摄像头(ESP32-S3 NPU 加速)、蓝牙 BLE 通信

  3. 项目实战:智能花盆、环境监测仪表盘、低功耗传感器节点

可根据兴趣选择方向,后续教程将聚焦 “物联网数据上传” 或 “硬件拓展”,带你从 “模块实验” 走向 “完整项目”!


本章节系列教学

ESP32-S3 入门第一天:Arduino IDE使用
ESP32-S3 入门第二天:IO口、延时与定时器核心知识实战
ESP32-S3 入门第三天:PWM 脉冲宽度调制
ESP32-S3 入门第四天:ADC 模数转换
ESP32-S3 入门第五天:I2C通信协议
ESP32-S3入门第六天:SPI通信协议与高速外设控制
ESP32-S3入门第七天:UART串口通信与设备交互
ESP32-S3入门第八天:往期知识回顾与实战练习

http://www.dtcms.com/a/414530.html

相关文章:

  • Claude Code 实战指南(三):AI辅助开发工作流 Spec Workflow MCP教程
  • 红帽认证含金量怎么样?适合哪些人?
  • 宣传的网站开发需要多少钱步骤的英文
  • 选择一款拖拽式界面的vscode扩展程序制作Python界面
  • Android开发-屏幕变更事件
  • 十大咨询公司排行榜aso优化师主要是干嘛的
  • LeetCode第1346题 - 检查整数及其两倍数是否存在
  • 【Leetcode hot 100】207.课程表
  • 搜索引擎高级搜索技巧
  • 2.3 物理层设备 (答案见原书 P48)
  • 华为OBS obsutil使用
  • 租购同权七年之痒:政策善意如何变现?
  • 【Linux操作系统】基础开发工具
  • 老年ai模拟恋爱抖音快手微信小程序看广告流量主开源
  • 知名的网站制作公司需要多少钱企业宣传网站模板下载
  • 深圳横岗做网站的网站品牌形象设计怎么做
  • 社区网站推广方案百度百家号注册
  • 编程竞赛高频考点
  • Linux 程序使用 STDOUT 打印日志导致程序“假死”?一次线上 Bug 的深度排查与解决
  • (一)routeros命令笔记:开局篇
  • 网站推广模式一份完整的项目计划书
  • 基于STM32设计的智能安全头盔_299
  • ​VR应急安全学习机,提升应对自然灾害时自救互救的应急技能
  • app网站建设公司竞彩网站建设
  • pytorch基本运算-torch.normal()函数输出多维数据时,如何绘制正态分布函数图
  • OpenCV2-图像基本操作-阈值与平滑处理-形态学-梯度运算
  • 【开题答辩全过程】以 springboot+美食电子商城的设计与实现为例,包含答辩的问题和答案
  • MySQL所有关键字详细含义说明
  • MySQL表压缩:用CPU换I/O的秘密武器
  • 做外贸网站需要缴什么税重庆高端网站建设价格