Tutorial 7: Telégrafo

Objetivo:

El objetivo de este ejemplo es mostrar cómo se puede conectar la placa a un broker ("servidor") mediante el protocolo MQTT. Para ello se ha desarrollado un ejemplo de un telégrafo en el que dos personas se podrán comunicar mediante un botón y un zumbador.

Pasos a Seguir

  1. Desconecte el cable usb de la placa o del ordenador (con el objetivo de evitar cortocircuitos)
  2. Coloque la parte lateral donde aparecen más pines con el prefijo "D" conectada a la placa en la primera columna. Los demás pines quedarán en el aire como en la imagen.
  3. Base Inicial
  4. Coloque las resistencias, el zumbador, el botón y cables según el esquema de circuito que se muestra a continuación:
  5. Telegrafo
  6. Conecte la placa al ordenador por el cable usb
  7. Abra el entorno y copiar el siguiente código:
  8. Código Semáforo Móvil

    /***************************************************
      Adafruit MQTT Library ESP8266 Example
      Must use ESP8266 Arduino from:
        https://github.com/esp8266/Arduino
      Works great with Adafruit's Huzzah ESP board & Feather
      ----> https://www.adafruit.com/product/2471
      ----> https://www.adafruit.com/products/2821
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
      Written by Tony DiCola for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
    ****************************************************/
    #include <ESP8266WiFi.h>
    #include "Adafruit_MQTT.h"
    #include "Adafruit_MQTT_Client.h"

    /************************* WiFi Access Point *********************************/

    // Introducir el nombre de la red wifi
    #define WLAN_SSID       "nombre red wifi"
    // Introducir la contraseña de la red wifi
    #define WLAN_PASS       "contraseña wifi"

    /************************* Adafruit.io Setup *********************************/

    #define AIO_SERVER      "192.168.0.103"
    #define AIO_SERVERPORT  1883                   // use 8883 for SSL

    // Aqui os se tiene que indicar a
    #define EMISOR "Alice"
    #define RECEPTOR "Bob"

    /************ Global State (you don't need to change this!) ******************/

    // Create an ESP8266 WiFiClient class to connect to the MQTT server.
    WiFiClient client;

    Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT);

    /****************************** Feeds ***************************************/


    Adafruit_MQTT_Publish buttonpressed = Adafruit_MQTT_Publish(&mqtt, RECEPTOR);


    Adafruit_MQTT_Subscribe buzzer = Adafruit_MQTT_Subscribe(&mqtt, EMISOR);

    /*************************** Sketch Code ************************************/

    // Bug workaround for Arduino 1.6.6, it seems to need a function declaration
    // for some reason (only affects ESP8266, likely an arduino-builder bug).
    void MQTT_connect();

    void setup() {
      Serial.begin(9600);
      delay(10);

      Serial.println(F("Adafruit MQTT demo"));

      // Connect to WiFi access point.
      Serial.println(); Serial.println();
      Serial.print("Connecting to ");
      Serial.println(WLAN_SSID);

      WiFi.begin(WLAN_SSID, WLAN_PASS);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println();

      Serial.println("WiFi connected");
      Serial.println("IP address: "); Serial.println(WiFi.localIP());

      // Setup MQTT subscription for onoff feed.
      mqtt.subscribe(&buzzer);

      pinMode(D5,INPUT);
    }
    int previous=0;
    uint32_t x=0;

    void loop() {
      // Ensure the connection to the MQTT server is alive (this will make the first
      // connection and automatically reconnect when disconnected).  See the MQTT_connect
      // function definition further below.
      MQTT_connect();

      // this is our 'wait for incoming subscription packets' busy subloop
      // try to spend your time here

      Adafruit_MQTT_Subscribe *subscription;
      while ((subscription = mqtt.readSubscription(10))) {
        if (subscription == &buzzer) {

          // Está un poquito ñapa
          String recibido = (char *)buzzer.lastread;
          if(recibido.equals("1")){
            tone( D1, 440);
          }
          else
          {
            noTone(D1);
          }
        }
      }

      int d5Value= digitalRead(D5);
      if(previous != d5Value){
        buttonpressed.publish(d5Value);
        previous = d5Value;
      }


      // ping the server to keep the mqtt connection alive
      // NOT required if you are publishing once every KEEPALIVE seconds
      /*
      if(! mqtt.ping()) {
        mqtt.disconnect();
      }
      */
    }

    // Function to connect and reconnect as necessary to the MQTT server.
    // Should be called in the loop function and it will take care if connecting.
    void MQTT_connect() {
      int8_t ret;

      // Stop if already connected.
      if (mqtt.connected()) {
        return;
      }

      Serial.print("Connecting to MQTT... ");

      uint8_t retries = 3;
      while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
           Serial.println(mqtt.connectErrorString(ret));
           Serial.println("Retrying MQTT connection in 5 seconds...");
           mqtt.disconnect();
           delay(5000);  // wait 5 seconds
           retries--;
           if (retries == 0) {
             // basically die and wait for WDT to reset me
             while (1);
           }
      }
      Serial.println("MQTT Connected!");
    }
  9. Modique el nombre del Emisor y Receptor de los mensajes morse. Inventaros un alias que será vuestro emisor e intercambialo con otro grupo (el otro grupo deberá de ponerlo como receptor). (Línea 33 y 34).
  10. SSID
  11. Modique las credenciales de la red Wifi. (Línea 23 y 25).
  12. SSID
  13. Pulse el segundo botón del entorno para compilar y subir el código.
  14. botón de upload
  15. Tras transferir el código abra la consola de monitorización y verifique que se conecta a la red.
  16. botón del monitor serial
  17. Una vez conectados ambos se podrá empezar la comunicación por morse

Explicación del Código de este Ejemplo

TODO