sexta-feira, 7 de agosto de 2015

Como usar o Wifi Shield com o Arduino

Você precisará de um Arduino ou um clone seguindo o exato projeto para que o shield possa ser acoplado sem problemas.


Um Arduino:


O clone, Tatuino:


Precisará também do escudo para rede sem fios (wifi shield). Para este tutorial utilizei o shield Microchip que alé de ser baixo custo pode ser encontrado facilmente na Internet com venda pela Tato Equipamentos Eletrônicos.


Acople o shield sobre o Arduino ou o clone:


Note que sobram dois pinos, do lado dos pinos de alimentação. Minha opção foi não cortá-los, pois não na acoplagem. Mas cuidado! Caso resolva cortá-los não vá cortar pinos errados!


Obviamente também terá que ter uma rede fio composta de um access point ou roteador para que o shield possa ser conectado a ela para nossos testes.

Baixe a biblioteca  WiShield-master de www.seucurso.com.br/downloads/wifishield.zip.

Descompacte o conteúdo do arquivo baixado na pasta libraries do local onde estiver a instalação do Arduino.

Minha sugestão de código é usar o exemplo WebServer que é bem simples e auto explicativo. Você pode encontrá-lo no menu File, opção Examples e sub-opção wifishield:


O código é:

/*
 * Web Server
 *
 * A simple web server example using the WiShield 1.0
 */
 
#include <WiShield.h>
 
// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[]    = {192,168,0,200};   // IP address of WiShield
unsigned char gateway_ip[]  = {192,168,0,1};   // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network
char ssid[]                 = {"redesemfio"};   // max 32 bytes
unsigned char security_type = 3;               // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2
 
// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {“senhadaredesemfio"}; // max 64 characters
 
// WEP 128-bit keys
prog_uchar wep_keys[] PROGMEM = { 
 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};
 
// setup the wireless mode; infrastructure - connect to AP; adhoc - connect to another WiFi device
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2
unsigned char wireless_mode = WIRELESS_MODE_INFRA;
unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------
 
 
void setup()
{
 WiFi.init();
}
 
