IT评测·应用市场-qidao123.com技术社区

标题: 利用PHP和MQTT构建高效的物联网数据转发服务器流程 [打印本页]

作者: 鼠扑    时间: 2024-11-15 22:03
标题: 利用PHP和MQTT构建高效的物联网数据转发服务器流程
一、项目概述

项目目的和用途

本项目旨在搭建一个基于PHP的物联网服务器,能够接收来自各种传感器的数据,并通过MQTT协议将数据转发到其他装备或服务。该系统实用于智能家居、环境监测等场景,能够实现实时数据监控和长途控制。
技术栈关键词


二、系统架构

系统架构计划

本项目的系统架构主要由以下几个部分组成:
选择的硬件和技术栈


三、环境搭建和留意事项

环境搭建

在Linux服务器上搭建物联网服务器的步骤如下:
留意事项


四、代码实现过程

功能模块实现

根据系统架构,逐步实现各个功能模块。
1. 传感器模块代码

利用Arduino IDE编写ESP8266/ESP32的代码,采集温湿度数据并发送到物联网服务器。
  1. #include <ESP8266WiFi.h>
  2. #include <DHT.h>
  3. #define DHTPIN 2
  4. #define DHTTYPE DHT11
  5. DHT dht(DHTPIN, DHTTYPE);
  6. const char* ssid = "your_SSID";
  7. const char* password = "your_PASSWORD";
  8. const char* server = "http://your_server_ip/data.php";
  9. void setup() {
  10.     Serial.begin(115200);
  11.     dht.begin();
  12.     WiFi.begin(ssid, password);
  13. }
  14. void loop() {
  15.     if (WiFi.status() == WL_CONNECTED) {
  16.         float h = dht.readHumidity();
  17.         float t = dht.readTemperature();
  18.         if (!isnan(h) && !isnan(t)) {
  19.             String data = "temperature=" + String(t) + "&humidity=" + String(h);
  20.             WiFiClient client;
  21.             if (client.connect(server, 80)) {
  22.                 client.print("POST /data.php HTTP/1.1\r\n");
  23.                 client.print("Host: ");
  24.                 client.print(server);
  25.                 client.print("\r\n");
  26.                 client.print("Content-Type: application/x-www-form-urlencoded\r\n");
  27.                 client.print("Content-Length: ");
  28.                 client.print(data.length());
  29.                 client.print("\r\n\r\n");
  30.                 client.print(data);
  31.                 client.stop();
  32.             }
  33.         }
  34.     }
  35.     delay(2000); // 每2秒读取一次数据
  36. }
复制代码
2. 物联网服务器代码

在Linux服务器上,我们需要创建一个PHP脚本来接收传感器数据并将其存储到MySQL数据库,同时将数据转发到MQTT Broker。
2.1 创建数据库和表

首先,我们需要在MySQL中创建一个数据库和表来存储温湿度数据。
  1. CREATE DATABASE iot_data;
  2. USE iot_data;
  3. CREATE TABLE sensor_data (
  4.     id INT AUTO_INCREMENT PRIMARY KEY,
  5.     temperature FLOAT NOT NULL,
  6.     humidity FLOAT NOT NULL,
  7.     created\_at TIMESTAMP DEFAULT CURRENT\_TIMESTAMP
  8. );
复制代码
2.2 PHP脚本(data.php)

在Web服务器的根目次下创建一个名为data.php的文件,内容如下:
  1. <?php
  2. require 'vendor/autoload.php'; // 引入Composer自动加载文件
  3. use PhpMqtt\Client\MqttClient;
  4. use PhpMqtt\Client\ConnectionSettings;
  5. // 数据库连接
  6. $servername = "localhost";
  7. $username = "your_db_username";
  8. $password = "your_db_password";
  9. $dbname = "iot_data";
  10. $conn = new mysqli($servername, $username, $password, $dbname);
  11. if ($conn->connect_error) {
  12.     die("Connection failed: " . $conn->connect_error);
  13. }
  14. // 获取POST数据
  15. $temperature = $_POST['temperature'];
  16. $humidity = $_POST['humidity'];
  17. // 插入数据到数据库
  18. $sql = "INSERT INTO sensor_data (temperature, humidity) VALUES ('$temperature', '$humidity')";
  19. if ($conn->query($sql) === TRUE) {
  20.     echo "New record created successfully";
  21. } else {
  22.     echo "Error: " . $sql . "<br>" . $conn->error;
  23. }
  24. // MQTT配置
  25. $server = "your_mqtt_broker_ip"; // MQTT Broker地址
  26. $clientId = "php-mqtt-client";
  27. $mqtt = new MqttClient($server, 1883, $clientId);
  28. $settings = (new ConnectionSettings())->setUsername('your_mqtt_username')->setPassword('your_mqtt_password');
  29. try {
  30.     $mqtt->connect($settings);
  31.     // 发布温湿度数据到MQTT主题
  32.     $mqtt->publish('sensor/temperature', $temperature, 0);
  33.     $mqtt->publish('sensor/humidity', $humidity, 0);
  34.     $mqtt->disconnect();
  35. } catch (Exception $e) {
  36.     echo "MQTT Error: " . $e->getMessage();
  37. }
  38. $conn->close();
  39. ?>
复制代码
3. 测试和验证

五、项目总结

项目主要功能

本项目成功搭建了一个基于PHP的物联网服务器,能够实现以下功能:

实现过程总结



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4