Partage de technologie

Création d'une plate-forme cloud IoT multiprotocole basée sur EMQX Flask InfluxDB Grafana : accès aux appareils MQTT/HTTP et processus de visualisation des données (avec exemples de code)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Résumé: Cet article présente des concepts de base tels que l'Internet des objets, la plate-forme cloud, MQTT, HTTP et la visualisation des données d'une manière simple et facile à comprendre. Il combine également des outils traditionnels tels que EMQX, Flask, InfluxDB et Grafana pour enseigner. vous explique étape par étape comment créer une plate-forme cloud Internet des objets prenant en charge plusieurs protocoles. L'article a une structure, des images et des textes clairs, et le code est informatif et facile à comprendre. Il est conçu pour aider les lecteurs à maîtriser rapidement la technologie de base de la création d'une plate-forme cloud IoT.

Mots clés:IoT, plateforme cloud, MQTT, HTTP, visualisation de données, EMQX, Flask, InfluxDB, Grafana


1. Connaissance de base de l'Internet des objets

1.1 Présentation de l'Internet des objets

L'Internet des objets (IoT, Internet of Things) fait référence à la collecte en temps réel de tout objet ou processus qui doit être surveillé, connecté et interagi via divers capteurs d'informations, la technologie d'identification par radiofréquence, les systèmes de positionnement global, etc. pour réaliser la communication omniprésente entre les choses et les choses, et entre les choses et les personnes, nous pouvons parvenir à une perception, une identification et une gestion intelligentes des éléments et des processus.

1.2 Architecture IoT

L'architecture du système IoT est généralement divisée en trois couches :

  • Couche de perception :Responsable de la collecte de données, notamment divers capteurs, étiquettes RFID, modules GPS, etc.
  • Couche réseau:Responsable de la transmission des données, y compris divers protocoles réseau, technologies de communication, etc., tels que WiFi, Bluetooth, Zigbee, NB-IoT, etc.
  • Couche d'application:Responsable du traitement des données et de la présentation des applications, telles que l'analyse des données, le contrôle à distance, la prise de décision intelligente, etc.

2. Plateforme cloud et visualisation des données

2.1 Plateforme cloud

La plate-forme cloud fait référence au modèle d'ajout, d'utilisation et de fourniture de services liés à Internet, impliquant généralement la fourniture de ressources dynamiquement évolutives et souvent virtualisées sur Internet. Les plates-formes cloud peuvent fournir de puissantes ressources de calcul, de stockage et de réseau pour les applications IoT, réduisant ainsi le coût de développement et de déploiement des applications IoT.

2.2 Visualisation des données

La visualisation des données fait référence à l'affichage des données sous des formes visuelles telles que des graphiques et des diagrammes pour aider les utilisateurs à comprendre les données de manière plus intuitive et à mieux comprendre les modèles et les tendances qui se cachent derrière les données.

3. Introduction aux protocoles et outils couramment utilisés

3.1 Protocole MQTT

MQTT (Message Queuing Telemetry Transport) est un protocole léger de publication/abonnement de messages conçu pour les appareils et réseaux à faible bande passante et à faible consommation. MQTT est largement utilisé dans le domaine de l'Internet des objets, particulièrement adapté aux appareils aux ressources limitées et aux environnements réseau peu fiables.

3.2 Protocole HTTP

HTTP (Hypertext Transfer Protocol) est un protocole de couche application utilisé pour transférer des informations entre les navigateurs Web et les serveurs Web. Le protocole HTTP est simple et facile à utiliser et est largement utilisé dans diverses applications réseau, notamment l'Internet des objets.

3.3 EMQX

EMQX est un serveur de messages MQTT open source, hautes performances et évolutif qui prend en charge des millions de connexions simultanées et un débit de messages.

3.4 Flacon

Flask est un framework d'application Web léger écrit en Python, facile à apprendre et à utiliser, et adapté à la création rapide d'applications Web et d'interfaces API.

3.5 InfluxDB

InfluxDB est une base de données de séries chronologiques open source conçue pour stocker et interroger des données de séries chronologiques. Elle convient au stockage des données de capteurs IoT, aux données de surveillance, etc.

3.6 Grafana

Grafana est un outil de visualisation de données open source qui peut connecter plusieurs sources de données pour créer des tableaux de bord magnifiques et puissants et afficher les données en temps réel.

4. Construction d'une plateforme cloud IoT multiprotocole

Ce projet construira une plate-forme cloud IoT prenant en charge les protocoles MQTT et HTTP pour réaliser les fonctions suivantes :

  • Prise en charge multiprotocole: Prend en charge l'accès aux appareils avec les protocoles MQTT et HTTP.
  • Collecte et stockage de données: Collectez les données de différents appareils de protocole en temps réel et stockez-les dans la base de données InfluxDB.
  • visualisation de données: Utilisez Grafana pour afficher visuellement les données collectées.
4.1 Architecture du système

 

4.2 Mise en œuvre du code

