Error library Arduino Nano RP2040 Connect with Blynk Edgent MKR1010

Hello,

I try to run an Arduino Nano RP2040 Connect with the default code of Blynk Edgent MKR1010 and when I compile my code, the Arduino IDE shows me a long error code. I use version 1.1.0 of the Blynk library and I program on macOS.

Here are my libraries that I use:

Arduino_LSM6DSOX.h
WiFiNINA_Generic.h
BlynkSimpleWiFiNINA_RP2040_WM.h
SPI.h
WiFiNINA.h
rp2040.h
SFU.h
Blynk.h
BlynkWidgets.h
WiFiClient.h
utility
FlashStorage.h
Adafruit_NeoPixel.h
Ticker.h
pthread.h
Timer5.h
ArduinoOTA.h
ArduinoHttpClient.h

Here is part of the code of the “BlynkEdgent.h” tab :

#include <WiFiNINA_Generic.h>


#include <BlynkSimpleWiFiNINA_RP2040_WM.h>


extern "C" {
  void app_loop();
  void restartMCU();
}

#include "Settings.h"
#include <SPI.h>
#include <WiFiNINA.h>
#include <rp2040.h>
#include <SFU.h>

#define BLYNK_SEND_ATOMIC
//#define BLYNK_USE_SSL

#include <Blynk.h>
#include <Adapters/BlynkWiFiCommon.h>

WiFiSSLClient _blynkWifiClient;
//WiFiClient _blynkWifiClient;

BlynkArduinoClient _blynkTransport(_blynkWifiClient);
BlynkWifiCommon Blynk(_blynkTransport);

And here is the error code I get when I compile my code:


In file included from /Users/**********/Documents/Arduino/Blynk_edgent_test_rp2040/Blynk_edgent_test_rp2040.ino:25:0:
BlynkEdgent.h:28:38: error: redefinition of 'BlynkWifiCommon Blynk'
 BlynkWifiCommon Blynk(_blynkTransport);
                                      ^
In file included from /Users/**********/Documents/Arduino/Blynk_edgent_test_rp2040/BlynkEdgent.h:4:0,
                 from /Users/**********/Documents/Arduino/Blynk_edgent_test_rp2040/Blynk_edgent_test_rp2040.ino:25:
/Users/**********/Documents/Arduino/libraries/Blynk_WiFiNINA_WM/src/BlynkSimpleWiFiNINA_RP2040_WM.h:2561:17: note: 'BlynkWifiCommon Blynk' previously declared here
 BlynkWifiCommon Blynk(_blynkTransport);

What could I do to make my code work well?

Thanks

@BenjiRoussi Please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

Copy and paste these if you can’t find the correct symbol on your keyboard.

Pete.

@PeteKnight Thank you, this is the first time I have published a topic on Blynk so I have a little difficulty and thank you for the quick response!

It seems that you also have difficulty following instructions like…

Please edit your post again, and this time use the correct symbols.

Pete.

@PeteKnight I changed my subject but sorry I’m not sure I understand what you mean.

As well aschanging the subject you’ve changed to the correct triple backtick characters, so the code and your debug message now displays correctly.

We now need to see your main .ino fine in its entirety.

Pete.

Here is the main tab:

/*
 * Required libraries:
 *  - WiFiNINA
 *  - ArduinoOTA
 *  - ArduinoHttpClient
 *  - Timer5
 *  
 * Please also update the WiFi module firmware, if needed
 */

 #include <Arduino_LSM6DSOX.h>

// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "TMPLxxxxxx"
#define BLYNK_DEVICE_NAME "Device"
#define BLYNK_AUTH_TOKEN "Token"

#define BLYNK_FIRMWARE_VERSION        "0.1.0"

#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG

#define APP_DEBUG

#include "BlynkEdgent.h"

void setup()
{
  Serial.begin(115200);
  delay(2000);

  BlynkEdgent.begin();
}

void loop() {
  BlynkEdgent.run();
}

Here is the “BlynkEdgent.h” tab:

#include <WiFiNINA_Generic.h>


#include <BlynkSimpleWiFiNINA_RP2040_WM.h>


extern "C" {
  void app_loop();
  void restartMCU();
}

