auroraAA 发表于 2024-7-16 16:59:22

基于FireBeetle ESP32-C6的智能阳台植物土壤监测系统

摘要
随着城市化进程的加快,阳台植物盆栽成为城市居民接近自然、提升生活品质的重要途径。为了有效监测和管理阳台植物的生长环境,本项目利用FireBeetle ESP32-C6、土壤传感器、太阳能板和锂电池,设计了一套低功耗、可持续的阳台植物监测系统。该系统能够实时采集土壤湿度数据,并通过无线通信传输到用户端,实现远程监控和智能提醒。本文详细介绍了该系统的设计与实现过程,包括硬件选择、电路设计、软件开发、数据分析等内容,旨在为城市居民提供一种高效、便捷的植物养护解决方案。

引言
项目背景
在现代城市生活中,阳台植物盆栽不仅美化了居住环境,还能够改善空气质量,带来心理上的愉悦。然而,由于日常生活的繁忙,许多城市居民往往难以定时关注和照料这些植物,导致植物生长不良甚至枯萎。传统的植物养护方式依赖人工经验,不仅费时费力,而且难以保证准确性和及时性。因此,利用智能硬件和物联网技术,实现对阳台植物的自动监测和管理,成为解决这一问题的重要途径。

项目目的
本项目旨在设计并实现一套阳台植物监测系统,通过FireBeetle ESP32-C6、土壤传感器、太阳能板和锂电池的协同工作,实现对植物生长环境的实时监测和智能管理。具体目标包括:
1.实时监测:通过土壤传感器实时采集植物土壤湿度数据,并将数据传输至用户端,实现对植物生长环境的实时监控。
2.节能环保:利用太阳能板为系统供电,结合锂电池储能,实现系统的长期稳定运行,减少对外部电源的依赖。
3.智能提醒:根据土壤湿度数据,智能分析植物的需水情况,并通过无线通信模块及时向用户发送提醒信息,帮助用户合理安排浇水时间。
4.易于安装:提供详细的安装和调试指导,使系统能够方便快捷地应用于各种阳台环境。

硬件清单

[*]FireBeetle 2 ESP32-C6
[*]Gravity: 土壤湿度传感器
[*]单晶硅太阳能板

硬件连接

软件设计
数据采集与处理
在本项目中,ESP32微控制器作为核心处理单元,负责采集传感器数据、处理和分析数据,并通过无线通信将数据传输至服务器。以下是具体的软件逻辑设计:
1.电池电压采集:
a.使用ESP32的IO0引脚采集电池电压。
b.通过模拟数字转换(ADC),将采集到的模拟电压信号转换为数字信号,便于后续处理。
2.土壤湿度采集:
a.使用ESP32的IO3引脚采集土壤湿度传感器的电压。
b.通过ADC将土壤湿度传感器的模拟电压信号转换为数字信号。
3.数据处理:
a.读取并处理电池电压和土壤湿度的数字信号,转换为实际的电压值和湿度百分比。
4.数据上报:
a.使用ESP32的WiFi模块连接至无线网络。
b.通过HTTP协议,将采集到的数据上报至服务器,便于远程监控和管理。
以下是具体的软件实现代码示例:
#include <WiFi.h>
#include <HTTPClient.h>

// #define DATA_SEND_INTERVAL_MS 15 * 60 * 1000
#define DATA_SEND_INTERVAL_MS 60 * 1000

int lastDataSentTimestamp = 0;
unsigned long previousMillis = 0;
unsigned long interval = 30000;

// WiFi 网络信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// 服务器URL
const char* serverName = "http://192.168.1.236:5000/update";
const char* serverToken = "your_influx_token";

// 定义ADC引脚
const int batteryPin = 0; // IO0
const int soilMoisturePin = 3; // IO3

