>백엔드 개발 >PHP 튜토리얼 >PHP와 MQTT를 활용한 실시간 수질 모니터링

PHP와 MQTT를 활용한 실시간 수질 모니터링

WBOY
WBOY원래의
2023-06-28 14:05:361607검색

사람들이 건강과 환경 보호에 점점 더 많은 관심을 기울이면서 수질에 대한 요구 사항도 점점 더 높아지고 있습니다. 실시간 수질 모니터링을 통해 수질상태를 적시에 파악하고 국민의 식수원과 생활수원의 안전을 확보할 수 있습니다. 이 기사에서는 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에서는 phpMQTT 클래스 라이브러리를 사용하여 MQTT 통신을 구현할 수 있습니다. 이는 간단하고 사용하기 쉬운 PHP 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 브로커에 연결하고 게시() 메서드를 사용하여 메시지를 게시합니다.

3. 실시간 수질 모니터링

실시간 수질 모니터링에서는 수질 데이터를 수집하여 MQTT Broker로 보내야 합니다. 데이터 수집을 시뮬레이션하기 위해 난수 생성 기능을 사용하여 수온, 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 클래스 라이브러리에서 제공하는 게시() 메소드를 사용할 수 있습니다.

$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 루프를 사용하여 무작위 수질 데이터를 지속적으로 생성하고 게시() 메서드를 통해 water_quality 주제에 게시합니다.

마지막으로 MQTT를 통해 주제를 구독하여 수질 데이터를 수신하고 처리할 수 있습니다. PHP에서는 phpMQTT 클래스 라이브러리에서 제공하는 subscribe() 메서드를 사용할 수 있습니다.

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.