项目概述
在这个项目中,我们将使用ESP32微控制器读取温湿度传感器的数据,并将这些数据通过HTTP请求传输到基于Flask框架的服务器。Flask是一个轻量级的Python Web框架,非常适合快速开发和部署Web应用。通过这个项目,我们不仅可以了解ESP32的基本使用,还能体验Flask框架的便捷和强大功能。
硬件和软件准备
硬件:
- ESP32开发板
- DHT11或DHT22温湿度传感器
- 面包板和跳线
软件:
- Arduino IDE(用于编写和上传ESP32代码)
- Python 3.x(用于运行Flask服务器)
- Flask库(可以通过pip安装)
硬件连接
将DHT11或DHT22传感器连接到ESP32开发板:
- VCC连接到ESP32的3.3V引脚
- GND连接到ESP32的GND引脚
- 数据引脚连接到ESP32的D4引脚
ESP32代码
首先,我们需要在Arduino IDE中编写ESP32的代码,以读取传感器数据并通过HTTP请求将数据发送到Flask服务器。
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>#define DHTPIN 4
#define DHTTYPE DHT22const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* serverName = "http://your_server_ip:5000/temperature";DHT dht(DHTPIN, DHTTYPE);void setup() {Serial.begin(115200);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi...");}Serial.println("Connected to WiFi");dht.begin();
}void loop() {if (WiFi.status() == WL_CONNECTED) {HTTPClient http;float temperature = dht.readTemperature();float humidity = dht.readHumidity();if (isnan(temperature) || isnan(humidity)) {Serial.println("Failed to read from DHT sensor!");return;}String serverPath = serverName + "?temperature=" + String(temperature) + "&humidity=" + String(humidity);http.begin(serverPath.c_str());int httpResponseCode = http.GET();if (httpResponseCode > 0) {String response = http.getString();Serial.println(httpResponseCode);Serial.println(response);} else {Serial.print("Error on sending GET: ");Serial.println(httpResponseCode);}http.end();} else {Serial.println("WiFi Disconnected");}delay(60000); // Send data every 60 seconds
}
Flask服务器代码
接下来,我们编写Flask服务器的代码,以接收来自ESP32的数据并进行处理。
from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/temperature', methods=['GET'])
def get_temperature():temperature = request.args.get('temperature')humidity = request.args.get('humidity')if temperature and humidity:print(f"Received temperature: {temperature}°C, humidity: {humidity}%")return jsonify({"status": "success", "temperature": temperature, "humidity": humidity})else:return jsonify({"status": "error", "message": "Missing temperature or humidity"}), 400if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
p
运行Flask服务器
确保已安装Flask库,可以通过以下命令安装:
pip install flask
然后,在终端中运行Flask服务器:
python app.py
Flask框架的好处
- 轻量级:Flask是一个轻量级框架,易于学习和使用,适合快速开发和原型设计。
- 模块化:Flask采用模块化设计,允许开发者根据需求选择和集成各种扩展,如数据库、表单处理和身份验证等。
- 灵活性:Flask没有强制的项目结构和约定,开发者可以根据自己的习惯和需求组织代码。
- 文档丰富:Flask有详细的文档和广泛的社区支持,开发者可以轻松找到所需的资源和帮助。
- 易于扩展:Flask可以通过各种扩展和中间件轻松扩展功能,如Flask-SQLAlchemy、Flask-WTF和Flask-Login等。
项目总结
通过这个项目,我们成功地使用ESP32读取温湿度传感器的数据,并将这些数据传输到基于Flask框架的服务器。Flask作为一个轻量级的Web框架,提供了简单、灵活和强大的功能,适合快速开发和部署物联网应用。