Arduino Mqqt Home Assistant porte garage

Arduino Uno connectée sur un relais (porte garage) et 2 capteurs de distance HC SR04 pour la détection du status de la porte

un payload « impulse » reçu sur le topic actionne le relais pour 800ms

un payload « getdistance » refresh la valeurs de capteurs et envoie par mqtt sur topic/capteur1 et 2


#include <Ethernet.h>
#include <MQTT.h>
#include <HCSR04.h>

int getdist = false;
byte mac[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
byte ip[] = {X, X, X, X}; // <- change to match your network

EthernetClient net;
MQTTClient client;

const byte TRIGGER_PIN1 = 5; // Broche TRIGGER
const byte ECHO_PIN1 = 6; // Broche ECHO
const byte TRIGGER_PIN2 = 7; // Broche TRIGGER
const byte ECHO_PIN2 = 8; // Broche ECHO

UltraSonicDistanceSensor distanceSensor1(TRIGGER_PIN1, ECHO_PIN1); // Trigger et Echo
UltraSonicDistanceSensor distanceSensor2(TRIGGER_PIN2, ECHO_PIN2);

float dist1 =0;
float dist2 =0;

void connect() {
Serial.print(« connecting… »);
while (!client.connect(« arduino », »user », « pass »)) {
Serial.print(« . »);
delay(1000);
}

Serial.println(« \nconnected! »);

client.subscribe(« /topic »);
// client.unsubscribe(« /hello »);
}

void messageReceived(String &topic, String &payload) {
Serial.println(« incoming:  » + topic +  » –  » + payload);
if (payload == « impulse ») {
digitalWrite(3, LOW);
delay(800);
digitalWrite(3, HIGH);
}

if (payload == « getDistance ») {
getdist = true;
}

}

void setup() {
Serial.begin(115200);
Ethernet.begin(mac, ip);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);

pinMode(TRIGGER_PIN1, OUTPUT);
digitalWrite(TRIGGER_PIN1, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO_PIN1, INPUT);

pinMode(TRIGGER_PIN2, OUTPUT);
digitalWrite(TRIGGER_PIN2, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO_PIN2, INPUT);

// Note: Local domain names (e.g. « Computer.local » on OSX) are not supported
// by Arduino. You need to set the IP address directly.
client.begin(« x.x.x.x », net);
client.onMessage(messageReceived);

connect();
}

void loop() {
client.loop();

if (!client.connected()) {
connect();
}

if (getdist){
//Serial.println(« Entree dans if getdisat »);

dist1 = distanceSensor1.measureDistanceCm();
dist2 = distanceSensor2.measureDistanceCm();

client.publish(« /topic/Capteur1 », String(dist1,2));
client.publish(« /topic/Capteur2 », String(dist2,2));

Serial.println(dist1);
Serial.println(dist2);

getdist = false;
}
}

CATEGORIES:

geek

Tags:

Comments are closed