我正在使用以太网模块,使用Cayenne-Arduino-Library和arduino_uip上传数据到服务器。我想要从CayenneEthernet.h中读取
我收到了这个错误:
错误:无法忽略的空值。
问题:
如何正确返回数组?
更新:
在搜索后,发现
之后,会在BlynkProtocol.h上调用此begin函数。
在此之后,会在BlynkEthernet.h上调用begin()函数。
这个 `begin()` 最终在 BlynkArduinoClient.h 上被调用。
myip[]
。// DHCP with domain
void begin(const char* auth,
const char* domain = BLYNK_DEFAULT_DOMAIN,
uint16_t port = BLYNK_DEFAULT_PORT,
const byte mac[] = _blynkEthernetMac)
{
BLYNK_LOG("Here we are");// I added this to find this function.
...
IPAddress myip = Ethernet.localIP();
BLYNK_LOG("My IP: %d.%d.%d.%d", myip[0], myip[1], myip[2], myip[3]);
}
编辑:
// DHCP with domain
int* begin(const char* auth,
const char* domain = BLYNK_DEFAULT_DOMAIN,
uint16_t port = BLYNK_DEFAULT_PORT,
const byte mac[] = _blynkEthernetMac)
{
...
IPAddress myip = Ethernet.localIP();
BLYNK_LOG("My IP: %d.%d.%d.%d", myip[0], myip[1], myip[2], myip[3]);
return myip;
}
Arduino 代码:
#define CAYENNE_DEBUG // Uncomment to show debug messages
#define CAYENNE_PRINT Serial // Comment this out to disable prints and save space
#include <CayenneDefines.h>
#include <UIPEthernet.h>
#include <BlynkSimpleUIPEthernet.h>
#include <CayenneEthernetClient.h>
#define VIRTUAL_PIN V1
#define VIRTUAL_PIN V0
...
void setup(){
...
int *A=Cayenne.begin(token);
...
}
void loop(){
...
}
我收到了这个错误:
错误:无法忽略的空值。
问题:
如何正确返回数组?
更新:
在搜索后,发现
Cayenne.begin()
的定义在 CayenneEthernetClient.h 中。class CayenneEthernetClient : public CayenneClient
{
public:
void begin(const char* token, const byte mac[] = NULL)
{
BLYNK_LOG("HERE WE ARE 3");
Blynk.begin(token, CAYENNE_DOMAIN, CAYENNE_PORT, GetMACAddress(token, mac));
}
private:
const byte* GetMACAddress(const char* token, const byte mac[])
{
...
return _mac;
}
byte _mac[6];
};
CayenneEthernetClient Cayenne;
之后,会在BlynkProtocol.h上调用此begin函数。
private:
int readHeader(BlynkHeader& hdr);
uint16_t getNextMsgId();
protected:
void begin(const char* auth) {
BLYNK_LOG("HERE WE ARE 2");
this->authkey = auth;
}
bool processInput(void);
在此之后,会在BlynkEthernet.h上调用begin()函数。
// DHCP with domain
void begin( const char* auth,
const char* domain = BLYNK_DEFAULT_DOMAIN,
uint16_t port = BLYNK_DEFAULT_PORT,
const byte mac[] = _blynkEthernetMac)
{
Base::begin(auth);
BLYNK_LOG("Getting IP...");
BLYNK_LOG("HERE WE ARE 1");
if (!Ethernet.begin((byte*)mac)) {
BLYNK_FATAL("DHCP Failed!");
}
// give the Ethernet shield a second to initialize:
::delay(1000);
this->conn.begin(domain, port);
IPAddress myip = Ethernet.localIP();
BLYNK_LOG("My IP: %d.%d.%d.%d", myip[0], myip[1], myip[2], myip[3]);
}
这个 `begin()` 最终在 BlynkArduinoClient.h 上被调用。
void begin(const char* d, uint16_t p) {
BLYNK_LOG("HERE WE ARE 9");
domain = d;
port = p;
}
串行监视器上的输出:
[75] HERE WE ARE 3
[76] MAC: FE-9D-D2-DD-A3-A0
[76] HERE WE ARE 2
[77] Getting IP...
[80] HERE WE ARE 1
[5385] HERE WE ARE 9
[5386] My IP: 10.42.0.162
begin
(从CayenneEthernetClient
开始)从void
更改为返回int *
。 - Gili Levy