#include void setup() { // put your setup code here, to run once: wifiDelay(10000); //wait a good amount of time for moduel to connect to wifi - this script assumes it can connect and doesn't check Serial.begin(600); /*========================================================== = NOTE: This assumes you have used the wifi module = = web interface to set it up as a client and 600 baud = = See the wifi shield page for more info. = = = = NOTE YOU MAY NEED TO CHANGE THE begin STATEMENT AND = = THE MODULE TO A LOWER BAUD IF YOU EXPERIENCE SCRAMBLED= = OUTPUT - see notes in the wiki on how to set these = = = = If not useing DigiKeyboard change wifiDelay as noted = ==========================================================*/ if(wifiConnect(F("requestb.in"))){ //host wrapped in F() to save ram if(wifiSendPost(F("requestb.in"),F("/12tefnq1"),F("test=test123"))){ //host and path and parameters wrapped in F() to save ram //uncomment one of the three test methods below to try one out, only one will work at a time //you could also just ignore all of this - we know we got headers back so we're probably good and out data was sent //TODO: read the status code to be sure /* //YOU CAN READ IT OUT ONE CHAR AT A TIME AND PRINT IT while(!Serial.available()){wifiDelay(10);} //wait for some data while(Serial.available()){ //as long as there is data read it and do something with it DigiKeyboard.write(Serial.read()); //in this case we just type it out } */ /* //OR YOU CAN FIND SOMETHING AND THEN READ AFTER THAT //try this with ip.jsontest.com //See also: Serial.findUntil, Serial.readBytesUntil, Serial.readStringUntil, Serial.find, etc Serial.find(": \""); //find the start of where the ip is shown String ip = Serial.readStringUntil('"'); //read until the end of the ip which is the " DigiKeyboard.print(ip); //type it out for the demo */ /* //OR YOU CAN GRAB IT ALL AT ONCE //ASSUMING THE BODY ISN'T LARGER THAN AVAILABLE RAME String body = Serial.readString(); //read it all to a string DigiKeyboard.print(body.trim()); //type it out for the demo - but first trim the whitespace off the start and end */ } else{ //we didn't get a response to our GET - something failed DigiKeyboard.write('1'); } } else{ //we couldn't talk to the wifi module properly - see wifiConnect for possible break points DigiKeyboard.write('2'); } } void loop() { // put your main code here, to run repeatedly: } void wifiDelay(long time){ /* If you are not using DigiKeyboard in you sketch change this by commenting out the DigiKeyboard delay and uncommenting the regular delay Also remove the DigiKeyboard.h include at the top Note: This sketch will not run with DigiKeyboard in use unless connected to a computer */ DigiKeyboard.delay(time); //delay(time); } bool wifiConnect(String host){ wifiDelay(50); Serial.write("+++"); if (!Serial.find("a")) return false; //error in entering AT mode - try restoring module and then setting settings again Serial.write("a"); if (!wifiWaitForOK()) return false; //error in entering AT mode Serial.print(F("AT+NETP=TCP,CLIENT,80,")); Serial.print(host); Serial.print(F("\r")); if (!wifiWaitForOK()) return false; //error in setting host Serial.print(F("AT+ENTM\r")); if (!wifiWaitForOK()) return false; //error in going back to transparent mode wifiDelay(1000); //instead of calling TCPLK to check for a link we just wait a good amount of time for a link, because TCPLK can be buggy while(Serial.read()!=-1); //empty the read buffer so we are ready for a clean GET OR POST return true; } bool wifiWaitForOK(){ return Serial.find("k"); } bool wifiSendPost(String host, String path, String data){ Serial.print(F("POST ")); Serial.print(path); Serial.println(F(" HTTP/1.1")); Serial.print(F("Host: ")); Serial.println(host); Serial.println(F("Content-Type: application/x-www-form-urlencoded")); Serial.print(F("Content-Length: ")); Serial.println(data.length()); Serial.println(); Serial.println(data); Serial.println(); Serial.setTimeout(5000); if(!Serial.find("\r\n\r")) //skip the header - if this fail then the GET probably did too return false; Serial.setTimeout(1000); return true; }