19/06/2013

  • Atualizado Biblioteca WiFlyHQmaster
  • Atualizado Código Exemplo

O WifiShield é um Shield desenvolvido pelo LdG para acoplar o módulo Wifly da empresa Roving Netwoks. Este Shield funciona como o Ethernet Shield, mas a vantagem é que não tem cabo e é muito fácil implementá-lo e utilizálo! É apenas acoplar o módulo Wifly no WifiShield, depois no Arduino, configurá-lo e pronto!

O modulo Wifly é baseado no robusto RN-171 que incorpora IEEE 802.11b/g, processador de 32 bits, pilha TCP/IP, real time, unidade de gerenciamento de alimentação e entradas para sensores analógicos, carrega um firmware desenvolvido pelo fabricante que facilita a integração e minimiza o tempo de desenvolvimento. Neste modelo utilizado, o módulo necessita de apenas quatro conexões (PWR, TX, RX e GND) para criar uma conexão de dados sem fio.

Para este tutorial será preciso instalar as bibliotecas clicando nos links abaixo,:

WiFlyHQmaster

Streaming3

Pstring5

Time

Primeiros passos.

Neste tutorial mostraremos como fazer uma conexão como Client em uma pagina HTML.

Primeiramente baixar as bibliotecas citadas acima. Depois abra o exemplo “ httpclient.ino” fornecido  na biblioteca WiflyHQ e mude alguns parâmetros no Sketch, conforme abaixo:

1ª Trocar os pinos da serial SoftwareSerial wifiSerial(8,9); para SoftwareSerial wifiSerial(4,5);

São os pinos serial que o arduino se comunica com WiFly.

2ª Preencher os dados de sua rede como Nome e Senha.

const char mySSID[] = "nome da rede WiFi";

const char myPassword[] = "senha da rede WiFi";

 

3º Clique em Upload para passar a programação para o Arduino;

4º Abra o SerialMonitor e configure a serial para 115200 baud;

No terminal você deverá ter este resultado como mostrado abaixo.

Fig 3 Serial Terminal


Funcionamento deste programa:

Este software configura o modulo WiFly para se conectar a rede Wi-Fi indicada pelo programa, após esta conexão estabelecida ele enviará um comando “GET” para as páginas determinadas pelo código abaixo.


Código:


//
carrega as bibliotecas

#include <WiFlyHQ.h>
#include <SoftwareSerial.h>

//define os pinos utilizados pela serial
SoftwareSerial wifiSerial(4,5);

//cria uma instancia chamada wifly
WiFly wifly;

/* trocar os dados com os de sua Rede WiFi*/
const char mySSID[] = "teste"; //Troque o teste pelo nome da sua rede wifi
const char myPassword[] = "teste"; //Troque o teste pela senha da sua rede wifi

/*Pagina a ser carregada*/
const char site[] = "www.labdegaragem.com";
//const char site[] = "arduino.cc";
//const char site[] = "www.google.co.nz";
//const char site[] = "hunt.net.nz";

void setup()
{
char buf[32];//define o tipo e tamanho da variável buf
//define a velocidade da porta serial do Monitor
Serial.begin(115200);
Serial.println("Starting");
Serial.print("Free memory: ");
Serial.println(wifly.getFreeMemory(),DEC);
//define a velocidade da porta serial do WiFly
wifiSerial.begin(9600);
//Inicializa o modulo WiFly
if (!wifly.begin(&wifiSerial, &Serial)) {
Serial.println("Failed to start wifly");
terminal();
}
/*associa-se a uma rede WiFi se não associado*/
if (!wifly.isAssociated()) {

/*carrega os parâmetros da rede WiFi, informados anteriormente*/
Serial.println("Joining network");
wifly.setSSID(mySSID);
wifly.setPassphrase(myPassword);
wifly.enableDHCP();
//se conecta na rede WiFi
if (wifly.join()) {
Serial.println("Joined wifi network");
}
else {
Serial.println("Failed to join wifi network");
terminal();
}}
else {
Serial.println("Already joined network");
}
//terminal();
Serial.print("MAC: "); //mostra o endereço MAC do Modulo
Serial.println(wifly.getMAC(buf, sizeof(buf)));
Serial.print("IP: ");//mostra o endereço IP
Serial.println(wifly.getIP(buf, sizeof(buf)));
Serial.print("Netmask: ");//mostra a Mascara de Rede
Serial.println(wifly.getNetmask(buf, sizeof(buf)));
Serial.print("Gateway: ");//mostra o endereço do Gateway
Serial.println(wifly.getGateway(buf, sizeof(buf)));

wifly.setDeviceID("Wifly-WebClient");
Serial.print("DeviceID: ");
Serial.println(wifly.getDeviceID(buf, sizeof(buf)));

if (wifly.isConnected()) { //fechar conexão anterior caso esteja aberta
Serial.println("Old connection active. Closing");
wifly.close();
}
/*manda uma requisição para pagina caso esteja conectado*/
if (wifly.open(site, 80)) {
Serial.print("Connected to ");
Serial.println(site);

wifly.println("GET / HTTP/1.0");
wifly.println();
}
else {
Serial.println("Failed to connect");
}
}

void loop()
{   //lê a porta serial do WiFi e imprime o resultado no terminal
if (wifly.available()) {
char ch = wifly.read();
Serial.write(ch);
if (ch == '\n') {
/*adiciona uma nova linha*/
Serial.write('\r');
} }
if (Serial.available() > 0) {
wifly.write(Serial.read());
}}
/* Conecta o modulo WiFly,  com o serial monitor. */
void terminal()
{
while (1) {
if (wifly.available() > 0) {
Serial.write(wifly.read());
}
if (Serial.available() > 0) {
wifly.write(Serial.read());
}}}

 

 

