>  기사  >  백엔드 개발  >  PHP와 MQTT를 사용하여 실시간 일기예보 애플리케이션을 만드는 방법

PHP와 MQTT를 사용하여 실시간 일기예보 애플리케이션을 만드는 방법

WBOY
WBOY원래의
2023-07-08 08:33:061545검색

PHP와 MQTT를 사용하여 실시간 일기예보 애플리케이션을 만드는 방법

소개:
날씨 예보는 우리 삶에 매우 중요한 서비스입니다. 사물 인터넷과 인스턴트 메시징 기술의 발전으로 우리는 MQTT(메시지)를 사용할 수 있습니다. Queuing Telemetry Transport) 프로토콜을 사용하여 실시간 날씨 데이터를 얻습니다. 이 기사에서는 PHP와 MQTT를 사용하여 실시간 일기예보 애플리케이션을 만드는 방법을 소개합니다. 이 애플리케이션을 통해 우리는 특정 기상 관측소 채널을 구독하고 온도, 습도, 풍향 등의 데이터를 실시간으로 얻을 수 있습니다.

제목:

1단계: MQTT 서버 설치
먼저 기상 관측소에 연결하고 실시간 데이터를 얻을 수 있도록 MQTT 서버를 설치해야 합니다. Mosquitto, EMQ X 또는 HiveMQ 등과 같이 선택할 수 있는 MQTT 서버가 많이 있습니다. 이 기사에서는 널리 사용되는 무료 오픈 소스 MQTT 서버인 Mosquitto를 사용하겠습니다. Mosquitto 공식 웹사이트에서 다운로드하여 설치할 수 있습니다.

2단계: 일기 예보 애플리케이션 만들기
다음으로 날씨 데이터를 구독하고 애플리케이션에 표시하는 PHP 스크립트를 만들어야 합니다. 우리는 phpMQTT와 같은 널리 사용되는 PHP MQTT 클라이언트 라이브러리를 사용할 것입니다.

먼저 GitHub에서 phpMQTT 라이브러리를 다운로드하고 다음 명령을 사용하여 프로젝트로 가져옵니다.

git clone https://github.com/bluerhinos/phpMQTT.git

다음으로 index.php 파일을 만들고 phpMQTT 라이브러리를 가져옵니다.

<?php
require("phpMQTT.php");

그런 다음 MQTT 클라이언트 인스턴스를 만들고 연결합니다. MQTT 서버로:

<?php
require("phpMQTT.php");

$server = "localhost";  // MQTT服务器的主机名或IP地址
$port = 1883;  // MQTT服务器的端口号
$client_id = "weather_app";  // 定义客户端ID

$mqtt = new phpMQTT($server, $port, $client_id);
if ($mqtt->connect()) {
    echo "Connected to MQTT server.
";
    // 订阅气象站频道
    $mqtt->subscribe("weather_station/#", 0);
    
    // 持续循环以接收来自气象站的消息
    while ($mqtt->proc()) {
    }
} else {
    echo "Failed to connect to MQTT server.
";
}
$mqtt->close();
?>

위 코드에서는 MQTT 서버에 연결하고 "weather_station/#" 채널을 구독합니다. 이는 "weather_station/"으로 시작하는 모든 메시지를 수신한다는 의미입니다. 이 채널을 실제 기상 관측소의 채널로 바꿀 수 있습니다.

그런 다음 콜백 함수에서 수신된 메시지를 처리해야 합니다. 이 함수에서는 날씨 데이터를 구문 분석하고 표시할 수 있습니다.

<?php
require("phpMQTT.php");

// ...

function messageReceived($topic, $payload) {
    // 接收到消息时调用此函数
    $data = json_decode($payload, true);
    
    // 解析天气数据
    $temperature = $data['temperature'];
    $humidity = $data['humidity'];
    $wind_direction = $data['wind_direction'];
    
    // 显示天气数据
    echo "Temperature: ".$temperature."°C
";
    echo "Humidity: ".$humidity."%
";
    echo "Wind Direction: ".$wind_direction."
";
}

$mqtt->debug = true;
$mqtt->onMessage('messageReceived');

위 코드에서는 수신된 JSON 문자열을 연관 배열로 구문 분석하고 여기에서 온도, 습도 및 풍향 데이터를 추출합니다. 그런 다음 화면에 데이터를 표시합니다.

3단계: 기상 관측소 설정
마지막으로 기상 관측소를 설정하고 실시간 날씨 데이터를 게시해야 합니다. MQTT 프로토콜과 호환되는 모든 하드웨어 장치를 사용하여 데이터를 보낼 수 있습니다. 일반적인 옵션은 ESP8266 칩과 DHT11 센서를 사용하는 것입니다. 여기서는 특정 하드웨어 설정에 대해 다루지 않지만 필요에 따라 선택하고 구성할 수 있습니다.

MQTT 서버에 날씨 데이터를 게시하는 코드 예제는 다음과 같습니다.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// 定义WiFi连接信息
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";

// 定义MQTT服务器信息
const char* mqtt_server = "mqtt_server_ip";
const char* mqtt_topic = "weather_station";

WiFiClient espClient;
PubSubClient mqttClient(espClient);

void setup() {
  // 连接WiFi
  WiFi.begin(ssid, password);
  
  // 连接MQTT服务器
  mqttClient.setServer(mqtt_server, 1883);
  
  // 设置回调函数
  mqttClient.setCallback(callback);
  
  // 读取传感器数据并发布
  float temperature = readTemperature();
  float humidity = readHumidity();
  String windDirection = readWindDirection();
  publishData(temperature, humidity, windDirection);
}

void loop() {
  // 接收MQTT消息
  mqttClient.loop();
}

void callback(char* topic, byte* payload, unsigned int length) {
  // 不处理接收消息的回调函数
  // 可以添加自己的逻辑以处理接收到的消息
}

void publishData(float temperature, float humidity, String windDirection) {
  // 构造JSON字符串
  String json = "{"temperature":" + String(temperature) + ",";
  json += ""humidity":" + String(humidity) + ",";
  json += ""wind_direction":"" + windDirection + ""}";
  
  // 发布消息到MQTT服务器
  mqttClient.publish(mqtt_topic, json.c_str());
}

위 코드에서는 먼저 WiFi 네트워크에 연결한 다음 MQTT 서버에 연결합니다. 그런 다음 센서 데이터(예: 온도, 습도, 풍향)를 읽고 이를 JSON 문자열로 캡슐화합니다. 마지막으로 MQTT 서버의 "weather_station" 채널에 메시지를 게시합니다.

결론:
PHP와 MQTT를 사용하면 실시간 일기예보 애플리케이션을 쉽게 만들 수 있습니다. 날씨 데이터를 구독하고 앱에 실시간 온도, 습도, 풍향 정보를 표시할 수 있습니다. 이 앱은 현재 기상 상황을 더 잘 이해하고 그에 따라 결정을 내리는 데 도움이 됩니다.

이 문서에 제공된 코드 예제는 기본 프레임워크이며 특정 요구 사항에 맞게 확장 및 수정될 수 있습니다. 이 애플리케이션을 사용하려면 하드웨어 장치와 MQTT 서버 설정을 조정해야 합니다.

위 내용은 PHP와 MQTT를 사용하여 실시간 일기예보 애플리케이션을 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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