Development

» WiFi PRO 11: TCP UDP

This example shows how to set up the module to open both TCP and UDP sockets so it is able to send/receive simultaneously from both TCP and UDP servers

Required Materials

1 x Waspmote
1 x Battery
1 x WiFi PRO Module

Notes

- The battery has to be connected.
- This example can be executed in Waspmote v15

Code

/*
    ------ WIFI Example --------

    Explanation: This example shows how to set up the module to open both 
    TCP and UDP sockets so it is able to send/receive simultaneously from
    both TCP and UDP servers

    Copyright (C) 2016 Libelium Comunicaciones Distribuidas S.L.
    http://www.libelium.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    Version:           3.0
    Design:            David Gascon
    Implementation:    Yuri Carmona
*/

// Put your libraries here (#include ...)
#include <WaspWIFI_PRO.h>
#include <WaspFrame.h>


// choose socket (SELECT USER'S SOCKET)
///////////////////////////////////////
uint8_t socket = SOCKET0;
///////////////////////////////////////


// choose UDP server settings
///////////////////////////////////////
char UDP_HOST[]  = "10.10.10.17";
char UDP_RPORT[] = "3000";
char UDP_LPORT[] = "3000";
///////////////////////////////////////

// choose TCP server settings
///////////////////////////////////////
char TCP_HOST[]  = "10.10.10.17";
char TCP_RPORT[] = "2000";
char TCP_LPORT[] = "2000";
///////////////////////////////////////

// define handle variable for several connections
uint16_t udpHandle;
uint16_t tcpHandle;

uint8_t error;
uint8_t status;
unsigned long previous;
uint32_t timeout = 20000;


void setup()
{
  USB.println(F("Start program"));
  USB.println(F("***************************************"));
  USB.println(F("Once the module is set with one or more"));
  USB.println(F("AP settings, it attempts to join the AP"));
  USB.println(F("automatically once it is powered on"));
  USB.println(F("Refer to example 'WIFI_PRO_01' to configure"));
  USB.println(F("the WiFi module with proper settings"));
  USB.println(F("***************************************"));
}



