当前位置: 首页 > news >正文

17网站一起做网店下载自动发卡网站建设

17网站一起做网店下载,自动发卡网站建设,巴中企业网站建设,vuejs仿WordPress数据流向: - ESP32 采集温湿度数据后,通过 HTTP POST 请求将数据发送到服务器上的 PHP 文件 - PHP 文件save_data_improved.php接收数据并将其插入到 MySQL 数据库(esp32_data)的 sensor_data表中 - 可以通过 phpMyAdmin 查看和管理数据库中的 sensor_da…

数据流向

- ESP32 采集温湿度数据后,通过 HTTP POST 请求将数据发送到服务器上的 PHP 文件

- PHP 文件save_data_improved.php接收数据并将其插入到 MySQL 数据库(esp32_data)的 sensor_data表中

- 可以通过 phpMyAdmin 查看和管理数据库中的 sensor_data 表数据

文件准备

PHP与MySQL交互
在这里插入图片描述

ino(esp32程序文件)
在这里插入图片描述

ESP32将DHT11温湿度传感器采集的数据上传到XAMPP的MySQL数据库

先打开XAMPP

请添加图片描述

服务器端配置

1. 使用phpMyAdmin(查看MySQL)

phpMyAdmin是一个流行的Web界面工具,用于管理MySQL数据库。它通常随XAMPP一起安装。

  • 打开浏览器,输入 http://localhost/phpmyadminhttp://127.0.0.1/phpmyadmin

  • 输入你的MySQL用户名和密码(默认情况下,XAMPP的MySQL用户名是root,没有密码)。

  • 登录后,你可以看到所有的数据库和表,并进行各种操作。

    在XAMPP中,网站的根目录通常是 htdocs 文件夹。在你的例子中,你已经在 htdocs 目录下创建了一个名为 esp32_data 的文件夹,并在其中创建了一个 save_data_improved.php 文件。

    这是一个很好的做法,因为它可以帮助你组织和管理你的项目文件。当你在浏览器的地址栏中输入 http://localhost/esp32_data/save_data_improved.php 时,Apache 服务器会加载并执行这个 PHP 文件

  1. 创建MySQL数据库

    在 XAMPP 环境下,MySQL 的数据库文件默认存储在 D:\XAMPP\mysql\data 目录下。当你创建一个名为 esp32_data 的数据库时,MySQL 会在该目录下自动创建一个同名的文件夹(即 esp32_data),用于存放该数据库的所有表文件。

    • 在MySQL中创建一个数据库,例如esp32_data

    • 创建一个表用于存储温湿度数据:

           CREATE TABLE sensor_data (id INT AUTO_INCREMENT PRIMARY KEY,temperature FLOAT,humidity FLOAT,timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
      

在这里插入图片描述

D:\XAMPP\mysql\data 目录下看到 esp32_data 文件夹

在这里插入图片描述

2. 自定义PHP脚本

你也可以编写自己的PHP脚本来连接MySQL数据库,并在浏览器中显示数据。(save_data_improved.php)

步骤:
  1. 创建PHP文件

    • 在XAMPP的htdocs文件夹中创建一个新的PHP文件。

在这里插入图片描述

  1. 编写PHP代码

    <?php
    // 数据库配置
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "esp32_data";// 设置JSON响应头
    header('Content-Type: application/json');// 创建数据库连接
    $conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
    if ($conn->connect_error) {// 记录错误日志(实际应用中)// error_log("数据库连接失败: " . $conn->connect_error);die(json_encode(array('status' => 'error', 'message' => '数据库连接失败: ' . $conn->connect_error)));
    }// 检查是否接收到POST数据
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {// 检查温度和湿度参数是否存在if (isset($_POST['temperature']) && isset($_POST['humidity'])) {// 验证是否为有效数字if (is_numeric($_POST['temperature']) && is_numeric($_POST['humidity'])) {$temperature = floatval($_POST['temperature']);$humidity = floatval($_POST['humidity']);// 验证数据范围if ($temperature >= -50 && $temperature <= 150 && $humidity >= 0 && $humidity <= 100) {// 准备参数化查询$stmt = $conn->prepare("INSERT INTO sensor_data (temperature, humidity, timestamp) VALUES (?, ?, CURRENT_TIMESTAMP)");if (!$stmt) {echo json_encode(array('status' => 'error', 'message' => '预处理语句失败: ' . $conn->error));$conn->close();exit;}// 绑定参数$stmt->bind_param("dd", $temperature, $humidity); // 'dd'表示两个double类型参数// 执行查询if ($stmt->execute() === TRUE) {echo json_encode(array('status' => 'success', 'message' => '新记录插入成功', 'data' => array('temperature' => $temperature, 'humidity' => $humidity)));} else {echo json_encode(array('status' => 'error', 'message' => '插入记录失败: ' . $stmt->error));}$stmt->close();} else {echo json_encode(array('status' => 'error', 'message' => '数据超出合理范围: 温度应在-50到150之间,湿度应在0到100之间'));}} else {echo json_encode(array('status' => 'error', 'message' => '温度和湿度必须是数字'));}} else {echo json_encode(array('status' => 'error', 'message' => '缺少必要的POST参数: temperature或humidity'));}
    } else {echo json_encode(array('status' => 'error', 'message' => '请使用POST方法发送数据'));
    }// 关闭连接
    $conn->close();
  2. 保存并测试

    • 保存文件后,打开浏览器,输入 http://localhost/esp32_data/save_data_improved.php (这个是php调试内容打印)

在这里插入图片描述

编写Arduino代码

将DHT11温湿度传感器采集的数据上传到MySQL数据库。以下是具体实现步骤:

一、硬件连接

  1. DHT11传感器连接
    • DHT11的VCC引脚连接到ESP32的3.3V引脚。
    • DHT11的GND引脚连接到ESP32的GND引脚。
    • DHT11的DATA引脚连接到ESP32的数字引脚(例如GPIO4)。

二、安装必要的库

在Arduino IDE中,需要安装以下库:
在这里插入图片描述

  1. DHT sensor library

    • 打开Arduino IDE,点击“工具” > “管理库”,搜索并安装“DHT sensor library”。
  2. WiFi.h

    • ESP32自带的库,无需额外安装。
  3. HTTPClient.h

    • ESP32自带的库,用于发送HTTP请求。

三、编写代码

以下是完整的代码示例,用于读取DHT11温湿度数据并通过HTTP POST请求上传到服务器:

#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>// WiFi配置
const char* ssid = "******";     // 替换为你的WiFi名称
const char* password = "*****";     // 替换为你的WiFi密码
const char* serverUrl = "http://192.168.2.232/esp32_data/save_data_improved.php"; // 本地XAMPP服务器地址 (使用改进版PHP文件)// DHT传感器配置
#define DHTPIN 4          // DHT11传感器连接到GPIO4
#define DHTTYPE DHT11     // 使用DHT11传感器
DHT dht(DHTPIN, DHTTYPE);void setup() {Serial.begin(115200);dht.begin();// 连接WiFiWiFi.begin(ssid, password);unsigned long startTime = millis();int connectionTimeout = 10000; // 10秒超时while (WiFi.status() != WL_CONNECTED) {if (millis() - startTime > connectionTimeout) {Serial.println("WiFi连接超时!");return;}delay(500);Serial.print(".");}Serial.println("WiFi连接成功");Serial.print("IP地址: ");Serial.println(WiFi.localIP());
}void loop() {// 读取传感器数据float humidity = dht.readHumidity();float temperature = dht.readTemperature();// 检查传感器读取是否成功if (isnan(humidity) || isnan(temperature)) {Serial.println("无法读取传感器数据!");delay(2000);return;}// 打印传感器数据Serial.print("湿度: ");Serial.print(humidity);Serial.println("%");Serial.print("温度: ");Serial.print(temperature);Serial.println("°C");// 发送数据到服务器if (WiFi.status() == WL_CONNECTED) {HTTPClient http;int maxRetries = 3;int retryCount = 0;int httpResponseCode = 0;while (retryCount < maxRetries) {Serial.print("尝试连接到服务器: ");Serial.println(serverUrl);if (http.begin(serverUrl)) {Serial.println("HTTP连接初始化成功");// 确保正确设置Content-Type头http.addHeader("Content-Type", "application/x-www-form-urlencoded");Serial.println("Content-Type头已设置");// 构造POST请求的数据// 注意:不要对=和&字符进行编码,它们是URL参数的必要分隔符String postData = "temperature=" + String(temperature) + "&humidity=" + String(humidity);// 只对空格和+号进行编码postData.replace(" ", "%20");postData.replace("+", "%2B");Serial.print("发送的POST数据: ");Serial.println(postData);Serial.print("数据长度: ");Serial.println(postData.length());httpResponseCode = http.POST(postData);Serial.print("发送POST请求后,响应代码: ");Serial.println(httpResponseCode);if (httpResponseCode > 0) {Serial.print("HTTP响应代码: ");Serial.println(httpResponseCode);if (httpResponseCode == HTTP_CODE_OK) {Serial.println("数据发送成功!");// 输出服务器响应内容String response = http.getString();Serial.print("服务器响应: ");Serial.println(response);} else {Serial.print("服务器返回非200响应: ");Serial.println(httpResponseCode);}break; // 成功,退出重试循环} else {Serial.print("请求失败,错误代码: ");Serial.println(http.errorToString(httpResponseCode).c_str());retryCount++;if (retryCount < maxRetries) {Serial.print("正在重试 (" + String(retryCount) + "/" + String(maxRetries) + ")...");delay(2000); // 等待2秒后重试}}http.end();} else {Serial.println("无法连接到服务器");retryCount++;if (retryCount < maxRetries) {Serial.print("正在重试 (" + String(retryCount) + "/" + String(maxRetries) + ")...");delay(2000); // 等待2秒后重试}}}if (retryCount >= maxRetries) {Serial.println("超过最大重试次数,请求失败");}} else {Serial.println("WiFi未连接,无法发送数据");}delay(60000); // 每1分钟发送一次数据
}

四、代码说明

  1. 初始化 ESP32 开发板
  2. 连接到指定的 WiFi 网络
  3. 读取 DHT11 传感器的温湿度数据
  4. 将采集到的数据通过 HTTP POST 请求发送到本地 XAMPP 服务器
  5. 每 1 分钟发送一次数据
  6. 包含连接重试机制和错误处理

五、注意事项

  1. Wi-Fi设置

    • 确保ESP32连接的Wi-Fi网络与服务器在同一局域网内,或者服务器有公网IP地址。
  2. 服务器地址

    • 如果服务器在本地运行,可以使用"http://192.168.2.232/esp32_data/save_data_improved.php";如果服务器在其他设备上,需替换为对应的IP地址或域名。(因为服务器在电脑本地,esp32和电脑连在同一个局域网,不能使用localhost,要用电脑的IP地址)

在这里插入图片描述

  1. 安全性

    • 在生产环境中,建议使用HTTPS加密通信,避免数据传输被窃听。
  2. 调试

    • 通过串口监视器查看ESP32的输出日志,确保数据读取和发送正常。

在这里插入图片描述


六、总结

通过以上步骤,你可以实现ESP32通过Arduino程序读取DHT11温湿度数据,并将其上传到MySQL数据库。如果遇到问题,可以检查硬件连接、Wi-Fi设置或服务器端代码。

在这里插入图片描述

要删除表中的所有行,可以使用以下SQL语句:

DELETE FROM sensor_data;

这条命令会删除sensor_data表中的所有数据,但不会删除表本身。如果你确实希望执行这个操作,请确保已经备份了重要数据,并且理解此操作的后果。

注意事项

  • 确保你的MySQL服务正在运行。你可以通过XAMPP控制面板启动或停止MySQL服务。
  • 根据你的实际数据库和表结构调整PHP代码中的变量和SQL查询。
  • 为了安全起见,避免在公共网络上使用默认的用户名和密码。最好为你的MySQL用户设置强密码。
    通过以上方法,你可以在浏览器中管理和访问MySQL数据库。
http://www.dtcms.com/a/489978.html

相关文章:

  • PHP 类型比较
  • oracle:To_char
  • MySQL 数据库核心操作全解析:从创建到备份与连接管理
  • 环境函数 SYS_CONTEXT 在 DM8 与 Oracle 中的差异
  • 长春怎么做网站重庆网站建设aiyom
  • Linux中的管道与重定向:深入理解两者的本质区别
  • 上传OSS服务器图片文件视频(使用elemenplus上传组件)
  • 全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布
  • 【Kubernetes】常见面试题汇总(二十五)
  • 阿里云渠道商:哪些方法能给服务器加速?
  • 华为USG 6320之配置外网访问服务器NAT映射和NAT回流
  • 网站开发业务介绍深圳网站搭建找哪里
  • 常见的网站模板类型有哪些,新手该如何选择最合适的?
  • 【Linux】基础IO(一)Linux 文件操作从入门到实践:系统调用、文件描述符、重定向,为自定义Shell添加重定向
  • Docker 深度解析:从虚拟化到新一代应用构建、运行与交付
  • 企业网站建设网站有哪些建企业网站用什么源码
  • 复制了一个vue的项目然后再这个基础上修改。可是通过npm run dev运行之前的老项目,发现运行的竟然是拷贝后的项目。为什么会这样?
  • 【Prisma】Prisma 命令大全(Node / NestJS 通用)
  • 十月连环效应:宏观叙事与链上机会的临界点
  • 第六部分:VTK进阶(第161章 多渲染Pass组合)
  • 三相变流器矢量控制及参数设计系列(2):PWM原理
  • 网络层IP协议详解:互联网的灵魂所在
  • 深圳网站公司推广平台wordpress网站统计
  • 数据结构4:线性表3-链式存储的线性表
  • 如何理解随机过程中“样本空间”的概念
  • 最新机器人顶会IROS 2025的award paper 深入分析
  • 做一个介绍网站多少钱手机上怎么制作网站
  • 汽车存储技术的未来在何方?
  • 医院网站加快建设品牌设计工作室
  • 学校网站开发企业中征码查询入口