Monday, 15 February 2010

Arduino Wifi Shield connections die after a few seconds of inactivity -



Arduino Wifi Shield connections die after a few seconds of inactivity -

i have bought arduino wifi shield , have updated firmware latest version available.

i using webduino create kind of web service can check pin's statuses , set values high or low.

everything work fine first seconds, after few seconds of inactivity, can see reddish error led turns on , later, when recovers connection network cannot communicate 1 time again shield , have restart arduino board.

i have checked many posts in forums , have seen there more people same issue. many of them talk issue in relation firmware, looks there bug causing issue.

does have thought why happening? point me right direction?

you can see source code attached, maybe can see wrong.

#include <spi.h> #include <wifi.h> #include <streaming.h> #define webduino_serial_debugging 1 #include <webserver.h> #include <sha1.h> char ssid[] = "******"; char pass[] = "******"; ipaddress ip(192,168,1,210); int status = wl_idle_status; unsigned long sessionid; #define webduino_method_not_allowed_message "<h1>405 requested method not supported resource</h1>" #define credentials "********" #define prefix "" #define analog_pins_available 5 #define digital_pins_available 9 webserver webserver(prefix, 80); void welcome(webserver &server) { p(welcomemsg1) = "http/1.0 200 ok" crlf; server.printp(welcomemsg1); p(welcomemsg2) = "content-type: text/html" crlf crlf "<h1>welcome web service</h1>"; server.printp(welcomemsg2); } void httpmethodnotallowed(webserver &server) { p(methodnotallowedmsg1) = "http/1.0 405 method not allowed" crlf; server.printp(methodnotallowedmsg1); p(methodnotallowedmsg2) = "content-type: text/html" crlf crlf webduino_method_not_allowed_message; server.printp(methodnotallowedmsg2); } void pinvaluesjson(webserver &server) { char sessionidheader[21]; sprintf(sessionidheader, "sessionid: %lu" crlf, sessionid); server.httpsuccess("application/json; charset=utf-8", sessionidheader); server << "{"; server << "\"d2\":" << digitalread(2) << ","; server << "\"d3\":" << digitalread(3) << ","; server << "\"d5\":" << digitalread(5) << ","; server << "\"d6\":" << digitalread(6); server << "}"; } void write(char *pin, char *value) { if (pin[0] == 'a') { analogwrite(strtoul(pin + 1, null, 10), strtoul(value, null, 10)); } else if (pin[0] == 'd') { digitalwrite(strtoul(pin + 1, null, 10), strtoul(value, null, 10)); } } void defaultcmd(webserver &server, webserver::connectiontype type, char *url_tail, bool tail_complete) { if (server.checkcredentials(credentials)) { if (type == webserver::get) { welcome(server); } else { httpmethodnotallowed(server); } } else { server.httpunauthorized(); } } void pinscmd(webserver &server, webserver::connectiontype type, char *url_tail, bool tail_complete) { #define pinlen 5 #define valuelen 5 if (server.checkcredentials(credentials)) { if (type == webserver::get) { pinvaluesjson(server); } else if (type == webserver::put) { bool repeat; char pin[pinlen]; char value[valuelen]; { repeat = server.readpostparam(pin, pinlen, value, valuelen); write(pin, value); } while (repeat); pinvaluesjson(server); } } else { server.httpunauthorized(); } } void setup() { randomseed(analogread(0)); sessionid = random(999999999); /* pins * 13: sck * 12: miso * 11: mosi * 10: ss wifi * 9: l9 (yellow) => informational led * 7: handshake between shield , arduino * 4: ss sd card */ /* when sd card peripheral not beingness used, it's necessary set pin 4 output , write high */ pinmode(4, output); digitalwrite(4, high); /* socket pins */ pinmode(2, output); digitalwrite(2, low); pinmode(3, output); digitalwrite(3, low); pinmode(5, output); digitalwrite(5, low); pinmode(6, output); digitalwrite(6, low); wifi.config(ip); while (status != wl_connected) { // connect wpa/wpa2 network. alter line if using open or wep network: status = wifi.begin(ssid, pass); delay(4000); } webserver.setdefaultcommand(&defaultcmd); webserver.addcommand("pins", &pinscmd); /* start webserver */ webserver.begin(); digitalwrite(8, high); } void loop() { /* process incoming connections 1 @ time forever */ webserver.processconnection(); }

arduino wifi firmware webduino

No comments:

Post a Comment