项目简介
本项目是一个完整的物联网系统,结合硬件与软件组件,可实时采集、处理和共享环境数据,并对环境参数变化实时响应。借助BMP280传感器监测环境温度和气压,温度超预设阈值时自动调节风扇速度。采集的数据会实时显示在OLED显示屏上,还会通过MQTT协议从ESP32传输到Raspberry Pi存储和发布,用户能通过网页查看相关信息。
项目的主要特性和功能
- 数据监测:利用BMP280传感器实时监测环境温度和气压。
- 自动控制:温度超预设阈值时,自动调节风扇速度,保障系统稳定运行。
- 实时显示:在OLED显示屏上实时显示采集的环境数据。
- 数据传输与存储:通过MQTT协议将数据从ESP32传输到Raspberry Pi,Raspberry Pi作为MQTT代理和物联网服务器存储数据。
- 时间同步:使用RTC模块保证系统内设备时间同步,Raspberry Pi从NTP服务器获取准确时间并通过MQTT协议更新RTC模块。
- 网页展示:Raspberry Pi将信息发布到网页,方便同网络设备查看和访问存储的数据。
安装使用步骤
硬件配置
- BMP280传感器:VCC引脚接ESP32的3.3V引脚,GND引脚接ESP32的GND引脚,SDI引脚接ESP32的SDA(GPIO21)引脚,SCK引脚接ESP32的SCL(GPIO22)引脚。
- OLED显示屏:VIN引脚接合适电压(通常为ESP32的3.3V),GND引脚接ESP32的GND引脚,SDA引脚接ESP32的SDA(GPIO21)引脚,SCL引脚接ESP32的SCL(GPIO22)引脚。
- RTC模块:VCC引脚接ESP32的3.3V引脚,GND引脚接ESP32的GND引脚,SDA引脚接ESP32的GPIO21引脚,SCL引脚接ESP32的GPIO22引脚。
- NOCTUA NF - A4x10 5V PWM风扇:GND引脚接开发板的GND引脚,VCC引脚接开发板的5V引脚,TACHO引脚接开发板的GPIO16引脚,PWM引脚接开发板的GPIO17引脚。
软件设置
Raspberry Pi 4设置
- 下载并安装Raspberry Pi Imager。
- 打开Raspberry Pi Imager,选Raspberry PI OS(32位)镜像和SD卡,写入镜像。
- 取出SD卡插入Raspberry Pi,连接外设并通电。
- 按屏幕提示配置操作系统。
- 使用以下命令更新系统:
bash sudo apt update sudo apt upgrade
- 安装所需应用程序。
ESP32设置
- 安装Arduino IDE。
- 打开Arduino IDE,在“文件 > 首选项”中,将URL https://dl.espressif.com/dl/package_esp32_index.json 添加到“附加开发板管理器网址”。
- 选“工具 > 开发板管理器”,搜索“esp32”并安装ESP32支持。
- 通过USB线将ESP32连到计算机。
- 在IDE中开新项目,选“工具 > 开发板”中的ESP32 Dev Module。
- 选ESP32连接的正确COM端口,将示例程序“WiFi > WiFiScan”上传到ESP32验证。
Arduino库安装
- 打开Arduino IDE,选“管理库”。
- 搜索并安装以下库:Wire、Adafruit_BMP280、Adafruit_SSD1306、Adafruit GFX Library、RTClib、WiFi、Arduino_JSON、FreeRTOS。
Raspberry Pi包安装
- 打开Raspberry Pi终端,安装MQTT代理Mosquitto:
bash sudo apt-get install mosquitto sudo systemctl start mosquitto sudo systemctl enable mosquitto
- 安装Python的Paho MQTT库:
bash pip install paho-mqtt
- 安装NTP包:
bash sudo apt-get update sudo apt-get install ntp
通信配置与启动
ESP32端
- 打开脚本 tasks_ESP32v2.0.ino。
- 修改WiFi网络名称(SSID)和密码:
C++ const char *ssid = "你的SSID"; const char *password = "你的密码";
- 修改Raspberry Pi的IP地址:
C++ const char *mqtt_server = "Raspberry Pi的IP地址";
- 保存修改并将代码上传到ESP32。
- 给ESP32供电,验证WiFi连接。
Raspberry Pi端
- 打开脚本 inviohtmlv2.0.py 和 orario.py。
- 修改Raspberry Pi的IP地址:
python broker_address = "Raspberry Pi的IP地址"
- 在 inviohtmlv2.0.py 脚本中修改 orario.py 的路径。
- 打开终端,执行以下命令:
bash sudo nano /etc/ntp.conf
- 在文件中添加并保存以下内容:
bash server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org
- 重启NTP服务:
bash sudo service ntp restart
- 创建服务文件:
bash sudo nano /etc/systemd/system/orario.service
- 在文件中添加 orario.py 的路径并保存。
- 启动服务:
bash sudo systemctl enable orario.service sudo systemctl start orario.service
- 验证服务状态:
bash sudo systemctl status orario.service
- 执行脚本 app.py。
- 打开第二个终端,执行 inviohtmlv2.0.py。
- 打开浏览器,访问 http://Raspberry Pi的IP地址:5000/pagina 查看数据。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】