ESP8266 + DHT11 + OLED0.96温湿度中文显示和MQTT(三)

本文接上文 ESP8266 + DHT11 + OLED0.96温湿度中文显示和MQTT(二)-CSDN博客

本章节主要接上节,增加MQTT发送数据,硬件参数,和接线,请看上文

增加代码步骤如下:

1)  引入MQTT头文件和mqtt的参数变量

#include <PubSubClient.h>


const char* mqtt_server = "192.168.1.10"; //这里换上你自己的MQTT的服务器IP
const char* mqtt_username = "admin";
const char* mqtt_password = "admin";
const int mqtt_port = 1883;
const char* mqtt_client_id = "d13U1IZPW0VB&107";
const char* mqtt_sensor_topic = "dht11";
unsigned long last_send = 0;

PubSubClient mqttClient(espClient); //声明mqtt客户端

2)编写MQTT 连接函数

void mqttReconnect() {
  // Loop until we're reconnected
  while (!mqttClient.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (mqttClient.con
<think>好的,用户现在需要设计一个基于STM32F103C8T6单片机的硬件系统,包含OLED显示ESP8266 WiFi模块、PM2.5传感器、DHT22温湿度传感器、甲醛传感器、蜂鸣器按键。首先,我需要回顾之前的对话,确保新设计符合之前的规范,比如使用正确的LaTeX格式结构。 用户之前询问过硬件设计,特别是OLED甲醛监测模块,现在他们扩展了需求,增加了更多模块。我需要确保每个模块的选型依据、接口设计、电路连接都详细说明,并且保持结构清晰。同时,用户可能希望了解这些模块如何协同工作,以及可能的软件设计要点。 首先,分析每个组件的功能接口需求。STM32F103C8T6是一款常用的ARM Cortex-M3单片机,有足够的GPIO通信接口。需要确认各个外设的接口类型,比如I2C、SPI、UART,以及GPIO的使用情况。例如,OLED通常使用I2C或SPI,ESP8266使用UART,DHT22是单总线,PM2.5甲醛传感器可能有模拟输出或数字接口,蜂鸣器按键需要GPIO控制。 接下来,电源设计是关键,尤其是多模块下的电流需求。AMS1117-3.3可能不足以支持所有模块,特别是如果同时工作的话。可能需要计算总电流,并考虑是否需要更大电流的稳压器或独立供电。此外,模拟传感器的信号调理电路需要抗干扰设计,比如滤波正确的接地。 接口分配方面,需要避免引脚冲突。例如,STM32的I2C1通常有固定引脚,需要检查是否与其他外设冲突。如果ESP8266使用USART1,那么USART2可能用于甲醛传感器。DHT22的单总线可能需要外部上拉电阻。蜂鸣器可能需要极管驱动,按键需要上拉电阻软件消抖。 软件部分需要各个模块的驱动集成。例如,实时操作系统或任务调度来处理多任务,中断处理按键传感器数据,WiFi模块的TCP/IP通信协议,以及数据整合显示OLED上。用户可能还关心校准错误处理,比如传感器数据异常时的处理机制。 潜在的问题可能包括GPIO资源不足、通信协议冲突、电源噪声影响传感器读数、以及代码的复杂度管理。需要确保每个模块的驱动程序正确,中断优先级合理,避免阻塞主循环。此外,用户可能希望系统低功耗,需要考虑各个模块的休眠模式控制策略。 最后,需要验证整个系统的兼容性稳定性,比如模块同时工作时的干扰,长时间运行的可靠性,以及数据传输的准确性。可能需要建议用户进行分阶段测试,先逐个模块调试,再整体集成,确保每一步都稳定。</think>以下是基于STM32F103C8T6单片机为核心,集成OLED显示ESP8266 WiFi模块、PM2.5传感器、DHT22温湿度传感器、甲醛传感器、蜂鸣器按键的完整硬件设计方案(严格遵循嵌入式系统设计规范): --- ### **一、系统总体架构** ```mermaid graph TB A[STM32F103C8T6] --> B[OLED显示] A --> C[ESP8266 WiFi] A --> D[PM2.5传感器] A --> E[DHT22温湿度] A --> F[甲醛传感器] A --> G[蜂鸣器] A --> H[按键] ``` --- ### **二、核心模块设计** #### **1. 主控芯片配置** - **STM32F103C8T6**(72MHz Cortex-M3) - **Flash**: 64KB, **RAM**: 20KB - **GPIO分配策略**: | 外设模块 | 接口类型 | 引脚分配 | |----------------|-----------|-----------------------| | OLED (SSD1306) | I2C | PB6(SCL), PB7(SDA) | | ESP8266 | UART1 | PA9(TX), PA10(RX) | | PM2.5传感器 | ADC1_IN0 | PA0 | | DHT22 | GPIO | PA1 (单总线协议) | | 甲醛传感器 | UART2 | PA2(TX), PA3(RX) | | 蜂鸣器 | GPIO | PC13 (PWM驱动) | | 按键 | GPIO | PB0-PB3 (矩阵扫描) | #### **2. 电源电路设计** - **两级稳压方案**: 1. 输入电源:5V/2A MicroUSB 2. 主稳压:AMS1117-3.3V(最大电流1A) $$ P_{\text{diss}} = (5V-3.3V) \times I_{\text{total}} < 1W $$ 3. 独立模拟供电:TPS7A4700(为传感器提供低噪声3.3V) #### **3. 关键模块接口设计** **3.1 OLED显示模块** - **硬件优化**: - 在I2C总线上并联100nF电容滤波 - 对比度调节电路: $$ R_{\text{adj}} = 10k\Omega \text{电位器串联在VCC线} $$ **3.2 ESP8266-01S WiFi模块** - **电平转换**:采用TXS0108E实现3.3V ↔ 5V双向转换 - **复位电路**:RC复位网络(R=10kΩ, C=10μF) - **工作模式配置**: ```c AT+CWMODE=3 // STA+AP模式 AT+CIPMUX=1 // 启用多连接 ``` **3.3 PM2.5传感器(GP2Y1010AU0F)** - **信号调理电路**: - 二阶RC滤波(R1=R2=1kΩ, C1=C2=100nF) - 运算放大器放大电路(增益G=5): $$ V_{\text{out}} = V_{\text{sensor}} \times \left(1 + \frac{R_f}{R_g}\right) $$ **3.4 DHT22温湿度传感器** - **单总线协议优化**: - 4.7kΩ上拉电阻 - 软件防冲突机制:两次采样间隔≥2s **3.5 甲醛传感器(ZE08-CH2O)** - **UART通信保护**:添加TVS二极管(SMAJ5.0A)防静电 **3.6 蜂鸣器驱动电路** - 采用S8050极管驱动(β≥120) - 基极电阻计算: $$ R_b = \frac{V_{io} - V_{be}}{I_b} = \frac{3.3V - 0.7V}{2mA} = 1.3k\Omega $$ --- ### **、PCB设计要点** 1. **布局原则**: - 数字地与模拟地分割,单点连接在稳压芯片GND - 高频模块(ESP8266)远离模拟传感器 2. **走线规范**: - I2C总线长度<10cm,等长走线误差<5mm - ADC输入线采用包地处理 3. **抗干扰措施**: - 每个IC电源引脚添加0.1μF+10μF去耦电容 - 晶振外壳接地,周围设置禁止布线区 --- ### **四、软件框架建议** ```c void main() { HW_Init(); // 硬件初始化 WiFi_Connect(); // 连接路由器 while(1) { if(Flag_1s) { // 1秒定时中断 Read_DHT22(); Read_PM25(); Read_Formaldehyde(); Update_OLED(); Send_Cloud(); // 通过MQTT上传数据 } Key_Scan(); // 矩阵按键扫描 } } ``` --- ### **五、物料清单(关键部件)** | 部件 | 型号 | 单价 | 供应商 | |--------------------|------------------|--------|--------------| | 主控芯片 | STM32F103C8T6 | ¥8.50 | 立创商城 | | WiFi模块 | ESP8266-01S | ¥12.80 | 安信可 | | PM2.5传感器 | GP2Y1010AU0F | ¥45.00 | 夏普 | | 甲醛传感器 | ZE08-CH2O | ¥85.00 | 炜盛科技 | | OLED显示屏 | SSD1306 0.96寸 | ¥11.90 | 中景园电子 | | 温湿度传感器 | DHT22 | ¥22.00 | 奥松电子 | --- ### **六、设计验证方法** 1. **信号完整性测试**: - 使用示波器测量ADC输入信号纹波(要求<10mVpp) - I2C总线时序验证(SCL频率≤400kHz) 2. **系统联合调试**: - 压力测试:所有传感器同时连续工作24小时 - 通信冲突测试:WiFi数据传输时操作按键OLED 3. **EMC改进措施**: - 在ESP8266天线区域敷设接地铜箔 - 为PWM蜂鸣器信号线添加磁珠滤波(BLM18HG系列) --- 本设计可通过以下方式优化: 1. 使用硬件I2C替代软件模拟I2C(提高显示刷新率) 2. 为关键传感器添加硬件看门狗(如MAX706) 3. 采用RTOS(如FreeRTOS)实现多任务调度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值