A place users can post their projects. If you have a small project and would like your own dedicated place to post and have others chat about it then this is your spot.

User avatar
By martinayotte
#42903 My personal opinion is that AT firmware is crappy and you will need much more effort to get your project running, and since the AT firmware goal is to provide WiFi to externally attached MCU, your hardware will end up to be more complex for no reason.

I strongly suggest to use Arduino ESP framework, writing your own sketch for both Master and Slaves, where the ESP themselves can deal with your peripherals, no needs for external MCU.
User avatar
By cyberlacs
#44642 Friend martin ayotte;
I made this communication via adafruit and it worked.
I created a site adafruit account:
in DASHBOARD
I created Toggle Button >>>> LAMP1 - LAMP2 - LAMP3 - LAMP4
In Esp8266 - NodeMCU 3V
I put the code via Arduino IDE


Code: Select all/***************************************************
  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 *********************************/

#define WLAN_SSID       "#############"//PUTTING YOUR SSID WIFI
#define WLAN_PASS       "#############"//PUTTING YOUR PASSWORD

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

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "#############"//PUTTING YOUR USERNAME ADAFRUIT
#define AIO_KEY         "#############"////PUTTING YOUR KEY ADAFRUIT

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

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Store the MQTT server, username, and password in flash memory.
// This is required for using the Adafruit MQTT library.
const char MQTT_SERVER[] PROGMEM    = AIO_SERVER;
const char MQTT_USERNAME[] PROGMEM  = AIO_USERNAME;
const char MQTT_PASSWORD[] PROGMEM  = AIO_KEY;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD);

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

// Setup a feed called 'photocell' for publishing.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
//const char PHOTOCELL_FEED[] PROGMEM = AIO_USERNAME "/feeds/photocell";
//Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, PHOTOCELL_FEED);

// Setup a feed called 'onoff' for subscribing to changes.
const char L1[] PROGMEM = AIO_USERNAME "/feeds/Lamp1";
Adafruit_MQTT_Subscribe Lamp1 = Adafruit_MQTT_Subscribe(&mqtt, L1);

const char L2[] PROGMEM = AIO_USERNAME "/feeds/Lamp2";
Adafruit_MQTT_Subscribe Lamp2 = Adafruit_MQTT_Subscribe(&mqtt, L2);

const char L3[] PROGMEM = AIO_USERNAME "/feeds/Lamp3";
Adafruit_MQTT_Subscribe Lamp3 = Adafruit_MQTT_Subscribe(&mqtt, L3);

const char L4[] PROGMEM = AIO_USERNAME "/feeds/Lamp4";
Adafruit_MQTT_Subscribe Lamp4 = Adafruit_MQTT_Subscribe(&mqtt, L4);
/*************************** 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(115200);
  delay(10);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
 
  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(&Lamp1);
  mqtt.subscribe(&Lamp2);
  mqtt.subscribe(&Lamp3);
  mqtt.subscribe(&Lamp4);
}

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(5000))) {
   
    if (subscription == &Lamp1) {
      Serial.print(F("Ligou_Lamp1: "));
      Serial.println((char *)Lamp1.lastread);
      uint16_t num = atoi((char *)Lamp1.lastread);
      digitalWrite(1, num);
    }

    if (subscription == &Lamp2) {
      Serial.print(F("Ligou_Lamp2: "));
      Serial.println((char *)Lamp2.lastread);
      uint16_t num = atoi((char *)Lamp2.lastread);
      digitalWrite(2, num);
    }
   
    if (subscription == &Lamp3) {
      Serial.print(F("Ligou_Lamp3: "));
      Serial.println((char *)Lamp3.lastread);
      uint16_t num = atoi((char *)Lamp3.lastread);
      digitalWrite(3, num);
    }

    if (subscription == &Lamp4) {
      Serial.print(F("Ligou_Lamp4: "));
      Serial.println((char *)Lamp4.lastread);
      uint16_t num = atoi((char *)Lamp4.lastread);
      digitalWrite(4, num);
    }
  }

  // Now we can publish stuff!
//  Serial.print(F("\nSending photocell val "));
//  Serial.print(x);
//  Serial.print("...");
//  if (! photocell.publish(x++)) {
//    Serial.println(F("Failed"));
//  } else {
//    Serial.println(F("OK!"));
//  }

  // 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!");
}