ホームページ >バックエンド開発 >PHPチュートリアル >PHP と MQTT を使用したリアルタイムの水質監視

PHP と MQTT を使用したリアルタイムの水質監視

WBOY
WBOYオリジナル
2023-06-28 14:05:361627ブラウズ

人々の健康と環境保護への関心が高まるにつれ、水質に対する要求もますます高くなっています。リアルタイムの水質モニタリングにより、水質状況をタイムリーに把握し、人々の飲料水や生活用水源の安全を確保できます。この記事では、PHP と MQTT テクノロジーを使用してリアルタイムの水質監視を実現する方法を紹介します。

1. MQTT の概要

MQTT (Message Queuing Telemetry Transport) は、主に IoT デバイス間の即時通信に使用される軽量の通信プロトコルです。 MQTT プロトコルはパブリッシュ/サブスクライブ (Publish/Subscribe) モードを採用し、ブローカーを介したメッセージの配布とルーティングを実装します。簡単に言うと、パブリッシャーはすべてのサブスクライバーにメッセージをパブリッシュし、サブスクライバーは関心のあるトピックをサブスクライブすることでメッセージを受信します。

MQTT プロトコルには次の特徴があります。

  1. 軽量: プロトコルはシンプルでオーバーヘッドが低く、小型デバイス間の通信に適しています。
  2. 高信頼性: メッセージ送信の正確性と信頼性を保証します。
  3. 柔軟なルーティング: 実際の状況に応じてメッセージをルーティングできます。
  4. セキュリティ: SSL/TLS 暗号化送信をサポートし、メッセージ送信のセキュリティを保護します。

2. PHP は MQTT 通信を実装します

MQTT プロトコルの実装には、Paho MQTT、Mosquitto などの特定のクライアント ライブラリを使用する必要があります。 PHP では、シンプルで使いやすい PHP MQTT クライアント ライブラリである phpMQTT クラス ライブラリを使用して MQTT 通信を実装できます。

phpMQTT を使用する手順は次のとおりです:

  1. phpMQTT クラス ライブラリをインストールします:
composer require bluerhinos/phpmqtt
  1. クラス ライブラリを使用します:
require("phpMQTT.php");

$mqtt = new phpMQTT("test.mosquitto.org", 1883, "ClientID".rand());
if ($mqtt->connect()) {
    $mqtt->publish("Topic", "Hello World! QoS 0", 0);
    $mqtt->close();
} else {
    echo "Failed to connect to MQTT broker";
}

上記のコードでは、new キーワードを使用して phpMQTT オブジェクトを作成し、ブローカーのアドレスとポート番号、およびランダムに生成された ClientID を渡しました。次に、connect() メソッドを使用して MQTT ブローカーに接続し、publish() メソッドを使用してメッセージをパブリッシュします。

3. リアルタイムの水質モニタリング

リアルタイムの水質モニタリングでは、水質データを収集し、そのデータを MQTT ブローカーに送信する必要があります。データ収集をシミュレートするために、乱数生成関数を使用して、水温、pH 値、溶存酸素などの水質指標を生成できます。

以下は、ランダムな水質データを生成する PHP 関数です:

function generateWaterData() {
    $temp = rand(20, 30);
    $ph = (float)rand(60, 80) / 10;
    $do = rand(5, 11);
    return array(
        "temperature" => $temp,
        "pH" => $ph,
        "dissolved_oxygen" => $do
    );
}

水質データを生成した後、データを MQTT ブローカーに送信する必要があります。これを実現するには、phpMQTT クラス ライブラリが提供する publish() メソッドを使用します。

$mqtt = new phpMQTT("test.mosquitto.org", 1883, "ClientID".rand());

if ($mqtt->connect()) {
    while (true) {
        $waterData = generateWaterData();
        $mqtt->publish("water_quality", json_encode($waterData), 0);
        sleep(5);
    }
    $mqtt->close();
} else {
    echo "Failed to connect to MQTT broker";
}

上記のコードでは、最初に mqtt オブジェクトを作成し、MQTT ブローカーに接続します。次に、while ループを使用してランダムな水質データを継続的に生成し、publish() メソッドを通じて水質トピックに公開します。

最後に、MQTT を通じてトピックをサブスクライブして、水質データを受信して​​処理できます。 PHP では、phpMQTT クラス ライブラリによって提供される submit() メソッドを使用できます。

$mqtt = new phpMQTT("test.mosquitto.org", 1883, "ClientID".rand());

if ($mqtt->connect()) {
    $topics["water_quality"] = array("qos" => 0, "function" => "processWaterData");
    $mqtt->subscribe($topics, 0);
    while ($mqtt->proc()) {
        // 运行代码
    }
    $mqtt->close();
} else {
    echo "Failed to connect to MQTT broker";
}

function processWaterData($topic, $msg) {
    $waterData = json_decode($msg);
    // 处理水质数据
}

上記のコードでは、最初に mqtt オブジェクトを作成し、MQTT ブローカーに接続します。次に、subscribe() メソッドを使用して Water_quality トピックをサブスクライブし、メッセージ処理関数 processWaterData を指定しました。最後に、proc() メソッドを使用して接続を維持し、いつでも MQTT メッセージの受信を待ちます。受信した水質データを processWaterData() 関数で処理することで、リアルタイムの水質監視の目標を達成できます。

概要

この記事では、PHP と MQTT テクノロジを使用してリアルタイムの水質監視を実現する方法を紹介します。 phpMQTT クラス ライブラリを通じて、MQTT ブローカーに簡単に接続し、データ パブリッシュおよびサブスクリプション機能を実装できます。 MQTT プロトコルをリアルタイムの水質監視に適用することで、データ送信のリアルタイム性と信頼性が向上するだけでなく、水質状況をタイムリーに把握し、人々の飲料水の安全性を確保することもできます。

以上がPHP と MQTT を使用したリアルタイムの水質監視の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。