E é isso aí!! Boa diversão!!! Caso tenham dúvidas, poste aqui no blog! Para sugestões, clique aqui! Para ver outros tutoriais, clique aqui e projetos abertos, clicando aqui!



Referencias:

http://www.sparkfun.com/products/10822

https://github.com/harlequin-tech

http://rovingnetworks.com/products/RN_XV

WiflyHQ -
https://github.com/harlequin-tech/WiFlyHQ

Streaming3 -
http://arduiniana.org/libraries/streaming/

Pstring5 -
http://arduiniana.org/libraries/pstring/

Time -http://arduino.cc/playground/Code/Time



Exibições: 8741

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Venilton Falvo Júnior em 29 julho 2013 às 13:29

Boa tarde!

Você vendem o Módulo WiFly RN-XV da Roving Networks separadamente?

Preciso muito desse componente, mas já tenho uma placa XBee para acoplá-lo.

Desde já, agradeço!

Comentário de Marcos Ferreira em 22 julho 2013 às 11:32

Eu consigo colher os dados de um sensor de temperatura no arduino uno pela minha rede Wireless atravez de um roteador "dlink por exemplo", com este modulo? 

Comentário de Márlison de Sá Rêgo em 26 março 2013 às 15:21

Se a rede a qual devo conectar não possuir senha, o que devo fazer!?

Att

Comentário de Marcio Torres em 30 novembro 2012 às 14:18

Lucas, o RN 171 da Roving Netwoks não funciona com a BIBLIOTECA (<WiFlyHQ.h>), você terá que utilizar a (<WiFly.h>) !, caso me envie seu e-mail que te passo todas as BIBLIOTECAS necessárias para o funcionamento !

Comentário de Lucas Correa em 30 novembro 2012 às 14:10

Marcio Torres.

Segue o codigo abaixo.

Estou utilizando esse shield de wifi e um servo. Mesmo nao contendo nada no loop ao fazer o request http://ip:8081 ele esta mexendo o servo.

#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
#undef PSTR
#define PSTR(s) (__extension__({static prog_char __c[] PROGMEM = (s); &__c[0];}))

#include <WiFlyHQ.h>
#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial wifiSerial(4,5);
Servo myservo;
WiFly wifly;

void terminal();

const char mySSID[] = "Teste";
const char myPassword[] = "teste2205";

char buf[80];
int pos = 0;

void setup()
{
Serial.begin(115200);
Serial.println("Starting");
Serial.print("Free memory: ");
Serial.println(wifly.getFreeMemory(),DEC);

wifiSerial.begin(9600);
if (!wifly.begin(&wifiSerial, &Serial)) {
Serial.println("Failed to start wifly");
terminal();
}

/* Join wifi network if not already associated */
if (!wifly.isAssociated()) {
/* Setup the WiFly to connect to a wifi network */
Serial.println("Joining network");
wifly.setSSID(mySSID);
wifly.setPassphrase(myPassword);
wifly.enableDHCP();
wifly.save();

if (wifly.join()) {
Serial.println("Joined wifi network");
} else {
Serial.println("Failed to join wifi network");
terminal();
}
} else {
Serial.println("Already joined network");
}

//wifly.setBroadcastInterval(0);

wifly.setDeviceID("Wifly-WebClient");
if (wifly.isConnected()) {
Serial.println("Old connection active. Closing");
wifly.close();
}

wifly.setProtocol(WIFLY_PROTOCOL_TCP);

if (wifly.getPort() != 8081) {
wifly.setPort(8081);
wifly.save();
Serial.println(F("Set port to 80, rebooting to make it work"));
wifly.reboot();
delay(3000);
}

Serial.println(F("Ready"));

myservo.attach(7);
myservo.write(pos);


}

void loop()
{

}

/* Connect the WiFly serial to the serial monitor. */
void terminal()
{
while (1) {
if (wifly.available() > 0) {
Serial.write(wifly.read());
}


if (Serial.available() > 0) {
wifly.write(Serial.read());
}
}
}

Comentário de Marcio Torres em 30 novembro 2012 às 13:59

Lucas Correa, poste o código que está utilizando para que possamos te ajudar !

Comentário de Lucas Correa em 30 novembro 2012 às 13:31

Ola consegui conectar. Agora estou com um problema estranho. Estou fazendo um wifi server e utilizando servo. No loop nao coloquei nada e ao fazer um request para enviar um comando para o servo mesmo nao tendo nada no loop ele mexe o servo. Alguem pode me ajudar?

Comentário de Laboratório de Garagem em 29 novembro 2012 às 18:29

OI Lucas, verifique se você está colocando o nome e senha corretos na programação.

Equipe LdG

Comentário de Lucas Correa em 29 novembro 2012 às 17:08

Comprei esse shield de wifi da Lab, mas nao consigo conectar. Ja mudei para 4 e 5 estou utilizando o arduino uno rev 3.

Starting
Free memory: 1124
getCon: TCP disconnected
Joining network
Failed to join wifi network

Comentário de André Gomes de Lira Muniz em 31 outubro 2012 às 18:02
Primeiramente parabéns pela postagem.
Lendo o post surgiu a seguinte duvida. Consigo realizar a comunicação do WiFiShield com 2 servidores H.A?

Obrigado pela atenção,
André de Lira

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço