내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
요약: 이 글에서는 사물 인터넷, 클라우드 플랫폼, MQTT, HTTP, 데이터 시각화 등의 핵심 개념을 간단하고 이해하기 쉽게 소개하며, EMQX, Flask, InfluxDB, Grafana 등의 주류 도구를 결합하여 가르칩니다. 여러 프로토콜을 지원하는 사물 인터넷 클라우드 플랫폼을 구축하는 방법을 단계별로 설명합니다. 기사는 명확한 구조와 그림, 텍스트로 구성되어 있으며, 코드는 유익하고 이해하기 쉽습니다. 독자가 IoT 클라우드 플랫폼 구축의 핵심 기술을 빠르게 익힐 수 있도록 구성되었습니다.
핵심 단어:IoT, 클라우드 플랫폼, MQTT, HTTP, 데이터 시각화, EMQX, Flask, InfluxDB, Grafana
사물 인터넷(IoT, Internet of Things)은 다양한 정보 센서, 무선 주파수 식별 기술, GPS(Global Positioning System) 등을 통해 모니터링, 연결 및 상호 작용해야 하는 모든 개체 또는 프로세스를 실시간으로 수집하는 것을 말합니다. 사물과 사물, 사물과 사람 사이의 유비쿼터스 커뮤니케이션을 실현합니다. 이를 통해 항목과 프로세스에 대한 지능적인 인식, 식별 및 관리를 달성할 수 있습니다.
IoT 시스템 아키텍처는 일반적으로 세 가지 계층으로 나뉩니다.
클라우드 플랫폼은 인터넷 기반 관련 서비스의 추가, 사용 및 제공 모델을 말하며 일반적으로 인터넷을 통해 동적으로 확장 가능하고 종종 가상화되는 리소스를 제공하는 것을 포함합니다. 클라우드 플랫폼은 IoT 애플리케이션을 위한 강력한 컴퓨팅, 스토리지 및 네트워크 리소스를 제공하여 IoT 애플리케이션 개발 및 배포 비용을 절감할 수 있습니다.
데이터 시각화란 데이터를 그래픽, 차트 등의 시각적 형태로 표시하여 사용자가 데이터를 보다 직관적으로 이해하고 데이터 이면의 패턴과 추세에 대한 통찰력을 얻을 수 있도록 돕는 것을 의미합니다.
MQTT(Message Queuing Telemetry Transport)는 저대역폭, 저전력 장치 및 네트워크용으로 설계된 경량 메시지 게시/구독 프로토콜입니다. MQTT는 사물인터넷 분야에서 널리 사용되며, 특히 리소스가 제한된 장치와 신뢰할 수 없는 네트워크 환경에 적합합니다.
HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 간에 정보를 전송하는 데 사용되는 응용 프로그램 계층 프로토콜입니다. HTTP 프로토콜은 간단하고 사용하기 쉬우며 사물 인터넷을 포함한 다양한 네트워크 애플리케이션에서 널리 사용됩니다.
EMQX는 수백만 개의 동시 연결 및 메시지 처리량을 지원하는 확장 가능한 고성능 오픈 소스 MQTT 메시지 서버입니다.
Flask는 Python으로 작성된 경량 웹 애플리케이션 프레임워크로, 배우고 사용하기 쉽고 웹 애플리케이션과 API 인터페이스를 빠르게 구축하는 데 적합합니다.
InfluxDB는 시계열 데이터 저장 및 조회를 위해 설계된 오픈소스 시계열 데이터베이스로, IoT 센서 데이터 저장, 모니터링 데이터 등에 적합합니다.
Grafana는 여러 데이터 소스를 연결하여 아름답고 강력한 대시보드를 만들고 데이터를 실시간으로 표시할 수 있는 오픈 소스 데이터 시각화 도구입니다.
이 프로젝트는 다음 기능을 달성하기 위해 MQTT 및 HTTP 프로토콜을 지원하는 IoT 클라우드 플랫폼을 구축합니다.
1. HTTP 서버 구축(Flask)
- # 导入 Flask 库
- from flask import Flask, request, jsonify
-
- # 创建 Flask 应用
- app = Flask(__name__)
-
- # 定义 HTTP 接口,接收 POST 请求
- @app.route('/data', methods=['POST'])
- def receive_data():
- # 获取请求数据
- data = request.get_json()
-
- # 数据处理逻辑,例如数据校验、格式转换等
- # ...
-
- # 将数据写入 InfluxDB (示例)
- from influxdb import InfluxDBClient
- client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
- json_body = [
- {
- "measurement": "sensor_data",
- "tags": {
- "sensor_id": data.get("sensor_id")
- },
- "fields": {
- "temperature": data.get("temperature"),
- "humidity": data.get("humidity")
- }
- }
- ]
- client.write_points(json_body)
-
- # 返回响应
- return jsonify({'message': 'Data received successfully!'}), 200
-
- # 启动 Flask 应用
- if __name__ == '__main__':
- app.run(debug=True)
코드 설명:
Flask
프레임워크는 HTTP 서버를 생성하고 정의합니다./data
인터페이스는 POST 요청을 수신합니다.request.get_json()
HTTP 요청에서 JSON 데이터를 가져옵니다.InfluxDBClient
InfluxDB 데이터베이스에 연결하고 데이터베이스에 데이터를 씁니다.2. MQTT 메시지 처리(Python)
- # 导入必要的库
- import paho.mqtt.client as mqtt
- from influxdb import InfluxDBClient
- import json
-
- # MQTT Broker 配置
- MQTT_BROKER = "localhost"
- MQTT_PORT = 1883
- MQTT_TOPIC = "sensor/data"
-
- # InfluxDB 配置
- INFLUXDB_HOST = "localhost"
- INFLUXDB_PORT = 8086
- INFLUXDB_USER = "user"
- INFLUXDB_PASSWORD = "password"
- INFLUXDB_DATABASE = "iot_data"
-
- # 创建 InfluxDB 客户端
- influxdb_client = InfluxDBClient(
- host=INFLUXDB_HOST,
- port=INFLUXDB_PORT,
- username=INFLUXDB_USER,
- password=INFLUXDB_PASSWORD,
- database=INFLUXDB_DATABASE
- )
-
- # 连接到 MQTT Broker
- def on_connect(client, userdata, flags, rc):
- print("Connected to MQTT Broker with result code " + str(rc))
- client.subscribe(MQTT_TOPIC)
-
- # 接收 MQTT 消息
- def on_message(client, userdata, msg):
- # 解析数据
- data = json.loads(msg.payload.decode())
-
- # 构建 InfluxDB 数据点
- influxdb_data = [
- {
- "measurement": "sensor_data",
- "tags": {
- "sensor_id": data.get("sensor_id"),
- },
- "fields": {
- "temperature": data.get("temperature"),
- "humidity": data.get("humidity"),
- }
- }
- ]
-
- # 写入 InfluxDB
- influxdb_client.write_points(influxdb_data)
- print("Data written to InfluxDB: " + str(influxdb_data))
-
- # 创建 MQTT 客户端
- mqtt_client = mqtt.Client()
- mqtt_client.on_connect = on_connect
- mqtt_client.on_message = on_message
- mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
-
- # 启动 MQTT 客户端
- mqtt_client.loop_start()
-
- # 保持程序运行
- while True:
- pass
코드 설명:
paho.mqtt.client
MQTT 브로커에 연결하고 지정된 주제를 구독합니다.json.loads()
메시지 내용을 구문 분석합니다.influxdb_client.write_points()
InfluxDB 데이터베이스에 데이터를 씁니다.3. 데이터 시각화(Grafana)
예제 Grafana 쿼리 문:
SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h
쿼리는 다음에서 시작됩니다.sensor_data
측정 마지막 시간의 온도, 습도 데이터를 조회합니다.
이 프로젝트는 Flask, EMQX, InfluxDB 및 Grafana와 같은 도구를 결합하여 MQTT 및 HTTP 프로토콜을 지원하고 데이터 수집, 저장 및 시각적 표시를 실현하는 IoT 클라우드 플랫폼을 구축합니다. 플랫폼은 더 많은 유형의 장치와 프로토콜 액세스를 지원하도록 유연하게 확장할 수 있으며 실제 필요에 따라 기능을 사용자 정의할 수 있습니다.
알아채다:
paho-mqtt
,influxdb
,flask
기다리다.구체적인 코드나 아이디어를 원하시면 개인 메시지를 보내주세요! ! !