En este tutorial, aprenderemos cómo utilizar la comunicación de dispositivo a dispositivo (D2D) para simplificar un poco la vida diaria. Por ejemplo, podrá controlar electrodomésticos como la cafetera, un interruptor de luz o el aire acondicionado, y hacerlo desde el interior de su vehículo. Entonces, si llega a casa una noche, la presencia de su vehículo puede indicar que se encienda la luz del porche antes de llegar a la puerta principal.
La comunicación D2D generalmente se refiere a la tecnología que permite que los dispositivos o aparatos se “comunican” sin el uso de infraestructuras de red.
En este caso, D2D detecta la presencia de tu coche mediante un sensor ultrasónico y el protocolo de señalización MQ Telemetry Transport (MQTT). MQTT es un protocolo de red que transporta mensajes entre dispositivos.
La comunicación D2D está totalmente automatizada y no depende de la interacción humana. Esto significa que no es necesario utilizar una cámara CCTV para detectar la presencia de su vehículo. (Es posible que incluso reciba una notificación si alguien intenta manipular su automóvil).
Diagrama de circuito
El zócalo del tablero de distribución. También puedes utilizar el microchip WiFi estándar Arduino UNO3 y ESP8266 por separado. El secreto es asegurarse de que todo encaje dentro del cuadro de distribución.

Placa Atmgea 328p personalizada con ESP8266 y circuito de relé.
Nota: El resto de la configuración del circuito es la misma si está conectado a ESP8266.
Informaciones técnicas
Para este proyecto utilizamos Arduino UNO (Atmega 328p), ESP8266 y un sensor ultrasónico de medición de distancia (para detectar la presencia del vehículo), y el protocolo MQTT para la comunicación entre dispositivos.
Para garantizar una comunicación D2D exitosa, primero se debe generar una señal de control. Esta señal se envía entre el sensor inteligente que detecta la presencia del vehículo y el dispositivo que controla el electrodoméstico (luces, aire acondicionado, cafetera, etc.). El dispositivo de control requerirá una definición predefinida del significado de cada señal de control.
Por ejemplo, si el vehículo acaba de llegar o salir del garaje, el sensor enviará un mensaje de señal de control diferente.
Dado que estas señales se envían a través del protocolo MQTT, varios dispositivos pueden acceder a ellas utilizando sus "temas". Esto significa que es posible controlar múltiples dispositivos.
Algoritmo de diagrama de bloques
Necesitaremos hacer dos dispositivos. Uno para detectar la presencia del vehículo en el garaje (lo llamaremos dispositivo de detección) y otro para controlar el aparato (el dispositivo de control).
El dispositivo de control utiliza una placa PCB simple que conecta el controlador ESP8266 y Atmega328 (o Arduino UNO) a un circuito de relé. "Escucha" (o se suscribe) a una señal de control, que es enviada por el protocolo MQTT sobre un tema específico.
El dispositivo sensor es un sensor de medición de distancia ultrasónico, que se utiliza con el controlador Atmega 328p y ESP8266 para la comunicación. Este dispositivo envía una señal de control sobre el tema “ts/light”. Básicamente, este dispositivo detecta continuamente la presencia o ausencia del vehículo.
Ahora echemos un vistazo a cómo se comunicarán estos dispositivos entre sí.
Como funciona
A continuación se describen tres escenarios sobre cómo podría funcionar este dispositivo.
1. Ausencia de vehículo: Si no hay ningún vehículo dentro del alcance del sensor del dispositivo de detección, enviará continuamente una señal de “OFF” al dispositivo de control de la unidad. Por lo tanto, el dispositivo conectado a este dispositivo permanecerá apagado.
2. Vehículo estacionado: Cuando el coche está estacionado en el garaje, el dispositivo de detección envía una señal de “ON” que se encuentra en el hilo “ts/light”. A continuación se enciende el aparato.
3. Salida del vehículo: Si el vehículo sale del garaje, el dispositivo de detección envía una señal de “OFF” al dispositivo de control.
Es posible agregar señales de control más complicadas, pero para este proyecto lo mantendremos simple.
Entendiendo el código fuente
Hay dos partes principales del código.
1. El dispositivo de detección. El vehículo es controlado por el sensor ultrasónico del dispositivo de detección. Si la distancia delante del sensor coincide con una condición establecida, señalará el automóvil como detectado.
si (int(sensor) <100.00) {
veces1 = veces1 + 1;
}
Para asegurarse de que no sea una detección falsa, repite esto cinco veces para asegurarse de que la condición sea verdadera. En este caso envía una señal de “ON”.
si(veces1 == 5){
Serial.print(“ENCENDIDO”);
veces1 = 0;
retraso(1200);}
2. Comunicación en red
La firma común está publicada en el ESP8266.
const char* topicSubscribe = “ts/light”;
const char* topicPublish = “ts/report”;
Para acceder a la red se utilizan ESP8266 y Atmega328P. Cualquier cosa del Atmega328p se publica directamente (“enviar”) como señal de control al tema “ts/light”.
if (Serie.disponible) {
Cadena datos recibidos = Serial.readString;
temp_str = datos recibidos;
temperatura de carbón (temp_str.length + 2);
temp_str.toCharArray(temp, temp_str.length + 1);
client.publish(temaPublish, temporal);
}
Nota: El extracto de la oda ESP8266.
Además, todo lo recibido por MQTT se envía por el puerto serie ESP8266 al Atmega328p.
void datos_recibidos (tema char*, carga útil byte*, longitud interna sin firmar) {
datos_r_in_string = “”;
para (int i = 0; i < longitud; i++) {
data_r_in_string = Cadena(data_r_in_string + (char)carga útil(i));
//Serial.print((char)payload(i));
}
Serial.print(data_r_in_string);
}
Para proporcionar un retraso de comunicación adecuado, la función ESP toma un segundo como tiempo de espera. También considerará todo lo recibido en ese segundo como una sola cadena.
Además, dado que un dispositivo publica en el tema “ts/light”, el otro debe estar suscrito al mismo tema para recibir el mensaje enviado.