19/06/2013
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,:
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.
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
Comentar
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!
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?
Se a rede a qual devo conectar não possuir senha, o que devo fazer!?
Att
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 !
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());
}
}
}
Lucas Correa, poste o código que está utilizando para que possamos te ajudar !
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?
OI Lucas, verifique se você está colocando o nome e senha corretos na programação.
Equipe LdG
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)