The WizFi310 Shield is a built-in WizFi310 WiFi module of WIZnet hardware, and is Pin compatible with Arduino and has temperature, humidity, and CDS sensors built right in.

Reference the WizWiki to see al the Hardware Specs of this shield. 

In the following tutorial, Ubidots will demonstrate how to setup and program the WizFi310 using the Arduino IDE to display data in your Ubidots account.

Requirements

Step 1: Hardware Setup 

The WizFi310 Shield will be initialized by AT commands sent through Serial communication. It's important to mention that the WizFi310 Shield is Arduino Pinout compatible, but for the purpose of this tutorial we will communicate with the Arduino MEGA via serial and therefore unable to debug any messages because if we try, the connection will be disrupted. We manually wire the shield and Arduino to take advantage of TX1 and RX1 PINs, if you attempt to block the boards together these PINs will not align and we will not be able to see our data response during the provisioning process. 

Please follow the steps below carefully to ensure the right functionality between the WizFi310 Shield and the Arduino:

NOTE: We decided to used the Arduino MEGA because it let us visualize any debug message. Please chose your hardware based on the environment and computational requirements of your integration. 

1. First, make sure the DIP Switch Configurations are located in the right place: 

  • SW1: 1. OFF - 2. OFF
  • SW5: 1. ON - 2. OFF - 3. OFF 
  • SW6: 1. OFF - 2. OFF
  • UART Selector Jumper: D0 - TXD  |  D1 - RXD

Reference the image below for review: 

2. Now with the correct configurations, use male-female wires to establish the connections between the shield and the Arduino. Please, reference the table below to establish the proper wiring:

3. With everything configured, power ON the WizFi shield and the Arduino.

Step 2: Arduino Setup

1. Download the Arduino IDE if you not already have it.

2. Go to the library repository to download the WizFi310 Arduino library. To download the library clicking the green button called "Clone or download" and select "Download ZIP". 

3. Now back in the Arduino IDE, click on Sketch -> Include Library -> Add .ZIP Library.

4. Select the .ZIP file of WizFi310_arduino_library and then “Accept” or “Choose”.

5. Paste the code below in your Arduino IDE. Once you have pasted the code, you will need to assign the parameters: Wi-Fi name and password, plus your individual, unique Ubidots TOKEN. 


#include <Arduino.h>
#include "WizFi310.h"

namespace {
  char ssid[] = "xxxxxxxxxx"; // Assign your Network SSID
  char pass[] = "xxxxxxxxxx";  // Assign your Network password
  char SERVER[] = "things.ubidots.com"; // Ubidots Server
  const char * TOKEN = "xxxxxxxxxx"; // Assign your Ubidots TOKEN
  const char * DEVICE_LABEL = "wiznet-shield"; // Ubidots Device Label
  const char * USER_AGENT = "wiznet";
  const char * VERSION = "1.0";
  const int PORT = 80;
  int  status = WL_IDLE_STATUS; // the Wifi radio's status  
}

WiFiClient client;

void setup() {
  Serial.begin(9600);
  Serial1.begin(115200);
 
  delay(6000);
  Serial.print("Starting...");
  Serial.println("WiFi initiallize");
  WiFi.init(&Serial1);
 
  if (WiFi.status() == 0) {
    Serial.println("Failed to configure WiFi");
    // don't continue
    while(true)
    ;
  }
  //attempt to connect to WiFi network
  while (status != WL_CONNECTED) {
    Serial.print("[WiFi] Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    //Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
    Serial.println("Connected!");
  }
 
  delay(1000);
}

void loop() {
  int sensor_value = analogRead(A0);
  Serial.println("Sending sensor value...");
  sendValue("light", sensor_value);
  delay(10000);
}

void sendValue(const char * variable_label, int value) {
 
  /* Build the body to be POST */
  char* body = (char *) malloc(sizeof(char) * 100);
  sprintf(body, "{\"%s\":%d}", variable_label, value);

  /* Builds the HTTP request to be POST */
  char* data = (char *) malloc(sizeof(char) * 300);
  sprintf(data, "POST /api/v1.6/devices/%s", DEVICE_LABEL);
  sprintf(data, "%s HTTP/1.1\r\n", data);
  sprintf(data, "%sHost: things.ubidots.com\r\n", data);
  sprintf(data, "%sUser-Agent: %s/%s\r\n", data, USER_AGENT, VERSION);
  sprintf(data, "%sX-Auth-Token: %s\r\n", data, TOKEN);
  sprintf(data, "%sConnection: close\r\n", data);
  sprintf(data, "%sContent-Type: application/json\r\n", data);
  sprintf(data, "%sContent-Length: %d\r\n\r\n", data, dataLen(body));
  sprintf(data, "%s%s\r\n\r\n", data, body);

  if (client.connect(SERVER, PORT)) {
    client.print(data);
  } else {
    Serial.println("connection failed");
  }
 
  while (!client.available());
    //Serial1.println("Reading..");
  while (client.available()) {
    char c = client.read();
    Serial.print(c); // Response Monitoring
  }
  client.flush();
  client.stop();
  free(body);
  free(data);
}

int dataLen(char* variable) {
  uint8_t dataLen = 0;
  for (int i = 0; i <= 250; i++) {
    if (variable[i] != '\0') {
      dataLen++;
    } else {
      break;
    }
  }
  return dataLen;
}

6. Select Arduino MEGA 2560 from Tools > Board menu.

7. Verify your code within the Arduino IDE. To do this, in the top left corner of our Arduino IDE you will see the "Check Mark" icon press it to verify your code. 

8. Upload the code into your Arduino MEGA. To do this, choose the "right-arrow" icon beside the check mark icon from point 7 above. 

9. To verify the connectivity of the device, open the serial monitor by selecting the "magnifying glass" icon in the top right corner of our Arduino IDE. As you will note below, the request is sent to Ubidots' server and responded with 200 OK - meaning a valid request.

Step 3: Ubidots 

1. Enter your Ubidots account to confirm the data has been received. In the device section, locate the device called "wiznet-shield" and visualize your data. 

2. The variable received is "light" which is the reading of the CDS sensor:

Result

With this simple tutorial we are able to POST data to Ubidots with the ease of the Arduino IDE and a WizFi310. Now you can modify the example code provided to include temperature and humidity readings too and launch your IoT solution with ease and WIZnet. :) 

Did this answer your question?