#include "Settings.h"
#include <SPI.h>
#include <WiFiNINA.h>
#include <rp2040.h>
#include <SFU.h>

#define BLYNK_SEND_ATOMIC
//#define BLYNK_USE_SSL

#include <Blynk.h>
#include <Adapters/BlynkWiFiCommon.h>

WiFiSSLClient _blynkWifiClient;
//WiFiClient _blynkWifiClient;

BlynkArduinoClient _blynkTransport(_blynkWifiClient);
BlynkWifiCommon Blynk(_blynkTransport);

#include <BlynkWidgets.h>

#ifndef BLYNK_NEW_LIBRARY
#error "Old version of Blynk library is in use. Please replace it with the new one."
#endif

#if !defined(BLYNK_TEMPLATE_ID) || !defined(BLYNK_DEVICE_NAME)
#error "Please specify your BLYNK_TEMPLATE_ID and BLYNK_DEVICE_NAME"
#endif

BlynkTimer edgentTimer;

#include "BlynkState.h"
#include "ConfigStore.h"
#include "ResetButton.h"
#include "ConfigMode.h"
#include "Indicator.h"
#include "OTA.h"
#include "Console.h"


inline
void BlynkState::set(State m) {
  if (state != m && m < MODE_MAX_VALUE) {
    DEBUG_PRINT(String(StateStr[state]) + " => " + StateStr[m]);
    state = m;

    // You can put your state handling here,
    // i.e. implement custom indication
  }
}

void printDeviceBanner()
{
  Blynk.printBanner();
  DEBUG_PRINT("--------------------------");
  DEBUG_PRINT(String("Product:  ") + BLYNK_DEVICE_NAME);
  DEBUG_PRINT(String("Firmware: ") + BLYNK_FIRMWARE_VERSION " (build " __DATE__ " " __TIME__ ")");
  if (configStore.getFlag(CONFIG_FLAG_VALID)) {
    DEBUG_PRINT(String("Token:    ") +
                String(configStore.cloudToken).substring(0,4) +
                " - •••• - •••• - ••••");
  }
  DEBUG_PRINT(String("Device:   ") + BLYNK_INFO_DEVICE);
  DEBUG_PRINT(String("WiFi FW:  ") + WiFi.firmwareVersion());
  DEBUG_PRINT("--------------------------");
}

void runBlynkWithChecks() {
  Blynk.run();
  if (BlynkState::get() == MODE_RUNNING) {
    if (!Blynk.connected()) {
      if (WiFi.status() == WL_CONNECTED) {
        BlynkState::set(MODE_CONNECTING_CLOUD);
      } else {
        BlynkState::set(MODE_CONNECTING_NET);
      }
    }
  }
}

class Edgent {

public:
  void begin()
  {
    indicator_init();
    button_init();
    config_init();
    printDeviceBanner();
    console_init();

    if (configStore.getFlag(CONFIG_FLAG_VALID)) {
      BlynkState::set(MODE_CONNECTING_NET);
    } else if (config_load_blnkopt()) {
      DEBUG_PRINT("Firmware is preprovisioned");
      BlynkState::set(MODE_CONNECTING_NET);
    } else {
      BlynkState::set(MODE_WAIT_CONFIG);
    }
  }

  void run() {
    app_loop();
    switch (BlynkState::get()) {
    case MODE_WAIT_CONFIG:       
    case MODE_CONFIGURING:       enterConfigMode();    break;
    case MODE_CONNECTING_NET:    enterConnectNet();    break;
    case MODE_CONNECTING_CLOUD:  enterConnectCloud();  break;
    case MODE_RUNNING:           runBlynkWithChecks(); break;
    case MODE_OTA_UPGRADE:       enterOTA();           break;
    case MODE_SWITCH_TO_STA:     enterSwitchToSTA();   break;
    case MODE_RESET_CONFIG:      enterResetConfig();   break;
    default:                     enterError();         break;
    }
  }

} BlynkEdgent;

void app_loop() {
    edgentTimer.run();
    edgentConsole.run();
}

And the other tabs have not been changed so they are by default.

I’m very confused by this….

and then your .ino file has only one library included…

Am I misunderstanding your post, or do you have other files (tabs) that you’ve added that have other library includes in them?

