¿cuanta gente a visto el blog?

Usar MQTT en Azure

 sudo apt update && sudo apt upgrade -y




sudo apt install mosquitto mosquitto-clients -y

sudo nano /etc/mosquitto/mosquitto.conf

listener 1883 0.0.0.0
allow_anonymous true

sudo systemctl restart mosquitto


sudo systemctl enable mosquitto

sudo ufw allow 1883/tcp
sudo ufw reload

sudo ufw status

mosquitto_pub -h localhost -t "test" -m "Hola MQTT desde Azure"

mosquitto_sub -h localhost -t "test"

mosquitto_pub -h <IP_PUBLICA> -t "test" -m "Mensaje desde cliente externo"
mosquitto_sub -h <IP_PUBLICA> -t "test"


sudo mysql -u root -p     
CREATE DATABASE mimqtt;
USE mimqtt;

CREATE TABLE sensor_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    luminosidad FLOAT NOT NULL,
    distancia FLOAT NOT NULL,
    temperatura FLOAT NOT NULL,
    voltaje FLOAT NOT NULL,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);




http://TUIP/phpmyadmin




#include <WiFi.h>
#include <PubSubClient.h>

// Configuración WiFi
const char* ssid = "TURED";
const char* password = "clave";

// Configuración del servidor MQTT (Mosquitto en Azure)
const char* mqtt_server = "IP_PUBLICA_DE_AZURE";
const int mqtt_port = 1883;
const char* topic_luminosidad = "sensores/luminosidad";
const char* topic_distancia = "sensores/distancia";
const char* topic_temperatura = "sensores/temperatura";
const char* topic_voltaje = "sensores/voltaje";

// Cliente MQTT
WiFiClient espClient;
PubSubClient client(espClient);

// Pines de sensores
int trig = 2, eco = 4, lm35_1 = 34, lm35_2 = 35, ldrPin = 32;

// Variables de medición
int duracion, distancia;
float temp1, temp2;
int ldrValor;

void setup() {
  Serial.begin(115200);

  // Configuración WiFi
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);

  // Configurar pines de sensores
  pinMode(trig, OUTPUT);
  pinMode(eco, INPUT);
  pinMode(lm35_1, INPUT);
  pinMode(lm35_2, INPUT);
  pinMode(ldrPin, INPUT);
}

void setup_wifi() {
  Serial.print("Conectando a WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConexión exitosa a WiFi.");
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Conectando al servidor MQTT...");
    if (client.connect("ESP32_Client")) {
      Serial.println("Conectado al servidor MQTT.");
    } else {
      Serial.print("Fallo, rc=");
      Serial.print(client.state());
      Serial.println(" intentando de nuevo en 5 segundos.");
      delay(5000);
    }
  }
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // --- Lectura del sensor ultrasónico ---
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duracion = pulseIn(eco, HIGH);
  distancia = duracion / 58.2;

  // --- Lectura de los sensores LM35 ---
  temp1 = analogRead(lm35_1) * (3.3 / 4095.0) * 100.0;
  temp2 = analogRead(lm35_2) * (3.3 / 4095.0) * 100.0;

  // --- Lectura de la resistencia LDR ---
  ldrValor = analogRead(ldrPin);

  // --- Publicar datos al servidor MQTT ---
  client.publish(topic_luminosidad, String(ldrValor).c_str());
  client.publish(topic_distancia, String(distancia).c_str());
  client.publish(topic_temperatura, String(temp1).c_str());
  client.publish(topic_voltaje, String(temp2).c_str());

  // Imprimir en el monitor serial
  Serial.println("Datos publicados:");
  Serial.print("Luminosidad: "); Serial.println(ldrValor);
  Serial.print("Distancia: "); Serial.println(distancia);
  Serial.print("Temperatura: "); Serial.println(temp1);
  Serial.print("Voltaje: "); Serial.println(temp2);

  delay(5000);  // Publicar cada 5 segundos
}
.






sudo nano /var/www/html/azuremqtt.php

<?php
require 'vendor/autoload.php';

use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;

// Configuración del servidor MQTT
$server   = 'IP_PUBLICA_DE_AZURE'; // IP del servidor Mosquitto
$port     = 1883;
$clientId = 'PHP_MQTT_Client';
$username = null;  // No usamos autenticación en esta práctica
$password = null;

// Configuración de la base de datos
$host = "localhost";
$user = "root";
$pass = "admin"; // Ajusta la contraseña de tu MySQL
$dbname = "mimqtt";

// Conectar a MySQL
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}

// Función para manejar los mensajes recibidos
function messageHandler($topic, $message) {
    global $conn;
    $timestamp = date('Y-m-d H:i:s');

    // Mapear cada topic a su variable correspondiente
    $data = [
        "sensores/luminosidad" => "luminosidad",
        "sensores/distancia" => "distancia",
        "sensores/temperatura" => "temperatura",
        "sensores/voltaje" => "voltaje"
    ];

    if (isset($data[$topic])) {
        $column = $data[$topic];
        $value = floatval($message);

        // Insertar el valor en la base de datos
        $sql = "INSERT INTO sensor_data ($column, timestamp) VALUES ('$value', '$timestamp')";
        $conn->query($sql);
    }
}

// Configurar cliente MQTT
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings())
    ->setUsername($username)
    ->setPassword($password);

$mqtt->connect($connectionSettings, true);

// Suscribirse a los topics
$topics = [
    'sensores/luminosidad' => 0,
    'sensores/distancia' => 0,
    'sensores/temperatura' => 0,
    'sensores/voltaje' => 0,
];

foreach ($topics as $topic => $qos) {
    $mqtt->subscribe($topic, 'messageHandler', $qos);
}

echo "Escuchando los topics MQTT...\n";

// Mantener la conexión abierta
$mqtt->loop(true);

// Cerrar conexión a la base de datos
$conn->close();
$mqtt->disconnect();
?>
sudo chown -R $USER:$USER /var/www/html
sudo chmod -R 755 /var/www/html

ls -la /var/www/html

composer require php-mqtt/client

cd /var/www/html
sudo apt install composer -y
composer require php-mqtt/client

 php azuremqtt.php


No hay comentarios.:

Publicar un comentario