Compartilhamento de tecnologia

Construindo uma plataforma de nuvem IoT multiprotocolo baseada em EMQX Flask InfluxDB Grafana: acesso a dispositivos MQTT/HTTP e processo de visualização de dados (com exemplos de código)

2024-07-12

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

Resumo: Este artigo apresenta conceitos básicos como Internet das Coisas, plataforma em nuvem, MQTT, HTTP e visualização de dados de maneira simples e fácil de entender. Ele também combina ferramentas convencionais como EMQX, Flask, InfluxDB e Grafana para ensinar. você mostra passo a passo como construir uma plataforma em nuvem da Internet das Coisas que suporta vários protocolos. O artigo tem uma estrutura, imagens e textos claros, e o código é informativo e fácil de entender. Ele foi projetado para ajudar os leitores a dominar rapidamente a tecnologia central de construção de uma plataforma de nuvem IoT.

Palavras-chave:IoT, plataforma em nuvem, MQTT, HTTP, visualização de dados, EMQX, Flask, InfluxDB, Grafana


1. Conhecimento básico de Internet das Coisas

1.1 Visão Geral da Internet das Coisas

A Internet das Coisas (IoT, Internet das Coisas) refere-se à coleção em tempo real de quaisquer objetos ou processos que precisam ser monitorados, conectados e interagidos por meio de vários sensores de informação, tecnologia de identificação por radiofrequência, sistemas de posicionamento global, etc., para realizar a comunicação onipresente entre coisas e coisas, e entre coisas e pessoas. Em conexão, podemos alcançar percepção, identificação e gerenciamento inteligentes de itens e processos.

1.2 Arquitetura IoT

A arquitetura do sistema IoT geralmente é dividida em três camadas:

  • Camada de percepção:Responsável pela coleta de dados, incluindo diversos sensores, tags RFID, módulos GPS, etc.
  • Camada de rede:Responsável pela transmissão de dados, incluindo diversos protocolos de rede, tecnologias de comunicação, etc., como WiFi, Bluetooth, Zigbee, NB-IoT, etc.
  • Camada de aplicação:Responsável pelo processamento de dados e apresentação de aplicações, como análise de dados, controle remoto, tomada de decisão inteligente, etc.

2. Plataforma em nuvem e visualização de dados

2.1 Plataforma em nuvem

Plataforma em nuvem refere-se ao modelo de adição, uso e entrega de serviços relacionados baseados na Internet, geralmente envolvendo o fornecimento de recursos dinamicamente escalonáveis ​​e muitas vezes virtualizados pela Internet. A plataforma em nuvem pode fornecer recursos poderosos de computação, armazenamento e rede para aplicações IoT, reduzindo o custo de desenvolvimento e implantação de aplicações IoT.

2.2 Visualização de dados

A visualização de dados refere-se à exibição de dados em formatos visuais, como gráficos e tabelas, para ajudar os usuários a compreender os dados de forma mais intuitiva e obter insights sobre os padrões e tendências por trás dos dados.

3. Introdução aos protocolos e ferramentas comumente usados

3.1 Protocolo MQTT

MQTT (Message Queuing Telemetry Transport) é um protocolo leve de publicação/assinatura de mensagens projetado para dispositivos e redes de baixa largura de banda e baixo consumo de energia. MQTT é amplamente utilizado no campo da Internet das Coisas, especialmente adequado para dispositivos com recursos limitados e ambientes de rede não confiáveis.

3.2 Protocolo HTTP

HTTP (Hypertext Transfer Protocol) é um protocolo de camada de aplicação usado para transferir informações entre navegadores da Web e servidores da Web. O protocolo HTTP é simples e fácil de usar e é amplamente utilizado em diversas aplicações de rede, incluindo a Internet das Coisas.

3.3 EMQX

EMQX é um servidor de mensagens MQTT escalonável, de alto desempenho e de código aberto que oferece suporte a milhões de conexões simultâneas e taxa de transferência de mensagens.

3.4 Frasco

Flask é uma estrutura de aplicação web leve escrita em Python, fácil de aprender e usar, e adequada para construir rapidamente aplicações web e interfaces API.

3.5 InfluxoDB

InfluxDB é um banco de dados de série temporal de código aberto projetado para armazenar e consultar dados de série temporal. É adequado para armazenar dados de sensores IoT, dados de monitoramento, etc.

3.6 Grafana

Grafana é uma ferramenta de visualização de dados de código aberto que pode conectar várias fontes de dados para criar painéis bonitos e poderosos e exibir dados em tempo real.

4. Construção de plataforma de nuvem IoT multiprotocolo

Este projeto construirá uma plataforma de nuvem IoT que suporta protocolos MQTT e HTTP para atingir as seguintes funções:

  • Suporte multiprotocolo: oferece suporte ao acesso ao dispositivo com protocolos MQTT e HTTP.
  • Coleta e armazenamento de dados: Colete dados de diferentes dispositivos de protocolo em tempo real e armazene-os no banco de dados InfluxDB.
  • Visualização de dados: use o Grafana para exibir visualmente os dados coletados.
4.1 Arquitetura do sistema

 

4.2 Implementação do código

1. Construção de servidor 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)

Descrição do código:

  • usarFlaskA estrutura cria um servidor HTTP e define/dataA interface recebe solicitações POST.
  • usarrequest.get_json()Obtenha os dados JSON na solicitação HTTP.
  • Execute o processamento de dados, como verificação de dados, conversão de formato, etc.
  • usarInfluxDBClientConecte-se ao banco de dados InfluxDB e grave dados no banco de dados.
  • Retorne uma resposta no formato JSON para informar ao cliente que a recepção dos dados foi bem-sucedida.

2. Processamento de mensagens 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

Descrição do código:

  • usarpaho.mqtt.clientConecte-se ao MQTT Broker e assine o tópico especificado.
  • Quando uma mensagem MQTT for recebida, usejson.loads()Analise o conteúdo da mensagem.
  • Construa os dados analisados ​​no formato de ponto de dados InfluxDB.
  • usarinfluxdb_client.write_points()Grave dados no banco de dados InfluxDB.

3. Visualização de dados (Grafana)

  • Instale o Grafana e configure a fonte de dados para conectar-se ao banco de dados InfluxDB.
  • Crie painéis e adicione gráficos ao painel, como gráficos de linhas, gráficos de barras, etc.
  • Configure a fonte de dados do gráfico como InfluxDB e escreva instruções de consulta para obter dados do InfluxDB.
  • Configure o estilo, o título, o eixo e outros atributos do gráfico conforme necessário para tornar a exibição dos dados mais intuitiva e fácil de entender.

Exemplo de instrução de consulta Grafana:

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

A declaração de consulta será desensor_dataConsulte os dados de temperatura e umidade da última hora de medição.

Este projeto combina ferramentas como Flask, EMQX, InfluxDB e Grafana para construir uma plataforma de nuvem IoT que suporta protocolos MQTT e HTTP e realiza coleta de dados, armazenamento e exibição visual. A plataforma pode ser expandida de forma flexível para suportar mais tipos de dispositivos e protocolos de acesso, e suas funções podem ser personalizadas de acordo com as necessidades reais.

Perceber:

  • O código acima é apenas para referência e precisa ser modificado de acordo com necessidades específicas em aplicações reais.
  • Certifique-se de que todas as bibliotecas dependentes estejam instaladas, por ex.paho-mqttinfluxdbflaskespere.
  • Na implantação real, fatores como segurança de dados e estabilidade do sistema precisam ser considerados.

Se você quiser códigos e ideias específicas, pode me enviar uma mensagem privada! ! !