BTW, these threes lines of code should be the first in your sketch…

So your #include <Arduino_LSM6DSOX.h> should be below these.

Pete.

I just tried with these libraries in the original .ino and the error code still appears.

Arduino_LSM6DSOX.h
WiFiNINA_Generic.h
BlynkSimpleWiFiNINA_RP2040_WM.h
rp2040.h
SFU.h

Check the supported boards list
https://docs.blynk.io/en/blynk.edgent-firmware-api/supported-boards

That didn’t answer my question.

Pete.

Yes, I have other files but they are only the basic ones in the Blynk library example (blynkedgent mkr1010) and I have not added other libraries.

In that case, I have no idea what your “Here are my libraries that I use:” part of your initial post was all about.

I’d suggest that you take a clean copy of the initial Edgent example, add-in your Template ID etc and compile it.

Pete.

That’s exactly what I did and it doesn’t work but when I put in “board type” “ardurino NANO 33 IoT” on the arduino IDE, I manage to have it compile the board but I am unable to upload it to my arduino nano rp2040 connect board.

I don’t understand this statement.

Have you checked if this hardware is supported in Blynk, and whether it is compatible with the MKR1010 software libraries?

Pete.

Yes, but that’s why I’m not able to compile my code with an arduino nano rp2040 connect and I’m able to do it with an arduino nano 33 IoT. The problem is that I don’t have an arduino nano 33 IoT.

Thanks @John93 and @PeteKnight.
My arduino nano rp2040 connect is not compatible with the exemple « Blynk edgent mkr1010 ».
Now I try with « rp2040_WIFININA_WM » like Blynk example but still can’t compile…
Any idea why?

Here is my code below:

Here is the tab « RP2040_WiFiNINA_WM »:

include "defines.h"
#include "Credentials.h"
#include "dynamicParams.h"

void heartBeatPrint(void)
{
  static int num = 1;

  if (Blynk.connected())
  {
    Serial.print("B");
    Blynk.virtualWrite(V0, "OK");
  }
  else
  {
    Serial.print("F");
  }

  if (num == 80)
  {
    Serial.println();
    num = 1;
  }
  else if (num++ % 10 == 0)
  {
    Serial.print(" ");
  }
}

void check_status()
{
  static unsigned long checkstatus_timeout = 0;

#define STATUS_CHECK_INTERVAL     10000L

  // Send status report every STATUS_REPORT_INTERVAL (10) seconds: we don't need to send updates frequently if there is no status change.
  if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0))
  {
    // report status to Blynk
    heartBeatPrint();

    checkstatus_timeout = millis() + STATUS_CHECK_INTERVAL;
  }
}

void setup()
{
  // Debug console
  Serial.begin(115200);
  while (!Serial);
  //delay(1000);

  Serial.print("\nStart RP2040_WiFiNINA_WM using WiFiNINA_Shield on ");
  Serial.println(BOARD_NAME);

#if USE_BLYNK_WM
  Serial.println(BLYNK_WIFININA_WM_VERSION);
  Serial.println(DOUBLERESETDETECTOR_GENERIC_VERSION);
  
  Serial.println(F("Start Blynk_WM"));
  Blynk.setConfigPortalIP(IPAddress(192, 168, 120, 1));
  //Blynk.setConfigPortal("RP2040", "MyRP2040");
  //Blynk.begin("RP2040-WiFiNINA");
  Blynk.begin(HOST_NAME);
#else
  Serial.println(F("Start Blynk"));
  Blynk.begin(auth, ssid, pass, BlynkServer.c_str(), BLYNK_SERVER_HARDWARE_PORT);
#endif
}

#if (USE_BLYNK_WM && USE_DYNAMIC_PARAMETERS)
void displayCredentials()
{
  Serial.println("\nYour stored Credentials :");

  for (uint16_t i = 0; i < NUM_MENU_ITEMS; i++)
  {
    Serial.print(myMenuItems[i].displayName);
    Serial.print(F(" = "));
    Serial.println(myMenuItems[i].pdata);
  }
}

