I made a very simple sketch and I defined 2 functions to use with aREST.
I use an Arduino UNO with Ethernet shield.
I use VSCode with PlatformIO.
The first function is working as expected, only if I don't call it with a query string, BUT if I pass it a query string, the second function is called instead.
The second function doesn't read params I pass to it: the params string is just empty.
Source code:
`
include
include
include
include
include <avr/wdt.h>
define PORT 1977
// Enter a MAC address for your controller below.
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0xFE, 0x40};
// IP address in case DHCP fails
IPAddress ip(192, 168, 1, 77);
// Ethernet server
EthernetServer server(PORT);
// Create aREST instance
aREST rest = aREST();
// Variables to be exposed to the API
int ev1, ev2, ev3;
boolean sd;
// Declare functions to be exposed to the API
int StartSD(String);
int AFunction(String);
void setup(void)
{
// Start Serial
Serial.begin(9600);
while (!Serial)
{
;
}
pinMode(10, OUTPUT);
// Init variables and expose them to REST API
sd = false;
ev1 = HIGH;
ev2 = HIGH;
ev3 = HIGH;
I made a very simple sketch and I defined 2 functions to use with aREST. I use an Arduino UNO with Ethernet shield. I use VSCode with PlatformIO.
The first function is working as expected, only if I don't call it with a query string, BUT if I pass it a query string, the second function is called instead. The second function doesn't read params I pass to it: the params string is just empty.
Source code: `
include
include
include
include
include <avr/wdt.h>
define PORT 1977
// Enter a MAC address for your controller below. byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0xFE, 0x40};
// IP address in case DHCP fails IPAddress ip(192, 168, 1, 77);
// Ethernet server EthernetServer server(PORT);
// Create aREST instance aREST rest = aREST();
// Variables to be exposed to the API int ev1, ev2, ev3; boolean sd;
// Declare functions to be exposed to the API int StartSD(String); int AFunction(String);
void setup(void) { // Start Serial Serial.begin(9600); while (!Serial) { ; }
pinMode(10, OUTPUT);
// Init variables and expose them to REST API sd = false; ev1 = HIGH; ev2 = HIGH; ev3 = HIGH;
// rest.variable("humidity", &humidity); rest.variable("ev1", &ev1); rest.variable("ev2", &ev2); rest.variable("ev3", &ev3); rest.variable("sd", &sd);
// Function to be exposed char init[] = "init"; char prova[] = "prova"; rest.function(init, StartSD); rest.function(prova, AFunction);
// Give name & ID to the device (ID should be 6 characters long) static const char name[] = "ev"; rest.set_id("008"); rest.set_name(name);
// Start the Ethernet connection and the server Ethernet.begin(mac, ip);
server.begin(); Serial.print("server is at "); Serial.print(Ethernet.localIP()); Serial.print(":"); Serial.println(String(PORT));
// Start watchdog wdt_enable(WDTO_4S); }
void loop() {
// listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.print("client connected "); Serial.println(client.remoteIP()); rest.handle(client); } wdt_reset(); }
// Custom function accessible by the API int StartSD(String params) { Serial.print("Parameters: "); Serial.println(params);
if (!sd) { if (SD.begin(4)) { sd = true; Serial.println("Init SD: OK"); return 1; } else { sd = false; Serial.println("Init SD: error"); return 0; } } else { Serial.println("Init SD: already init"); return 1; } }
int AFunction(String params) { Serial.print("Function Params: "); Serial.println(params); return 1; } `