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;
}
}
Comments are closed