Please note: Friday June 18 is a holiday celebrating Juneteenth, please allow extra time for your order to arrive and plan accordingly.
0

Uploading time in dafruit MQTT Library ESP8266 Example
Moderators: adafruit_support_bill, adafruit

Forum rules
If you're posting code, please make sure your code does not include your Adafruit IO Active Key or WiFi network credentials.
Please be positive and constructive with your questions and comments.

Uploading time in dafruit MQTT Library ESP8266 Example

by weal on Mon Jun 07, 2021 2:12 am

In "Adafruit MQTT Library ESP8266 Example", Where I can Control the time of uploading data to Adafruit Io?

weal
 
Posts: 66
Joined: Sun Sep 29, 2019 12:30 am

Re: Uploading time in dafruit MQTT Library ESP8266 Example

by brubell on Mon Jun 07, 2021 9:18 am

weal wrote:In "Adafruit MQTT Library ESP8266 Example", Where I can Control the time of uploading data to Adafruit Io?

Could you please link the example which you're referencing?

brubell
 
Posts: 1381
Joined: Fri Jul 17, 2015 10:33 pm

Re: Uploading time in dafruit MQTT Library ESP8266 Example

by weal on Mon Jun 07, 2021 9:31 am

Thank you for your support.
I don't know where is the part where I can set time for both Subscribe and publish.
EX: I want to publish the data after 10 min. and Subscribe the Data after 1 secound.
Also, I have a delay with the toggle button. I want to reduce it.
Also, How to control Subscribe or publish of one feed than others?
Code: Select all | TOGGLE FULL SIZE
/***************************************************
  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       "...your SSID..."
#define WLAN_PASS       "...your password..."

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

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL
#define AIO_USERNAME    "...your AIO username (see https://accounts.adafruit.com)..."
#define AIO_KEY         "...your AIO key..."

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

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

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

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

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

// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onoff");

/*************************** 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);

  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(&onoffbutton);
}

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 == &onoffbutton) {
      Serial.print(F("Got: "));
      Serial.println((char *)onoffbutton.lastread);
    }
  }

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

weal
 
Posts: 66
Joined: Sun Sep 29, 2019 12:30 am

Re: Uploading time in dafruit MQTT Library ESP8266 Example

by brubell on Fri Jun 11, 2021 9:43 am

EX: I want to publish the data after 10 min. and Subscribe the Data after 1 secound.


After feedName.publish(value), you may add a call to delay (https://www.arduino.cc/reference/en/lan ... ime/delay/). Note that delay() is in milliseconds, you'll need to convert 10 mins to milliseconds (600000 ms)

brubell
 
Posts: 1381
Joined: Fri Jul 17, 2015 10:33 pm

Re: Uploading time in dafruit MQTT Library ESP8266 Example

by weal on Fri Jun 11, 2021 10:08 am

Thank you for your information.
But, In the case of using delay() after each feed Name. publish(value). I will get latency and it will reduce the efficiency of the program, Right?.
Especially, when using the button(as subscribe).
Is it better to delay() is only once at end of the program?
I want to reduce the latency that happens when I push the button without flooding the platform.

weal
 
Posts: 66
Joined: Sun Sep 29, 2019 12:30 am

Re: Uploading time in dafruit MQTT Library ESP8266 Example

by brubell on Mon Jun 14, 2021 9:52 am

I will get latency and it will reduce the efficiency of the program, Right?.
Especially, when using the button(as subscribe).


Correct, you can place a delay at the end of the loop() as well to prevent this.

brubell
 
Posts: 1381
Joined: Fri Jul 17, 2015 10:33 pm

Please be positive and constructive with your questions and comments.