)
一、项目介绍本项目通过物联网技术教大家从零搭建一套大气态势感知监测系统该系统建设内容包括从传感器采集信号数据并本地显示到LED屏幕→通过WIFI把数据传到云端服务器→指挥中心大屏可视化呈现数据及告警全链路贯通展示实现低功耗环境感知。项目内容覆盖感知层采集、通信透传、数据解析、后端服务、中控大屏、语音告警等可视化全栈流程参考工业级环境监测指挥系统架构涉及工作包括硬件接线、嵌入式开发、LED屏幕展示WIFI透传、服务器接口开发、数据库存储技术、大屏可视化技术希望大家通过本项目的学习能举一反三独立完成环境监测一整类物联网项目开发。如果大家学习制作过程中遇到困难也可以和我进行交流。二、项目演示环境态势感知系统边缘屏幕呈现数据指挥中心大屏告警效果三、硬件清单序号名称图片备注1淘晶驰2.0寸串口屏 型号TJC3224T120_011我买的是带触摸的电阻触摸2开发板ESP32-S3-N16R8购买已焊接排针的。有没有天线插座都无所谓。3AHT20BMP280温湿度气压模块购买已焊接排针的。有焊接工具的学员也可以自己焊接。4面包板条件允许可以买大一点的或者多买几个备用。如果需要粘贴固定可以买带背胶的。5杜邦线公对公、母对母、公对母长的短的都各买一板备用。6独立电源提供5V电源驱动屏幕6type-c数据线7ch340模块 usb转ttl烧录程序到屏幕四、核心硬件介绍一ESP32-S3 N16R8 开发板介绍1、ESP32‑S3N6R8概述ESP32‑S3 是一款低功耗的 MCU 系统级芯片 (SoC)集成 2.4 GHz Wi‑Fi 和低功耗蓝牙 (Bluetooth LE) 双模无线通信。ESP32‑S3 有完整的 Wi‑Fi 子系统和低功耗蓝牙子系统具有行业领先的低功耗性能和射频性能。支持多种低功耗工作状态能够满足各种应用场景的功耗需求。ESP32‑S3 芯片提供丰富的外设接口并具有多种特有的硬件安全机制。完善的安全机制使芯片能够满足严格的安全要求。ESP32‑S3 专为 AIoT 市场打造 支持 2.4 GHz Wi‑Fi 和 Bluetooth 5 (LE) 强大的 AI 运算能力和安全加密机制支持 AI 加速ESP32‑S3 MCU 增加了用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions)。AI 开发者们通过 ESP‑DSP 和 ESP‑NN 库使用这些向量指令可以实现高性能的图像识别、语音唤醒和识别等应用。ESP‑WHO 和 ESP‑Skainet 也将支持此功能。完善的安全机制ESP32‑S3 为物联网设备提供了完善的安全机制和保护措施防止各类恶意攻击和威胁。它支持基于 AES‑XTS 算法的 flash 加密、基于 RSA 算法的安全启动数字签名和 HMAC。ESP32‑S3 还新增了一个 “世界控制器 (World Controller)” 模块提供了两个互不干扰的执行环境实现可信执行环境或权限分离机制。Wi‑Fi Bluetooth 5 (LE)ESP32‑S3 集成 2.4 GHz Wi‑Fi (802.11 b/g/n), 支持 40 MHz 带宽其低功耗蓝牙子系统支持 Bluetooth 5 (LE) 和 Bluetooth Mesh可通过 coded PHY 与广播扩展实现远距离通信。它还支持 2 Mbps PHY用于提高传输速度和数据吞吐量。ESP32‑S3 的 Wi‑Fi 和 Bluetooth LE 射频性能优越在高温下也能稳定工作。丰富的 IO 接口ESP32‑S3 拥有 45 个可编程 GPIO 以及 SPI、I2S、I2C、PWM、RMT、ADC、UART、SD/MMC 主机控制器和 TWAI™控制器等常用外设接口。其中的 14 个 GPIO 可被配置为 HMI 交互的电容触摸输入端。此外ESP32‑S3 搭载了超低功耗协处理器 (ULP), 支持多种低功耗模式广泛适用于各类低功耗应用场景。2、ESP32‑S3N6R8开发板图解2、ESP32‑S3N6R8开发板详细参数二、AHT20BMP280模块介绍1、产品简介Product introduction本产品由新型 AHT20 和 BMP280 数字温湿度传感器组成I2C 主输出支持同时在线接入多个 I2C 电子设备或模块。可使用直流 2.8V‑5V 电压电压适应容易功耗低电路简单测温点准确。传输速度稳定、快速、电路简单、温点准确、传输速度稳定快速、电压适应容易功耗低。2、产品参数工作电压: DC 2.0‑5V接口类型: IIC压力范围: 300‑1100hPa测量温度范围: ‑40‑85℃测量湿度范围: 0‑100% RH尺寸: 15*15mm3、引脚说明VDD: 电源正极SDA:IIC 数据信号线GND: 电源负极SCL:IIC时钟信号线4、应用大气监测天气预报、大棚蔬菜、酿酒发酵、养蚕、鸡鸭鹅场、养猪场环境监测等场景。三2.0寸智能触摸屏五、开发环境介绍序号名称介绍1arduino-ide_2.0.2_Windows_64bit.exearduino 编程工具。Arduino IDE 2.0.2 是 Arduino 官方编程软件Windows64 位安装程序。用于编写、编译、上传代码到ESP32-S3 N16R8 开发板支持代码高亮、串口监视器可管理开发板与库文件。界面新版优化适合物联网、单片机入门开发编写控制硬件程序。2USART HMI开发淘晶驰屏幕UI界面程序。安装相关的库文件六、核心代码采集温度、湿度、气压、海拔数据显示到屏幕#include Wire.h #include Adafruit_AHTX0.h #include Adafruit_BMP280.h #include Adafruit_Sensor.h // I2C传感器配置 Adafruit_AHTX0 aht; Adafruit_BMP280 bmp(Wire); #define SDA_PIN 8 #define SCL_PIN 9 #define BMP_ADDR 0x77 // 淘晶驰串口屏配置 #define SCREEN_TX_PIN 17 // ESP32‑S3 Serial1‑TX → 屏幕RX #define SCREEN_RX_PIN 18 // ESP32‑S3 Serial1‑RX → 屏幕TX #define SCREEN_BAUD 9600 uint8_t buf[16]; uint8_t idx 0; void setup() { Serial.begin(115200); delay(1000); // 初始化I2C 读取AHT20BMP280 Wire.begin(SDA_PIN, SCL_PIN); Serial.println(初始化 AHT20BMP280); if (!aht.begin(Wire)) { Serial.println(AHT20初始化失败); while(1) delay(100); } Serial.println(✅AHT20就绪); if (!bmp.begin(BMP_ADDR)) { Serial.println(BMP280初始化失败); while(1) delay(100); } Serial.println(✅BMP280就绪); bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, Adafruit_BMP280::SAMPLING_X2, Adafruit_BMP280::SAMPLING_X16, Adafruit_BMP280::FILTER_X8, Adafruit_BMP280::STANDBY_MS_500); // 初始化淘晶驰硬件串口 Serial1 Serial1.begin(SCREEN_BAUD, SERIAL_8N1, SCREEN_RX_PIN, SCREEN_TX_PIN); delay(1500); Serial.println(淘晶驰屏幕就绪); sendTjcCmd(page 0); // 切到0号页面 delay(500); } void loop() { // 1.读取传感器数据 sensors_event_t hum_event, temp_aht; aht.getEvent(hum_event, temp_aht); float pressure_pa bmp.readPressure(); float pressure_hpa pressure_pa / 100.0F; float altitude bmp.readAltitude(1013.25); Serial.println(环境数据); Serial.print(温度); Serial.print(temp_aht.temperature); Serial.print( ℃\n); Serial.print(湿度); Serial.print(hum_event.relative_humidity); Serial.print( %RH\n); Serial.print(气压); Serial.print(pressure_hpa); Serial.print( hPa\n); Serial.print(海拔); Serial.print(altitude); Serial.print( m\n); Serial.println(); // 2.发送数据【带单位】到淘晶驰屏幕 t5~t8 char cmdBuf[64]; sendTjcCmd(cmdBuf); // t5.txt 温度 ℃ sprintf(cmdBuf,t5.txt\%.1f ℃\, temp_aht.temperature); sendTjcCmd(cmdBuf); delay(100); // t6.txt 湿度 %RH sprintf(cmdBuf,t6.txt\%.1f %%RH\, hum_event.relative_humidity); sendTjcCmd(cmdBuf); delay(100); // t7.txt 气压 hPa sprintf(cmdBuf,t7.txt\%.1f hPa\, pressure_hpa); sendTjcCmd(cmdBuf); delay(100); // t8.txt 海拔 m sprintf(cmdBuf,t8.txt\%.1f m\, altitude); sendTjcCmd(cmdBuf); // 3.接收屏幕返回触摸、ACK数据包 while (Serial1.available()) { uint8_t c Serial1.read(); buf[idx] c; // 检测 0xFF 0xFF 0xFF 数据包结束标记 if (idx 3 buf[idx-3]0xFF buf[idx-2]0xFF buf[idx-1]0xFF) { parsePacket(buf, idx-3); idx 0; } if (idx 16) idx 0; } delay(2000); // 2秒刷新一次屏幕 } /** * brief 发送淘晶驰指令自动追加3个0xFF结束符 */ void sendTjcCmd(const char* cmd) { Serial.print(发送屏幕指令); Serial.println(cmd); Serial1.print(cmd); Serial1.write(0xFF); Serial1.write(0xFF); Serial1.write(0xFF); } /** * brief 解析屏幕回传数据包触摸、松开、ACK应答 */ void parsePacket(uint8_t *p, uint8_t len) { if (p[0] 0x65 len 5) { uint16_t x (p[1] 8) | p[2]; uint16_t y (p[3] 8) | p[4]; Serial.print(触摸按下 X); Serial.print(x); Serial.print( Y); Serial.println(y); } else if (p[0] 0x66) { Serial.println(触摸松开); } else if (p[0] 0x1A) { Serial.println(--屏幕ACK成功); } }八、大屏展示效果如果大家学习过程中遇到问题可以私信我和我进行讨论。