MQTT, 2 led e Arduino

Ciao!

Dopo aver eseguito i primi test con il protocollo MQTT e Arduino (in questo post),
passiamo ora ad semplice esempio pratico.

In questo caso piloteremo 2 led collegati alla Wemos, direttamente dal prompt dei comandi del nostro pc, tutto questo grazie al Mqtt e Mosquitto.

Per prima cosa è necessario collegare 2 led alla Wemos in questo modo:





Dopo aver effettuato i collegamenti carichiamo nella Wemos il codice che trovate qui sotto, inserendo SSID e password della vostra rete wifi.

E' necessario inserire anche l'indirizzo IP del broker, se il broker Mosquitto sta girando sul vostro pc Windows, potete scoprire l'indirizzo IP digitando "ipconfig" nel prompt dei comandi.


  1. /*
  2.    Derivato dall'esempio
  3.    "Basic ESP8266 MQTT example"
  4.    della libreria "PubSubClient"
  5.    www.danielealberti.it
  6. */
  7. #include <ESP8266WiFi.h>
  8. #include <PubSubClient.h>
  9. WiFiClient espClient;
  10. PubSubClient client(espClient);
  11. //sostituisci ssid e password della tua rete wifi
  12. const char* ssid = "********";
  13. const char* password = "********";
  14. //sostituisci l'ip con quello del broker (indirizzo del tuo pc se usi mosquitto)
  15. const char* mqtt_server = "192.168.***.***";
  16. //nome di questo client, sarà visibile dal broker
  17. const char* clientName = "ESP8266_n1";
  18. const int pinLed1 = D0;
  19. const int pinLed2 = D1;
  20. long lastMsg = 0;
  21. String msgIn;
  22. int value = 0;
  23. void setup()
  24. {
  25.   pinMode(pinLed1, OUTPUT);
  26.   pinMode(pinLed2, OUTPUT);
  27.   Serial.begin(115200);
  28.   setup_wifi();
  29.   client.setServer(mqtt_server, 1883);
  30.   client.setCallback(callback);
  31. }
  32. void setup_wifi()
  33. {
  34.   delay(10);
  35.   Serial.println();
  36.   Serial.print("Connecting to ");
  37.   Serial.println(ssid);
  38.   WiFi.begin(ssid, password);
  39.   while (WiFi.status() != WL_CONNECTED) {
  40.     delay(500);
  41.     Serial.print(".");
  42.   }
  43.   Serial.println("");
  44.   Serial.println("WiFi connected");
  45.   Serial.println("IP address: ");
  46.   Serial.println(WiFi.localIP());
  47. }
  48. void callback(char* topic, byte* payload, unsigned int length) {
  49.   msgIn = "";
  50.   Serial.print("Message arrived [");
  51.   Serial.print(topic);
  52.   Serial.print("] ");
  53.   for (int i = 0; i < length; i++) {
  54.     msgIn = msgIn + ((char)payload[i]);
  55.   }
  56.   Serial.println(msgIn);
  57.   ControlsByMessage((String)topic, msgIn);
  58. }
  59. void ControlsByMessage(String tpc, String msg)
  60. {
  61.     Serial.println(tpc);
  62.     Serial.println(msg);
  63.   if (tpc == "L1")
  64.   {  
  65.     if (msg == "ON")
  66.     {
  67.       digitalWrite(D0, HIGH);
  68.     }
  69.     else if (msg == "OFF")
  70.     {
  71.       digitalWrite(D0, LOW);
  72.     }
  73.   }
  74.   if (tpc == "L2")
  75.   {
  76.     if (msg == "ON")
  77.     {
  78.       digitalWrite(D1, HIGH);
  79.     }
  80.     else if (msg == "OFF")
  81.     {
  82.       digitalWrite(D1, LOW);
  83.     }
  84.   }
  85. }
  86. void reconnect() {
  87.   // Loop fino alla riconnessione
  88.   while (!client.connected()) {
  89.     Serial.print("Attempting MQTT connection...");
  90.     // tenta la connessione
  91.     if (client.connect(clientName)) {
  92.       Serial.println("connected");
  93.       // sottoscrizione ai Topic
  94.       client.subscribe("L1");
  95.       client.subscribe("L2");
  96.     } else {
  97.       Serial.print("failed, rc=");
  98.       Serial.print(client.state());
  99.       Serial.println(" try again in 5 seconds");
  100.       // attendi 5 secondi tra i tentativi di riconnessione
  101.       delay(5000);
  102.     }
  103.   }
  104. }
  105. void loop() {
  106.   if (!client.connected()) {
  107.     reconnect();
  108.   }
  109.   client.loop();
  110. }


Dopo aver caricato il codice avviate il Broker Mosquitto e aprite un altro prompt per il client.
Con i seguenti comandi, da digitare nel client, piloterete i led collegati ai pin D0 e D1:


Accendere Led 1:
mosquitto_pub -h localhost -i pcDaniele -t L1 -m ON

Spegnere Led 1:
mosquitto_pub -h localhost -i pcDaniele -t L1 -m OFF

Accendere Led 2:
mosquitto_pub -h localhost -i pcDaniele -t L2 -m ON

Spegnere Led 2:
mosquitto_pub -h localhost -i pcDaniele -t L2 -m OFF




Questo è tutto, per qualsiasi domanda lascia pure un commento qui sotto!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

1 commento:

  1. Che codice dovrei inserire se volessi controllare un DigitalInput . Es. un sensore magnetico che mi indichi se una finestra è aperta o chiusa. Grazie Giorgio

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post