// This is the webpage that is served up by the webserver
const prog_char webpage[] PROGMEM = {"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n
<h1>Hello World!! I am WiShield</h1>
<form action="\" method="\">Toggle LED:<input name="\" type="\" value="\" /></form>
"};
 
 
void loop()
{
 WiFi.run();
}

Para que esse código funcione você terá que alterar algumas variáveis para que reflitam a configuração de sua rede sem fio. Sendo elas:

O número IP a ser designado para seu shield:
unsigned char local_ip[]    = {192,168,0,200};

O número IP do gateway:
unsigned char gateway_ip[]  = {192,168,0,1};

A máscara de sub-rede:
unsigned char subnet_mask[] = {255,255,255,0};

O SSID (identificação) da sua rede:
char ssid[]                 = {“redesemfio"};

O tipo de segurança utilizada, sendo 0 para rede aberta (open), 1 para WEP, 2 para WPA e 3 para WPA2:
unsigned char security_type = 3;

A senha para sua rede sem fio, no caso deste tutorial para WPA2:
const prog_char security_passphrase[] PROGMEM = {“senhadaredesemfio”};

Se você ainda usa WEP, primeiro pense em mudar para WPA ou WPA2 que são criptografias mais seguras, depois se ainda assim quiser usar WEP terá que mudar a variável abaixo com as chaves em valores hexadecimais:

prog_uchar wep_keys[] PROGMEM = { 
 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};

Agora é compilar e enviar para o seu Arduino. Feito isso o shield irá conectar-se em sua rede sem fio em alguns segundos e o LED indicativo de WIFI ON deve acender:


Para testá-lo entre em seu navegador de Internet preferido e aponte para o IP que designou ao seu shield:


Caso queira usar qualquer outro exemplo deste shield lembre-se de editar o arquivo apps-conf.h e comentar ou descomentar a aplicação que deseja utilizar. O código desse arquivo para este tutorial ficou como segue. Note que está descomentada a linha #define APP_WEBSERVER, pois é o exemplo que estamos utilizando. As demais continuam comentadas.

 
/******************************************************************************
 
 Filename: apps-conf.h
 Description: Web application configuration file
 
 ******************************************************************************
 
 TCP/IP stack and driver for the WiShield 1.0 wireless devices
 
 Copyright(c) 2009 Async Labs Inc. All rights reserved.
 
 This program is free software; you can redistribute it and/or modify it
 under the terms of version 2 of the GNU General Public License as
 published by the Free Software Foundation.
 
 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, write to the Free Software Foundation, Inc., 59
 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 Contact Information:
 
 
 Author               Date        Comment
 ---------------------------------------------------------------
 AsyncLabs 05/29/2009 Initial port
 
 *****************************************************************************/
 
#ifndef __APPS_CONF_H__
#define __APPS_CONF_H__
 
// ----------------------------------------------------------------------------
// -- Begin uIP/WiShield stack configuration settings
 
//
// Application type defines; uncomment to enable APP_TYPES
//   APP_UDPAPP is used for UDP only apps as well as DNS and DHCP apps; if your app will use
//   DNS and/or DHCP then your APP_TYPE (e.g. APP_WISERVER) AND APP_UDPAPP must be defined 
//   (uncommented). Currently only APP_UDPAPP may be defined at the same time as any other APP_TYPE
//
#define APP_WEBSERVER
//#define APP_WEBCLIENT
//#define APP_SOCKAPP
//#define APP_UDPAPP
//#define APP_WISERVER
 
//
// Add on features; uncomment to enable additional functionality
//
//#define UIP_DNS                  // Add DNS capabilities - APP_UDPAPP must be defined!
//#define UIP_DHCP                 // Add DHCP capabilities - APP_UDPAPP must be defined!
//#define UIP_SCAN                 // Add Access Point scan capabilities
 
//
// Commonly accessed WiServer settings 
//
#define WISERVER_GET_STRING_MAX 64 // Length of buffer which holds URL/GET passed to WiServer
 // SimpleServer sendMyPage() page serving function
 
//
// Commonly accessed uIP stack settings 
//
#define UIP_WEP_KEY_LEN         13 // WEP Key length: 5 bytes (64-bit WEP); 13 bytes (128-bit WEP)
#define UIP_WEP_KEY_DEFAULT      0 // Default WEP key ID: Key 0, 1, 2, 3
#define MAX_TCP_CONNS            2 // Max TCP connections desired
#define MAX_TCP_LISTENPORTS      2 // Max TCP listening ports
#define MAX_UDP_CONNS            1 // Max UDP connections desired
// Don't play with UIP_CLOCK_DIV unless you know what you are doing!
#define UIP_CLOCK_DIV            2 // Referenced in stack.c; default 2
 
// -- End uIP/WiShield stack configuration settings
// ----------------------------------------------------------------------------
 
 
#ifdef APP_WEBSERVER
#include "webserver.h"
#endif
 
#ifdef APP_WEBCLIENT
#include "webclient.h"
#endif
 
#ifdef APP_SOCKAPP
#include "socketapp.h"
#endif
 
#ifdef APP_UDPAPP
#include "udpapp.h"
#define UIP_UDP_ENABLED 1
#else
#define UIP_UDP_ENABLED 0
#endif
 
#ifdef APP_WISERVER
#include "server.h"
#endif
 
#ifdef UIP_DHCP
#include "uip_dhcp.h"
#endif
 
#ifdef UIP_DNS
#include "uip_dns.h"
#endif
 
#endif /*__APPS_CONF_H__*/


Com um pouco de conhecimento de HTML e TCP/IP agora é só usar a imaginação para resolver seu problema ou criar sua aplicação!
 
← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário