sudo apt update && sudo apt upgrade -y
sudo systemctl restart mosquitto
sudo systemctl enable mosquitto
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
);
#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
No hay comentarios.:
Publicar un comentario