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