Page 1 of 2

Cytron WiFi Shield

PostPosted: Mon Jul 09, 2018 8:59 am
by Ariff
Hello may i ask, based on the wifi demo sketch below is it possible to send data to a different ip adress or cloud and which command is responsible for that ?

CODE: SELECT_ALL_CODE
#include <CytronWiFiShield.h>
#include <CytronWiFiClient.h>
#include <CytronWiFiServer.h>
#include <SoftwareSerial.h>

const char *ssid = "...";
const char *pass = "...";
IPAddress ip(192, 168, 1 ,242);
ESP8266Server server(80);

const char htmlHeader[] = "HTTP/1.1 200 OK\r\n"
                        "Content-Type: text/html\r\n"
                        "Connection: close\r\n\r\n"
                        "<!DOCTYPE HTML>\r\n"
                        "<html>\r\n";
                         
void setup() {
 
  // put your setup code here, to run once:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
  if(!wifi.begin(2, 3))
  {
    Serial.println(F("Error talking to shield"));
    while(1);
  }
  Serial.println(wifi.firmwareVersion());
  Serial.print(F("Mode: "));Serial.println(wifi.getMode());// 1- station mode, 2- softap mode, 3- both
  // Uncomment these 2 lines if you are using static IP Address
  // Serial.println(F("Setup wifi config"));
  // wifi.config(ip);
  Serial.println(F("Start wifi connection"));
  if(!wifi.connectAP(ssid, pass))
  {
    Serial.println(F("Error connecting to WiFi"));
    while(1);
  }
  Serial.print(F("Connected to "));Serial.println(wifi.SSID());
  Serial.println(F("IP address: "));
  Serial.println(wifi.localIP());
  wifi.updateStatus();
  Serial.println(wifi.status()); //2- wifi connected with ip, 3- got connection with servers or clients, 4- disconnect with clients or servers, 5- no wifi
  clientTest();
  espblink(100);
  server.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  serverTest();
}

void espblink(int time)
{
  for(int i = 0;i<12;i++)
  {
    wifi.digitalWrite(2,wifi.digitalRead(2)^1);
    delay(time);
  }
}

void serverTest()
{
  ESP8266Client client = server.available();
 
  if(client.available()>0)
  {
    String req = client.readStringUntil('\r');
    // First line of HTTP request looks like "GET /path HTTP/1.1"
    // Retrieve the "/path" part by finding the spaces
    int addr_start = req.indexOf(' ');
    int addr_end = req.indexOf(' ', addr_start + 1);
    if (addr_start == -1 || addr_end == -1) {
      Serial.print(F("Invalid request: "));
      Serial.println(req);
      return;
    }
    req = req.substring(addr_start + 1, addr_end);
    Serial.print(F("Request: "));
    Serial.println(req);
    client.flush();
   
    if(req.equals("/"))
    {
      IPAddress ip = wifi.localIP();
      String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
      client.print(htmlHeader);
      String htmlBody = "Hello from ESP8266 at ";
      htmlBody += ipStr;
      htmlBody += "</html>\r\n\r\n";
      client.print(htmlBody);
    }
   
    else if(req.equals("/analog"))
    {
      client.print(htmlHeader);
      String htmlBody="";
      for (int a = 0; a < 6; a++)
      {
        htmlBody += "A";
        htmlBody += String(a);
        htmlBody += ": ";
        htmlBody += String(analogRead(a));
        htmlBody += "<br>\r\n";
      }
      htmlBody += "\r\n</html>\r\n";
      client.print(htmlBody);
    }
   
    else if(req.equals("/gpio2"))
    {
      wifi.digitalWrite(2, wifi.digitalRead(2)^1);
      client.print(htmlHeader);
      String htmlBody="GPIO2 is now ";
      htmlBody += wifi.digitalRead(2)==HIGH?"HIGH":"LOW";
      htmlBody += "</html>\r\n";
      client.print(htmlBody);
    }
   
    else if(req.equals("/info"))
    {
      String toSend = wifi.firmwareVersion();
      toSend.replace("\r\n","<br>");
      client.print(htmlHeader);
      client.print(toSend);
      client.print("</html>\r\n");
    }

    else
      client.print("HTTP/1.1 404 Not Found\r\n\r\n");
   
    client.stop();
 
  }
}

void clientTest()
{
  const char destServer[] = "www.adafruit.com";
  ESP8266Client client;
  if (!client.connect(destServer, 80))
  {
    Serial.println(F("Failed to connect to server."));
    client.stop();
    return;
  }
 
  const char *httpRequest = "GET /testwifi/index.html HTTP/1.1\r\n"
                           "Host: http://www.adafruit.com\r\n"
                           "Connection: close\r\n\r\n";
  if(!client.print(httpRequest))
  {
    Serial.println(F("Sending failed"));
    client.stop();
    return;;
  }

  // set timeout approximately 5s for server reply
  int i=5000;
  while (client.available()<=0&&i--)
  {
    delay(1);
    if(i==1) {
      Serial.println(F("Timeout"));
      return;
      }
  }

  while (client.available()>0)
  {
    //char c = (char)client.read();
    //Serial.print(c);
    Serial.write(client.read());
  }
 
  client.stop();
}

Re: Cytron WiFi Shield

PostPosted: Tue Jul 10, 2018 8:00 pm
by bengchet
Hi,

You refer to function clientTest. It involves function to send data to external cloud.

You can also check out on few other examples such as WiFiThingspeak, PushingboxApi, GoogleHttpsRequest. They are the examples to send and record data to external server or cloud.

Re: Cytron WiFi Shield

PostPosted: Fri Jul 13, 2018 11:38 am
by Ariff
I checked the CytronGoogleFormHttps example, and uploaded it to my Arduino and at the serial monitor it displayed
"Failed to connect to server".
Do i need to change anything from the sketch apart from the wifi id and password ?

Re: Cytron WiFi Shield

PostPosted: Sat Jul 14, 2018 9:05 am
by bengchet
Hi,

You will need upgrade AT firmware. Please refer to the user manual section firmware upgrade.

Re: Cytron WiFi Shield

PostPosted: Mon Jul 16, 2018 10:25 am
by Ariff
alright thank you, the program works ! now may i know how to send data to our own spreadsheet ?
it relates to this command i presume ?

String url = "/forms/d/1472Zeb9kDfira_8WAQRbAAdCx0gy8dsgh5HI0vxeqlQ/formResponse";

what do i need to replace it with in order to send data to my own spreadsheet ?
your help is much appreciated

Re: Cytron WiFi Shield

PostPosted: Wed Jul 18, 2018 9:53 am
by bengchet
Hi,

You can refer here on how to create spreadsheet.

Re: Cytron WiFi Shield

PostPosted: Sun Apr 14, 2019 12:06 pm
by Ashraaf
Sorry but I also have the exact problem but even when I have updated the firmware. It keeps on giving error when I trying to connect to docs.google.com. Not only that. The WiFi demo clientTest() also keep on stuck when I run it. When I skip it, it runs back to normal. Something is wrong with the latest firmware.

Image

update: It works now somehow. Thank you.

Re: Cytron WiFi Shield

PostPosted: Mon Apr 15, 2019 6:48 am
by ober
Great! What is the problem that it does not work initially? I am sure others might face it too.

Cytron WiFi Shield

PostPosted: Wed Apr 17, 2019 11:38 pm
by afiqahshaharin
How to code cytron wifi shield with ultrasonic sensor to thingspeak? And how to flash the wifi shield? :cry:

Re: Cytron WiFi Shield

PostPosted: Thu Apr 18, 2019 11:11 pm
by Ashraaf