void displayCredentialsInLoop()
{
  static bool displayedCredentials = false;

  if (!displayedCredentials)
  {
    for (int i = 0; i < NUM_MENU_ITEMS; i++)
    {
      if (!strlen(myMenuItems[i].pdata))
      {
        break;
      }

      if ( i == (NUM_MENU_ITEMS - 1) )
      {
        displayedCredentials = true;
        displayCredentials();
      }
    }
  }
}
#endif

void loop()
{
  Blynk.run();
  check_status();

#if (USE_BLYNK_WM && USE_DYNAMIC_PARAMETERS)
  displayCredentialsInLoop();
#endif
}

Here is the tab « Credentials.h »:

#ifndef Credentials_h
#define Credentials_h

#if USE_BLYNK_WM

/// Start Default Config Data //////////////////

/*
  // Defined in <BlynkSimpleWiFiNINA_RP2040_WM.h>

  #define SSID_MAX_LEN      32
  #define PASS_MAX_LEN      64
  
  typedef struct
  {
  char wifi_ssid[SSID_MAX_LEN];
  char wifi_pw  [PASS_MAX_LEN];
  }  WiFi_Credentials;

  #define BLYNK_SERVER_MAX_LEN      32
  #define BLYNK_TOKEN_MAX_LEN       36

  typedef struct
  {
  char blynk_server[BLYNK_SERVER_MAX_LEN];
  char blynk_token [BLYNK_TOKEN_MAX_LEN];
  }  Blynk_Credentials;

  #define NUM_WIFI_CREDENTIALS      2
  #define NUM_BLYNK_CREDENTIALS     2

  typedef struct Configuration
  {
  char header         [16];
  WiFi_Credentials  WiFi_Creds  [NUM_WIFI_CREDENTIALS];
  Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
  int  blynk_port;
  char board_name     [24];
  int  checkSum;
  } Blynk_WM_Configuration;

*/

//bool LOAD_DEFAULT_CONFIG_DATA = true;
bool LOAD_DEFAULT_CONFIG_DATA = false;

Blynk_WM_Configuration defaultConfig =
{
  //char header[16], dummy, not used
#if USE_SSL  
  "SSL",
#else
  "NonSSL",
#endif
  //WiFi_Credentials  WiFi_Creds  [NUM_WIFI_CREDENTIALS]
  //WiFi_Creds.wifi_ssid and WiFi_Creds.wifi_pw
  "SSID1", "password1",
  "SSID2", "password2",
  // Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
  // Blynk_Creds.blynk_server and Blynk_Creds.blynk_token
  "account.ddns.net",     "token",
  "account.duckdns.org",  "token1", 
  //int  blynk_port;
#if USE_SSL
  9443,
#else
  8080,
#endif
  //char board_name     [24];
  "Air-Control",
  //int  checkSum, dummy, not used
  0
};

/////////// End Default Config Data /////////////

#endif    //#if USE_BLYNK_WM

#endif    //Credentials_h

Here is the tab « defines.h »:

#ifndef defines_h
#define defines_h

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial

#define DEBUG_WIFI_WEBSERVER_PORT Serial
#define WIFININA_DEBUG_OUTPUT     Serial

#define DRD_GENERIC_DEBUG         true
#define WIFININA_DEBUG            true
#define BLYNK_WM_DEBUG            3
#define _WIFININA_LOGLEVEL_       3

#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) || \
      defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) )
  #if defined(WIFININA_USE_RP2040)
    #undef WIFININA_USE_RP2040
    #undef WIFI_USE_RP2040
  #endif
  #define WIFININA_USE_RP2040      true
  #define WIFI_USE_RP2040          true
#else
  #error This code is intended to run only on the RP2040-based boards ! Please check your Tools->Board setting.
#endif

#if defined(WIFININA_USE_RP2040) && defined(ARDUINO_ARCH_MBED)

  #warning Using ARDUINO_ARCH_MBED
  
  #if ( defined(ARDUINO_NANO_RP2040_CONNECT)    || defined(ARDUINO_RASPBERRY_PI_PICO) || \
        defined(ARDUINO_GENERIC_RP2040) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) )
    // Only undef known BOARD_NAME to use better one
    #undef BOARD_NAME
  #endif
  
  #if defined(ARDUINO_RASPBERRY_PI_PICO)
    #define BOARD_NAME      "MBED RASPBERRY_PI_PICO"
  #elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040)
    #define BOARD_NAME      "MBED ADAFRUIT_FEATHER_RP2040"
  #elif defined(ARDUINO_GENERIC_RP2040)
    #define BOARD_NAME      "MBED GENERIC_RP2040"
  #elif defined(ARDUINO_NANO_RP2040_CONNECT) 
    #define BOARD_NAME      "MBED NANO_RP2040_CONNECT"
  #else
    // Use default BOARD_NAME if exists
    #if !defined(BOARD_NAME)
      #define BOARD_NAME      "MBED Unknown RP2040"
    #endif
  #endif