void loop()
{
  // get current time
  previous = millis();


  //////////////////////////////////////////////////
  // 1. Switch ON
  //////////////////////////////////////////////////
  error = WIFI_PRO.ON(socket);

  if (error == 0)
  {
    USB.println(F("1. WiFi switched ON"));
  }
  else
  {
    USB.println(F("1. WiFi did not initialize correctly"));
  }


  //////////////////////////////////////////////////
  // 2. Check if connected
  //////////////////////////////////////////////////

  // check connectivity
  status =  WIFI_PRO.isConnected();

  // Check if module is connected
  if (status == true)
  {
    USB.print(F("2. WiFi is connected OK"));
    USB.print(F(" Time(ms):"));
    USB.println(millis() - previous);

    error = WIFI_PRO.getIP();

    if (error == 0)
    {
      USB.print(F("IP address: "));
      USB.println( WIFI_PRO._ip );
    }
    else
    {
      USB.println(F("getIP error"));
    }
  }
  else
  {
    USB.print(F("2. WiFi is connected ERROR"));
    USB.print(F(" Time(ms):"));
    USB.println(millis() - previous);
  }


  //////////////////////////////////////////////////
  // 3. Open sockets
  //////////////////////////////////////////////////

  // Check if module is connected
  if (status == true)
  {
    ////////////////////////////////////////////////
    // 3.1. Open TCP socket
    ////////////////////////////////////////////////
    error = WIFI_PRO.setTCPclient( TCP_HOST, TCP_RPORT, TCP_LPORT);

    // check response
    if (error == 0)
    {
      // get socket handle (from 0 to 9)
      tcpHandle = WIFI_PRO._socket_handle;

      USB.print(F("3.1. Open TCP socket OK. TCP handle:"));
      USB.println(tcpHandle);
    }
    else
    {
      USB.println(F("3.1. Error calling 'setTCPclient' function"));
      WIFI_PRO.printErrorCode();
      tcpHandle = -1;
    }


    ////////////////////////////////////////////////
    // 3.2. Open UDP socket
    ////////////////////////////////////////////////
    error = WIFI_PRO.setUDP( UDP_HOST, UDP_RPORT, UDP_LPORT);

    // check response
    if (error == 0)
    {
      // get socket handle (from 0 to 9)
      udpHandle = WIFI_PRO._socket_handle;

      USB.print(F("3.2. Open UDP socket OK. UDP handle:"));
      USB.println(udpHandle);
    }
    else
    {
      USB.println(F("3.2. Error calling 'setUDPclient' function"));
      WIFI_PRO.printErrorCode();
      udpHandle = -1;
    }


    //////////////////////////////////////////////////
    // 4. Send data
    //////////////////////////////////////////////////

    ////////////////////////////////////////////////
    // 4.1. Send TCP data
    ////////////////////////////////////////////////

    if (tcpHandle != -1)
    {
      error = WIFI_PRO.send(tcpHandle, "This is a message from Waspmote via TCP socket!!\n");

      // check response
      if (error == 0)
      {
        USB.println(F("4.1. Send data OK"));
      }
      else
      {
        USB.println(F("4.1. Error calling 'send' function"));
        WIFI_PRO.printErrorCode();
      }
    }


    ////////////////////////////////////////////////
    // 4.2. Send UDP data
    ////////////////////////////////////////////////
    if (udpHandle != -1)
    {
      error = WIFI_PRO.send(udpHandle, "This is a message from Waspmote via UDP socket!!\n");

      // check response
      if (error == 0)
      {
        USB.println(F("4.2. Send data OK"));
      }
      else
      {
        USB.println(F("4.2. Error calling 'send' function"));
        WIFI_PRO.printErrorCode();
      }
    }


    ////////////////////////////////////////////////
    // 4.3. Wait for answer from TCP server
    ////////////////////////////////////////////////
    if (tcpHandle != -1)
    {
      USB.print(F("4.3. Listen to TCP socket:"));
      error = WIFI_PRO.receive(tcpHandle, 20000);

      // check answer
      if (error == 0)
      {
        USB.print(F("\nTCP Data: "));
        USB.println( WIFI_PRO._buffer, WIFI_PRO._length);

        USB.print(F("TCP Length: "));
        USB.println( WIFI_PRO._length, DEC);
      }
      else
      {
        USB.println(F("No TCP data received"));
      }
    }


    ////////////////////////////////////////////////
    // 4.4. Wait for answer from UDP server
    ////////////////////////////////////////////////
    if (udpHandle != -1)
    {
      USB.print(F("4.4. Listen to UDP socket:"));
      error = WIFI_PRO.receive(udpHandle, 20000);

      // check answer
      if (error == 0)
      {
        USB.print(F("\nUDP Data: "));
        USB.println( WIFI_PRO._buffer, WIFI_PRO._length);

        USB.print(F("UDP Length: "));
        USB.println( WIFI_PRO._length, DEC);
      }
      else
      {
        USB.println(F("No UDP data received"));
      }
    }


    ////////////////////////////////////////////////
    // 4.5. close TCP socket
    ////////////////////////////////////////////////
    if (tcpHandle != -1)
    {
      error = WIFI_PRO.closeSocket(tcpHandle);

      // check response
      if (error == 0)
      {
        USB.println(F("4.5. Close TCP socket OK"));
      }
      else
      {
        USB.println(F("4.5. Error calling 'closeSocket' function"));
        WIFI_PRO.printErrorCode();
      }
    }


    ////////////////////////////////////////////////
    // 4.6. close UDP socket
    ////////////////////////////////////////////////
    if (udpHandle != -1)
    {
      error = WIFI_PRO.closeSocket(udpHandle);

      // check response
      if (error == 0)
      {
        USB.println(F("4.6. Close UDP socket OK"));
      }
      else
      {
        USB.println(F("4.6. Error calling 'closeSocket' function"));
        WIFI_PRO.printErrorCode();
      }
    }
  }

  
  //////////////////////////////////////////////////
  // 5. Switch OFF
  //////////////////////////////////////////////////
  USB.println(F("5. WiFi switched OFF\n\n"));
  WIFI_PRO.OFF(socket);


  USB.println(F("Wait 10 seconds........\n"));
  delay(10000);

}

Output

H#
Start program
***************************************
Once the module is set with one or more
AP settings, it attempts to join the AP
automatically once it is powered on
Refer to example 'WIFI_PRO_01' to configure
the WiFi module with proper settings
***************************************
1. WiFi switched ON
2. WiFi is connected OK Time(ms):5705
IP address: 10.10.10.12
3.1. Open TCP socket OK. TCP handle:0
3.2. Open UDP socket OK. UDP handle:1
4.1. Send data OK
4.2. Send data OK
4.3. Listen to TCP socket:
TCP Data: This is a message via TCP

TCP Length: 28
4.4. Listen to UDP socket:
UDP Data: This is a message via UDP
UDP Length: 25
4.5. Close TCP socket OK
4.6. Close UDP socket OK
5. WiFi switched OFF


Wait 10 seconds........

1. WiFi switched ON
2. WiFi is connected OK Time(ms):5707
IP address: 10.10.10.12
3.1. Open TCP socket OK. TCP handle:0
3.2. Open UDP socket OK. UDP handle:1
4.1. Send data OK
4.2. Send data OK
4.3. Listen to TCP socket:
TCP Data: This is a message via TCP

TCP Length: 27
4.4. Listen to UDP socket:
UDP Data: This is a message via UDP
UDP Length: 26
4.5. Close TCP socket OK
4.6. Close UDP socket OK
5. WiFi switched OFF


Wait 10 seconds........

Quick Publish: