UDP Envio/Recepción de cadenas

En este tutorial se espera un paquete UDP en un puerto local. Cuando se recibe un paquete válido, un paquete reconocido se envía de vuelta al cliente en un puerto de salida especificado. Se basa en una conexión WiFi realizada en su red local a través de una placa Escudo Wifi y Arduino o Genuino 101 Zero o una placa MKR1000.

Hardware necesario

Escudo Wifi101 Arduino
Placa Arduino o Genuino Zero
o
Placa MKR1000

Circuito

El pin digital 7 se utiliza como un pin de diálogo entre el escudo WiFi  101 y la placa, y no debe ser utilizado.

Usted debe tener acceso a una red inalámbrica 802.11b/g que se conecte a internet para este ejemplo. Tendrá que cambiar la configuración de red en el programa para que se corresponda con su red SSID particular.



En la imagen superior, la placa Arduino o Genuino Zero se apilan debajo del escudo WiFi.


Código


// WiFi envío y recepción de cadenas UDP 

// Este programa espera un paquete UDP en localPort usando un escudo WiFi. 
// Cuando se recibe un paquete un acuse de recibo es enviado al cliente en 
// el puerto remotePort 

// Circuito: 
// EscudoWi-Fi conectado

// Creado el 30 de Diciembre de 2012 por DLF (Metodo2 srl)

#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>

int status = WL_IDLE_STATUS;
char ssid[] = "yourNetwork"; //  su red SSID (nombre)
char pass[] = "secretPassword";    // la contraseña de red (utilizar para WPA, o usar como clave para WEP)
int keyIndex = 0;            // su numero de índice clave de red (sólo se precisa para WEP)

unsigned int localPort = 2390;      // puerto local a la escucha

char packetBuffer[255]; //buffer para mantener los paquetes entrantes
char  ReplyBuffer[] = "acknowledged";       // una cadena para enviar de vuelta

WiFiUDP Udp;

void setup() {
  //Inicializar puerto serie y esperar a que se abra el puerto:
  Serial.begin(9600);
  while (!Serial) {
    ; // espera a que el puerto serie se conecte. Necesario para el puerto USB nativo solamente
  }

  // comprueba la presencia del escudo:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("Escudo WiFi no presente");
    // don't continue:
    while (true);
  }

  // intenta conectar a una red Wifi:
  while ( status != WL_CONNECTED) {
    Serial.print("Intentando conectar a SSID: ");
    Serial.println(ssid);
    // Conectarse a la red WPA / WPA2. Cambie esta línea si se utiliza una red abierta o WEP:
    status = WiFi.begin(ssid);

    // espera 10 segundos para la conexion:
    delay(10000);
  }
  Serial.println("Conectado a wifi");
  printWifiStatus();

  Serial.println("\nIniciando la conexión con el servidor...");
  // si hay una conexion, informar por el puerto serie:
  Udp.begin(localPort);
}

void loop() {

  // si hay datos disponibles, leer un paquete
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    Serial.print("Recibido un paquete de tamaño ");
    Serial.println(packetSize);
    Serial.print("Desde ");
    IPAddress remoteIp = Udp.remoteIP();
    Serial.print(remoteIp);
    Serial.print(", puerto ");
    Serial.println(Udp.remotePort());

    // lee un paquete de packetBufffer
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) packetBuffer[len] = 0;
    Serial.println("Contenido:");
    Serial.println(packetBuffer);

    // enviar una respuesta, a la dirección IP y el puerto que nos envió el paquete que recibimos
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
}

void printWifiStatus() {
  // imprimir el SSID de la red a la que esta conectado:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // imprimir la IP del escudo WiFi:
  IPAddress ip = WiFi.localIP();
  Serial.print("Dirección IP: ");
  Serial.println(ip);

  // imprimir la potencia de la señal recibida:
  long rssi = WiFi.RSSI();
  Serial.print("Potencia de la señal (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}



No hay comentarios:

Publicar un comentario