#endif

#define USE_BLYNK_WM      true
//#define USE_BLYNK_WM      false

#define USE_SSL             false

#if USE_BLYNK_WM

  /////////////////////////////////////////////

  /////////////////////////////////////////////

  // Add customs headers from v1.1.0
  #define USING_CUSTOMS_STYLE           true
  #define USING_CUSTOMS_HEAD_ELEMENT    true
  #define USING_CORS_FEATURE            true
  
  /////////////////////////////////////////////
  
  // Permit running CONFIG_TIMEOUT_RETRYTIMES_BEFORE_RESET times before reset hardware
  // to permit user another chance to config. Only if Config Data is valid.
  // If Config Data is invalid, this has no effect as Config Portal will persist
  #define RESET_IF_CONFIG_TIMEOUT                   true
  
  // Permitted range of user-defined RETRY_TIMES_RECONNECT_WIFI between 2-5 times
  #define RETRY_TIMES_RECONNECT_WIFI                3
  
  // Permitted range of user-defined CONFIG_TIMEOUT_RETRYTIMES_BEFORE_RESET between 2-100
  #define CONFIG_TIMEOUT_RETRYTIMES_BEFORE_RESET    5
  
  // Config Timeout 120s (default 60s). Applicable only if Config Data is Valid
  #define CONFIG_TIMEOUT                      120000L
  
  // Permit input only one set of WiFi SSID/PWD. The other can be "NULL or "blank"
  // Default is false (if not defined) => must input 2 sets of SSID/PWD
  #define REQUIRE_ONE_SET_SSID_PW             true
  
  #define USE_DYNAMIC_PARAMETERS              true
  
  /////////////////////////////////////////////
  
  #define SCAN_WIFI_NETWORKS                  true
  
  // To be able to manually input SSID, not from a scanned SSID lists
  #define MANUAL_SSID_INPUT_ALLOWED           true
  
  // From 2-15
  #define MAX_SSID_IN_LIST                    8
  
  /////////////////////////////////////////////

  #include <BlynkSimpleWiFiNINA_RP2040_WM.h>

#else
  #include <BlynkSimpleWiFiNINA_RP2040.h>
  
  #define USE_LOCAL_SERVER      true
  
  #if USE_LOCAL_SERVER
    char auth[] = "****";
    String BlynkServer = "account.duckdns.org";
    
    //String BlynkServer = "192.168.2.112";
  #else
    char auth[] = "****";
    String BlynkServer = "blynk-cloud.com";
  #endif
  
  #define BLYNK_SERVER_HARDWARE_PORT    8080
  
  // Your WiFi credentials.
  //char ssid[] = "****";
  //char pass[] = "****";
  
  char ssid[] = "HueNet1";
  char pass[] = "****";

#endif

#define HOST_NAME   "RP2040-WiFiNINA"

#endif      //defines_h

Here is the tab « dynamicParams.h »:

#ifndef dynamicParams_h
#define dynamicParams_h

#if USE_BLYNK_WM

#define USE_DYNAMIC_PARAMETERS      true

/////////////// Start dynamic Credentials ///////////////

//Defined in <BlynkSimpleWiFiNINA_RP2040_WM.h>
/**************************************
  #define MAX_ID_LEN                5
  #define MAX_DISPLAY_NAME_LEN      16

  typedef struct
  {
  char id             [MAX_ID_LEN + 1];
  char displayName    [MAX_DISPLAY_NAME_LEN + 1];
  char *pdata;
  uint8_t maxlen;
  } MenuItem;
**************************************/

#if USE_DYNAMIC_PARAMETERS

#define MAX_MQTT_SERVER_LEN      34
char MQTT_Server  [MAX_MQTT_SERVER_LEN + 1]   = "default-mqtt-server";

#define MAX_MQTT_PORT_LEN        6
char MQTT_Port   [MAX_MQTT_PORT_LEN + 1]  = "1883";

#define MAX_MQTT_USERNAME_LEN      34
char MQTT_UserName  [MAX_MQTT_USERNAME_LEN + 1]   = "default-mqtt-username";

#define MAX_MQTT_PW_LEN        34
char MQTT_PW   [MAX_MQTT_PW_LEN + 1]  = "default-mqtt-password";

#define MAX_MQTT_SUBS_TOPIC_LEN      34
char MQTT_SubsTopic  [MAX_MQTT_SUBS_TOPIC_LEN + 1]   = "default-mqtt-SubTopic";

#define MAX_MQTT_PUB_TOPIC_LEN       34
char MQTT_PubTopic   [MAX_MQTT_PUB_TOPIC_LEN + 1]  = "default-mqtt-PubTopic";

MenuItem myMenuItems [] =
{
  { "mqtt", "MQTT Server",      MQTT_Server,      MAX_MQTT_SERVER_LEN },
  { "mqpt", "Port",             MQTT_Port,        MAX_MQTT_PORT_LEN   },
  { "user", "MQTT UserName",    MQTT_UserName,    MAX_MQTT_USERNAME_LEN },
  { "mqpw", "MQTT PWD",         MQTT_PW,          MAX_MQTT_PW_LEN },
  { "subs", "Subs Topics",      MQTT_SubsTopic,   MAX_MQTT_SUBS_TOPIC_LEN },
  { "pubs", "Pubs Topics",      MQTT_PubTopic,    MAX_MQTT_PUB_TOPIC_LEN },
};

uint16_t NUM_MENU_ITEMS = sizeof(myMenuItems) / sizeof(MenuItem);  //MenuItemSize;

#else

MenuItem myMenuItems [] = {};

uint16_t NUM_MENU_ITEMS = 0;

#endif    //USE_DYNAMIC_PARAMETERS

/////// // End dynamic Credentials ///////////

#endif      //USE_BLYNK_WM

#endif      //dynamicParams_h

And here is de error code:

/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:166:12: error: 'Timer' does not name a type; did you mean 'time'?
     static Timer  blynk_millis_timer;
            ^~~~~
            time
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:167:12: error: 'Ticker' does not name a type; did you mean 'Socket'?
     static Ticker blynk_waker;
            ^~~~~~
            Socket
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp: In function 'void BlynkSystemInit()':
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:177:9: error: 'blynk_waker' was not declared in this scope
         blynk_waker.attach(&blynk_wake, 2.0);
         ^~~~~~~~~~~
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:177:9: note: suggested alternative: 'blynk_wake'
         blynk_waker.attach(&blynk_wake, 2.0);
         ^~~~~~~~~~~
         blynk_wake
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:178:9: error: 'blynk_millis_timer' was not declared in this scope
         blynk_millis_timer.start();
         ^~~~~~~~~~~~~~~~~~
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:178:9: note: suggested alternative: 'millis_time_t'
         blynk_millis_timer.start();
         ^~~~~~~~~~~~~~~~~~
         millis_time_t
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp: In function 'void BlynkDelay(millis_time_t)':
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:183:9: error: 'wait_ms' was not declared in this scope
         wait_ms(ms);
         ^~~~~~~
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:183:9: note: suggested alternative: 'wait_ns'
         wait_ms(ms);
         ^~~~~~~
         wait_ns
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp: In function 'millis_time_t BlynkMillis()':
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:188:16: error: 'blynk_millis_timer' was not declared in this scope
         return blynk_millis_timer.read_ms();
                ^~~~~~~~~~~~~~~~~~
/Users/**********/Documents/Arduino/libraries/Blynk/src/utility/BlynkDebug.cpp:188:16: note: suggested alternative: 'millis_time_t'
         return blynk_millis_timer.read_ms();
                ^~~~~~~~~~~~~~~~~~
                millis_time_t

I’d suggest using esp32 instead, it’s cheaper, more powerful, and compatible with almost every IOT platform available.

1 Like

Pete.