1. Construction du serveur HTTP (Flask)

  1. # 导入 Flask 库
  2. from flask import Flask, request, jsonify
  3. # 创建 Flask 应用
  4. app = Flask(__name__)
  5. # 定义 HTTP 接口,接收 POST 请求
  6. @app.route('/data', methods=['POST'])
  7. def receive_data():
  8. # 获取请求数据
  9. data = request.get_json()
  10. # 数据处理逻辑,例如数据校验、格式转换等
  11. # ...
  12. # 将数据写入 InfluxDB (示例)
  13. from influxdb import InfluxDBClient
  14. client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
  15. json_body = [
  16. {
  17. "measurement": "sensor_data",
  18. "tags": {
  19. "sensor_id": data.get("sensor_id")
  20. },
  21. "fields": {
  22. "temperature": data.get("temperature"),
  23. "humidity": data.get("humidity")
  24. }
  25. }
  26. ]
  27. client.write_points(json_body)
  28. # 返回响应
  29. return jsonify({'message': 'Data received successfully!'}), 200
  30. # 启动 Flask 应用
  31. if __name__ == '__main__':
  32. app.run(debug=True)

Description des codes :

  • utiliserFlaskLe framework crée un serveur HTTP et définit/dataL'interface reçoit les requêtes POST.
  • utiliserrequest.get_json()Obtenez les données JSON dans la requête HTTP.
  • Effectuer le traitement des données, tel que la vérification des données, la conversion de format, etc.
  • utiliserInfluxDBClientConnectez-vous à la base de données InfluxDB et écrivez les données dans la base de données.
  • Renvoie une réponse au format JSON pour informer le client que la réception des données a réussi.

2. Traitement des messages MQTT (Python)

  1. # 导入必要的库
  2. import paho.mqtt.client as mqtt
  3. from influxdb import InfluxDBClient
  4. import json
  5. # MQTT Broker 配置
  6. MQTT_BROKER = "localhost"
  7. MQTT_PORT = 1883
  8. MQTT_TOPIC = "sensor/data"
  9. # InfluxDB 配置
  10. INFLUXDB_HOST = "localhost"
  11. INFLUXDB_PORT = 8086
  12. INFLUXDB_USER = "user"
  13. INFLUXDB_PASSWORD = "password"
  14. INFLUXDB_DATABASE = "iot_data"
  15. # 创建 InfluxDB 客户端
  16. influxdb_client = InfluxDBClient(
  17. host=INFLUXDB_HOST,
  18. port=INFLUXDB_PORT,
  19. username=INFLUXDB_USER,
  20. password=INFLUXDB_PASSWORD,
  21. database=INFLUXDB_DATABASE
  22. )
  23. # 连接到 MQTT Broker
  24. def on_connect(client, userdata, flags, rc):
  25. print("Connected to MQTT Broker with result code " + str(rc))
  26. client.subscribe(MQTT_TOPIC)
  27. # 接收 MQTT 消息
  28. def on_message(client, userdata, msg):
  29. # 解析数据
  30. data = json.loads(msg.payload.decode())
  31. # 构建 InfluxDB 数据点
  32. influxdb_data = [
  33. {
  34. "measurement": "sensor_data",
  35. "tags": {
  36. "sensor_id": data.get("sensor_id"),
  37. },
  38. "fields": {
  39. "temperature": data.get("temperature"),
  40. "humidity": data.get("humidity"),
  41. }
  42. }
  43. ]
  44. # 写入 InfluxDB
  45. influxdb_client.write_points(influxdb_data)
  46. print("Data written to InfluxDB: " + str(influxdb_data))
  47. # 创建 MQTT 客户端
  48. mqtt_client = mqtt.Client()
  49. mqtt_client.on_connect = on_connect
  50. mqtt_client.on_message = on_message
  51. mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
  52. # 启动 MQTT 客户端
  53. mqtt_client.loop_start()
  54. # 保持程序运行
  55. while True:
  56. pass

Description des codes :

  • utiliserpaho.mqtt.clientConnectez-vous à MQTT Broker et abonnez-vous à la rubrique spécifiée.
  • Lorsqu'un message MQTT est reçu, utilisezjson.loads()Analysez le contenu du message.
  • Créez les données analysées au format de point de données InfluxDB.
  • utiliserinfluxdb_client.write_points()Écrivez des données dans la base de données InfluxDB.

3. Visualisation des données (Grafana)

  • Installez Grafana et configurez la source de données pour vous connecter à la base de données InfluxDB.
  • Créez des tableaux de bord et ajoutez des graphiques sur le tableau de bord, tels que des graphiques linéaires, des graphiques à barres, etc.
  • Configurez la source de données du graphique comme InfluxDB et écrivez des instructions de requête pour obtenir des données d'InfluxDB.
  • Configurez le style, le titre, l'axe et d'autres attributs du graphique selon vos besoins pour rendre l'affichage des données plus intuitif et plus facile à comprendre.

Exemple d'instruction de requête Grafana :

SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h

La requête commencera à partir desensor_dataInterrogez les données de température et d’humidité de la dernière heure de mesure.

Ce projet combine des outils tels que Flask, EMQX, InfluxDB et Grafana pour créer une plate-forme cloud IoT prenant en charge les protocoles MQTT et HTTP, et réalise la collecte, le stockage et l'affichage visuel de données. La plate-forme peut être étendue de manière flexible pour prendre en charge davantage de types d'appareils et d'accès aux protocoles, et ses fonctions peuvent être personnalisées en fonction des besoins réels.

Avis:

  • Le code ci-dessus est uniquement à titre de référence et doit être modifié en fonction des besoins spécifiques des applications réelles.
  • Veuillez vous assurer que toutes les bibliothèques dépendantes sont installées, par ex.paho-mqttinfluxdbflaskattendez.
  • Lors du déploiement réel, des facteurs tels que la sécurité des données et la stabilité du système doivent être pris en compte.

Si vous souhaitez du code et des idées spécifiques, vous pouvez m'envoyer un message privé ! ! !