void sendData() {
// 采集电池电压
int batteryVoltage = analogReadMilliVolts(batteryPin)*2;
Serial.print("BAT millivolts value = ");
Serial.print(batteryVoltage);
Serial.println("mV");

// 采集土壤传感器电压
int soilMoisturePercent = analogReadMilliVolts(soilMoisturePin);
Serial.print("Soil sensor voltage = ");
Serial.print(soilMoisturePercent);
Serial.println("mV");
Serial.println("--------------");

// 创建HTTP客户端
if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(serverName);
    http.addHeader("Content-Type", "text/plain");
    http.addHeader("authorization", serverToken);
    // 创建POST数据
    String httpRequestData = "batteryVoltage=" + String(batteryVoltage) + "&soilMoisture=" + String(soilMoisturePercent);
   
   
    // 发送HTTP POST请求
    int httpResponseCode = http.POST(httpRequestData);
   
    // 打印响应结果
    if (httpResponseCode > 0) {
      String response = http.getString();
      Serial.println(httpResponseCode);
      Serial.println(response);
    } else {
      Serial.print("Error on sending POST: ");
      Serial.println(httpResponseCode);
    }
    // 结束HTTP请求
    http.end();
}
}

void setup() {
Serial.begin(115200);
//set the resolution to 12 bits (0-4096)
analogReadResolution(12);

// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
sendData();
}

void loop() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.reconnect();
    previousMillis = currentMillis;
}
if (millis() > lastDataSentTimestamp + DATA_SEND_INTERVAL_MS) {
    sendData();

    Serial.print("Millis since last measurement: ");
    Serial.println(millis() - lastDataSentTimestamp);
    lastDataSentTimestamp = millis();
}
}

服务器搭建
在电脑端进行以下操作
1. 安装python 3
2. 安装flask
   2.1 按下Win+R,输入cmd,进入命令面板
   2.2 输入"pip install flask" 安装flask
3. 在命令行中运行python代码
from flask import Flask, request, jsonify

app = Flask(__name__)

# Endpoint to handle data from Arduino
@app.route('/update', methods=['POST'])
def update():
    auth_header = request.headers.get('authorization')
    if auth_header == 'your_influx_token':
      data = request.data.decode('utf-8')
      print(f"Received data: {data}")
      # Process the data sent from Arduino here, such as storing it in a database
      return jsonify({"status": "success", "message": "Data received"}), 200
    else:
      return jsonify({"status": "error", "message": "Unauthorized"}), 401

@app.route('/')
def home():
    return "Hello from Flask server!", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)最终结果如下


结论
项目成果
通过本项目的实施,我们成功设计并实现了一套阳台植物监测系统。该系统基于ESP32微控制器、土壤湿度传感器、太阳能板和锂电池,能够实时监测阳台植物的土壤湿度,并通过无线通信实现远程数据传输和智能提醒。具体成果包括:
1.实时监测和智能提醒:
a.系统能够持续监测土壤湿度,确保植物在最佳湿度范围内生长。
b.当土壤湿度低于设定阈值时,系统能够及时向用户发送提醒,避免植物因缺水而受损。
2.节能环保设计:
a.采用太阳能板为系统供电,结合锂电池储能,实现系统的自给自足,减少对外部电源的依赖。
b.低功耗设计确保系统长时间稳定运行,进一步提升系统的实用性和环保性。
3.易于安装和使用:
a.系统设计简单,组件安装方便,用户无需专业技能即可完成设备的布置和调试。
b.直观的用户界面和易于理解的数据展示,使用户能够轻松掌握植物的生长状况。

未来展望
尽管本项目已取得显著成果,但仍有进一步改进和扩展的空间:
1.功能扩展:
a.增加温度、湿度和光照传感器,全面监测植物生长环境的各项参数,提供更科学的养护建议。
b.集成自动浇水系统,根据实时监测数据自动调整浇水量,实现更智能化的植物养护。
2.数据分析与智能化:
a.利用大数据分析和机器学习算法,对采集到的环境数据进行深入分析,预测植物的生长趋势,优化养护策略。
b.开发智能养护助手,根据历史数据和环境变化,为用户提供个性化的养护建议。
3.用户体验优化:
a.提升用户界面的设计,使其更加友好和易于操作。
b.增加数据的可视化功能,通过图表和图像展示植物生长状况,帮助用户更直观地了解植物的健康情况。

页: [1]
查看完整版本: 基于FireBeetle ESP32-C6的智能阳台植物土壤监测系统