Liberte-se dos fios e conecte o seu Arduino à redes wireless com o Wifi Shield CC3000 da Sparkfun. Com esse módulo você consegue se conectar às redes wireless mais comuns do mercado (padrão 802.11 b/g), utilizando criptografia WEP, WPA ou WPA2. Também é possível utilizar o slot para cartão microSD para armazenar dados de sensores ou mesmo da internet. Neste tutorial vamos ver como utilizar este shield com Arduino Uno, mas você também pode utilizar essas instruções com o Wifi Shield CC3000 Keyes.
Este Wifi Shield também possui embutida uma antena WIMAX, suficiente para a maioria das aplicações, mas se você precisar de um alcance maior, pode fazer uma pequena modificação no hardware da placa e utilizar o conector para antena externa. Gostou? Então vamos as configurações para deixar o seu Arduino conectado à internet.
Montagem e conexão do Wifi Shield Sparkfun ao Arduino
Essa placa é enviada sem os pinos de conexão ao Arduino, assim você pode escolher entre uma configuração com uma barra de pinos normal ou uma configuração com pinos macho/femea, do tipo empilhável. Na foto abaixo temos 2 modos de configurações, uma usando somente pinos macho soldados ao shield e a outra com barra de pinos empilhável, permitindo que você encaixe outros shields no Arduino.
Bibliotecas e funções
A biblioteca padrão para esta placa é fornecida pela própria Sparkfun, distribuidora da placa, e está disponível nesse link. Esta biblioteca vem com exemplos para rastreamento de redes Wifi, ping, Webclient e testes gerais na placa.
Podemos usar também uma outra biblioteca, essa da Adafruit, que também suporta o CC3000 (datasheet), o chip da Texas Instruments que controla a placa. Essa biblioteca você pode baixar nesse link, e é um pouco mais completa, com exemplos para geolocalização, servidor de chat e o principal, que não está disponível na biblioteca da Sparkfun até o momento, que é o HTTP Server.
Programando o Wifi Shield CC3000
Para testar a placa, vamos utilizar as duas bibliotecas e ver algumas configurações para cada uma neste tutorial.
Primeiro, vamos utilizar a biblioteca da Sparkfun (SFE_CC3000.h) e juntar três exemplos dessa biblioteca em um programa só. A primeira parte do programa vai testar a comunicação com a placa e verificar se as conexões estão OK, retornando a versão do firmware e o MAC Address da placa. Em seguida, é feito um rastreamento para detectar as redes Wifi disponíveis. Por último, é feita a conexão à uma das redes e um teste de ping para o site www.makerhero.com.
No programa, não se esqueça de alterar as linhas abaixo, que definem o nome da rede wifi à qual o shield irá se conectar, assim como a senha e o tipo de segurança da rede:
char ap_ssid[] = “SSID”; // Nome da rede Wireless
char ap_password[] = “PASSWORD”; // Senha da rede Wireless
unsigned int ap_security = WLAN_SEC_WPA2; // Tipo de seguranca da rede
//Programa : Wifi Shield CC3000 Sparkfun //Biblioteca : Sparkfun SFE_CC3000 //Alteracoes e adaptacoes : MakerHero #include <SPI.h> #include <SFE_CC3000.h> // Pinos #define CC3000_INT 2 //Pino de interrupcao (D2 ou D3) #define CC3000_EN 7 //Pode ser qualquer pino digital #define CC3000_CS 10 //Preferencialmente pino 10 do Arduino Uno #define FW_VER_LEN 2 //Armazena o valor do firmware #define MAC_ADDR_LEN 6 //Armazena o endereço MAC #define IP_ADDR_LEN 4 //Tamanho do endereco IP, em bytes char ap_ssid[] = "MakerHero"; //Nome da rede Wireless char ap_password[] = "12345678"; //Senha da rede Wireless unsigned int ap_security = WLAN_SEC_WPA2; //Tipo de seguranca da rede unsigned int timeout = 30000; //Milisegundos char remote_host[] = "www.makerhero.com"; //Site para teste unsigned int num_pings = 3; // Numero de pings SFE_CC3000 wifi = SFE_CC3000(CC3000_INT, CC3000_EN, CC3000_CS); void setup() { Serial.begin(115200); } void loop() { Serial.println("--------------------------------"); Serial.println("- SparkFun CC3000 -"); Serial.println("--------------------------------"); Teste_Placa(); Serial.println("--------------------------------"); Serial.println(" Procurando redes wifi "); Serial.println("--------------------------------"); Procura_redes(); Serial.println("--------------------------------"); Serial.println(" Conexao e teste de ping "); Serial.println("--------------------------------"); ping_site(); Serial.println("--------------------------------"); while(1) {} } void Teste_Placa() { int i; unsigned char fw_ver[FW_VER_LEN]; unsigned char mac_addr[MAC_ADDR_LEN]; // Inicializa o shield CC3000 if ( wifi.init() ) { Serial.println("Inicializacao completa - CC3000 "); } else { Serial.println("Erro durante a inicializacao da CC3000 !"); } //Le e mostra a versao de firmware if ( wifi.getFirmwareVersion(fw_ver) ) { Serial.print("Versao de firmware : "); Serial.print(fw_ver[0], DEC); Serial.print("."); Serial.print(fw_ver[1], DEC); Serial.println(); } else { Serial.println("Nao foi possivel ler a versao de firmware."); } //Le e mostra o endereco MAC if ( wifi.getMacAddress(mac_addr) ) { Serial.print("Endereco MAC : "); for ( i = 0; i < MAC_ADDR_LEN; i++ ) { if ( mac_addr[i] < 0x10 ) { Serial.print("0"); } Serial.print(mac_addr[i], HEX); if ( i < MAC_ADDR_LEN - 1 ) { Serial.print(":"); } } Serial.println(); } else { Serial.println("Nao foi possivel ler o endereco MAC"); } } void Procura_redes() { int i; AccessPointInfo ap_info; unsigned char fw_ver[FW_VER_LEN]; unsigned char mac_addr[MAC_ADDR_LEN]; if ( wifi.scanAccessPoints(4000) != true ) { Serial.println("Erro ao procurar redes wifi"); } //Procura por redes wifi e exibe o nome Serial.println("Redes Wifi encontradas:"); Serial.println(); while ( wifi.getNextAccessPoint(ap_info) ) { Serial.print("SSID: "); Serial.println(ap_info.ssid); Serial.print("Seguranca : "); switch(ap_info.security_mode) { case WLAN_SEC_UNSEC: Serial.println("Sem seguranca"); break; case WLAN_SEC_WEP: Serial.println("WEP"); break; case WLAN_SEC_WPA: Serial.println("WPA"); break; case WLAN_SEC_WPA2: Serial.println("WPA2"); break; default: break; } Serial.println(); } } void ping_site() { ConnectionInfo connection_info; IPAddress ip_addr; IPAddress remote_ip; PingReport ping_report = {0}; int i; //Conecta e aguarda endereco via DHCP Serial.print("Conectando a rede : "); Serial.print(ap_ssid); if(!wifi.connect(ap_ssid, ap_security, ap_password, timeout)) { Serial.println("Erro: Nao foi possivel conectar !"); } //Le os dados de conexao if ( !wifi.getConnectionInfo(connection_info) ) { Serial.println("Erro: Nao foi possivel obter dados de conexao"); } else { Serial.println(" - Conectado !"); Serial.print("Endereco IP recebido : "); for (i = 0; i < IP_ADDR_LEN; i++) { Serial.print(connection_info.ip_address[i]); if ( i < IP_ADDR_LEN - 1 ) { Serial.print("."); } } Serial.println(); } //Usa DNSLookup para encontrar o endereco do site Serial.print("Aguardando endereco IP de : "); Serial.println(remote_host); if ( !wifi.dnsLookup(remote_host, &remote_ip) ) { Serial.println("Error: Could not lookup host by name"); } else { Serial.print("Endereco IP encontrado: "); for (i = 0; i < IP_ADDR_LEN; i++) { Serial.print(remote_ip[i], DEC); if ( i < IP_ADDR_LEN - 1 ) { Serial.print("."); } } Serial.println(); } //Realiza o teste de ping Serial.print("Teste de Ping IP "); for (i = 0; i < IP_ADDR_LEN; i++) { Serial.print(remote_ip[i], DEC); if ( i < IP_ADDR_LEN - 1 ) { Serial.print("."); } } Serial.print(" "); Serial.print(num_pings, DEC); Serial.println(" vezes..."); if ( !wifi.ping(remote_ip, ping_report, 3, 56, 1000) ) { Serial.println("Error: no ping response"); } else { Serial.print("Pacotes enviados : "); Serial.println(ping_report.packets_sent); Serial.print("Pacotes recebidos: "); Serial.println(ping_report.packets_received); } //Desconecta da rede if ( wifi.disconnect() ) { Serial.println("Desconectando da rede wifi"); } else { Serial.println("Erro: Nao foi possivel desconectar !"); } }
Ao final do processo, abra o serial monitor e você terá uma tela como essa após os testes de conexão e ping:
No segundo exemplo, vamos utilizar a biblioteca da Adafruit (Adafruit_CC3000.h) e criar um webserver que vai ler o valor de um potenciômetro ligado à porta analógica A2 do Arduino e atualizar uma página acessada via browser.
Nessa biblioteca, por padrão são utilizadas as portas 3 para IRQ (Interrrupção), 5 para VBAT e 10 para CS. Vamos substituir os valores de IRQ e VBAT para 2 e 7, respectivamente, para que funcionem com a placa da Sparkfun. As definições de portas no início do programa ficarão assim :
#define ADAFRUIT_CC3000_IRQ 2
#define ADAFRUIT_CC3000_VBAT 7
#define ADAFRUIT_CC3000_CS 10
Monte o circuito abaixo, utilizando um potenciômetro de qualquer valor:
#define WLAN_SSID “MakerHero” //Nome da rede – Ate 32 caractereres
#define WLAN_PASS “12345678” //Senha da rede
#define WLAN_SECURITY WLAN_SEC_WPA2 //Tipo de seguranca
//Programa : Wifi Shield CC3000 Sparkfun //Biblioteca : Adafruit_CC3000 //Alteracoes e adaptacoes : MakerHero #include <Adafruit_CC3000.h> #include <SPI.h> #include "utility/debug.h" #include "utility/socket.h" //Pinos #define ADAFRUIT_CC3000_IRQ 2 //Pino de interrupcao (D2 ou D3) #define ADAFRUIT_CC3000_VBAT 7 //Pode ser qualquer pino digital #define ADAFRUIT_CC3000_CS 10 //Preferencialmente pino 10 do Arduino Uno //O clock pode ser alterado Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT,SPI_CLOCK_DIVIDER); #define WLAN_SSID "MakerHero" //Nome da rede - Ate 32 caractereres #define WLAN_PASS "12345678" //Senha da rede //Tipo de seguranca: WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2 #define WLAN_SECURITY WLAN_SEC_WPA2 //Tipo de seguranca #define LISTEN_PORT 80 #define MAX_ACTION 10 #define MAX_PATH 64 #define BUFFER_SIZE MAX_ACTION + MAX_PATH + 20 #define TIMEOUT_MS 500 Adafruit_CC3000_Server httpServer(LISTEN_PORT); uint8_t buffer[BUFFER_SIZE+1]; int bufindex = 0; char action[MAX_ACTION+1]; char path[MAX_PATH+1]; void setup(void) { pinMode(A2, INPUT); //Define o pino para o potenciometro Serial.begin(115200); Serial.println(F("nInicializando...")); if (!cc3000.begin()) { Serial.println(F("Shield nao encontrado. Verifique as conexoes !")); while(1); } Serial.print(F("nTentando conectar-se a rede ")); Serial.println(WLAN_SSID); if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) { Serial.println(F("Falha !")); while(1); } Serial.println(F("Conectado!")); Serial.println(F("Requisitando endereco DHCP")); while (!cc3000.checkDHCP()) { delay(100); } //Exibe as informacoes da conexao while (! displayConnectionDetails()) { delay(1000); } //Aguarda conexao do browser httpServer.begin(); Serial.println(F("Aguardando conexao...")); } void loop(void) { //Armazena o valor lido do potenciometro int valor_potenciometro = analogRead(A2); Adafruit_CC3000_ClientRef client = httpServer.available(); if (client) { Serial.println(F("Client connected.")); bufindex = 0; memset(&buffer, 0, sizeof(buffer)); memset(&action, 0, sizeof(action)); memset(&path, 0, sizeof(path)); unsigned long endtime = millis() + TIMEOUT_MS; bool parsed = false; while (!parsed && (millis() < endtime) && (bufindex < BUFFER_SIZE)) { if (client.available()) { buffer[bufindex++] = client.read(); } parsed = parseRequest(buffer, bufindex, action, path); } if (parsed) { Serial.println(F("Processing request")); Serial.print(F("Action: ")); Serial.println(action); Serial.print(F("Path: ")); Serial.println(path); if (strcmp(action, "GET") == 0) { client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/plain")); client.println(F("Connection: close")); client.println(F("Refresh: 0")); client.println(F("Server: Adafruit CC3000")); client.println(F("")); //Inicio do envio de dados para o browser client.println(F("-----------------------------")); client.println(F(" MakerHero ")); client.println(F("-----------------------------")); client.println(); client.print(F("Valor do potenciometro : ")); client.println(valor_potenciometro); client.println(F("")); } else { client.fastrprintln(F("HTTP/1.1 405 Method Not Allowed")); client.fastrprintln(F("")); } } //Delay antes de desconectar delay(100); Serial.println(F("Client disconnected")); client.close(); } } bool parseRequest(uint8_t* buf, int bufSize, char* action, char* path) { //Check if the request ends with rn to signal end of first line. if (bufSize < 2) return false; if (buf[bufSize-2] == 'r' && buf[bufSize-1] == 'n') { parseFirstLine((char*)buf, action, path); return true; } return false; } void parseFirstLine(char* line, char* action, char* path) { //Parse first word up to whitespace as action. char* lineaction = strtok(line, " "); if (lineaction != NULL) strncpy(action, lineaction, MAX_ACTION); //Parse second word up to whitespace as path. char* linepath = strtok(NULL, " "); if (linepath != NULL) strncpy(path, linepath, MAX_PATH); } //Leitura do endereco IP e outras informacoes de conexao bool displayConnectionDetails(void) { uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv; if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) { Serial.println(F("Nao foi possivel ler o endereco IP!rn")); return false; } else { Serial.print(F("nIP Addr: ")); cc3000.printIPdotsRev(ipAddress); Serial.print(F("nNetmask: ")); cc3000.printIPdotsRev(netmask); Serial.print(F("nGateway: ")); cc3000.printIPdotsRev(gateway); Serial.print(F("nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv); Serial.print(F("nDNSserv: ")); cc3000.printIPdotsRev(dnsserv); Serial.println(); return true; } }
No browser, acesse o endereço do Wifi Shield utilizando o endereço do campo ENDEREÇO IP RECEBIDO, que vimos no primeiro teste. No nosso caso, o endereço DHCP é 192.168.0.100:
Gostou? Deixe seu comentário logo abaixo.
Bom dia. Primeiramente, gostaria de parabenizá-lo pelo excelente trabalho. Tenho um arduíno mega e tenho duas dúvidas:
1- preciso me conectar a uma rede (isso você já explicou neste post)👍
2-ao me conectar na rede, preciso enviar mensagens(SMS ou qualquer outra forma) para um ou mais celulares pré-cadastrados.
É possível? Desde já muito obrigado pela atenção.
Adriano,
Possível é, mas teria que analisar melhor o melhor método.
Abraços!
Diogo – Equipe MakerHero
Custaria de adquirir mais conhecimento sobre o uso de dispositivos controlados pela internet IoT.
Quero entrar nesse mercado de soluções controladas p/ internet.
Estou querendo pegar sinais digitais e enviar via wifi e visualizar no browser mas não estou nada que posso me ajudar, se alguem puder, gostaria de uma ajuda….obrigado
Olá Nilson!
Dê uma olhada nesse post que fizemos:
https://www.makerhero.com/blog/modulo-ethernet-enc28j60-arduino/
Abraços!
André – Equipe MakerHero
Estou com dois “probleminhas” com o segundo exemplo. Já revi toda a configuração de minha rede, testei outras redes e o resultado persiste.
Esse é o primeiro problema:
nInicializando…
nTentando conectar-se a rede WLAN_PLS_ROUTER
Conectado!
Requisitando endereco DHCP
nIP Addr: 10.0.0.9nNetmask: 255.0.0.0nGateway: 10.1.1.1nDHCPsrv: 10.1.1.1nDNSserv: 10.1.1.1
Aguardando conexao…
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Ou seja, ele não mantém a conexão e não passa os dados que deveria ao navegador. Ele conecta e em milésimos de segundos já desconecta.
Alguém tem alguma ideia ou está passando pelo mesmo problema?
O segundo problema:
Uma vez em uma outra rede doméstica não consegui nem obter o ip.
nInicializando…
nTentando conectar-se a rede APT 405
Conectado!
Requisitando endereco DHCP
Nao foi possivel ler o endereco IP!rn
Nao foi possivel ler o endereco IP!rn
Nao foi possivel ler o endereco IP!rn
Olá José!
Se você não obtém o IP significa que não conectou realmente na rede.
Você alterou ali no programa o nome e senha da sua rede Wifi?
O tipo de segurança está correto?
Abraços!
André – Equipe MakerHero
Boa noite, como faço para conectar no arduino uno a placa wifi cc3000 e o lcd keypad shield?
Quando conecto o lcd keypad shield o wifi para de funcionar.
Olá Marcio!
Você deve ver como que cada shield conversa com o Arduino. Às vezes elas usam as mesmas portas para comunicação e pode interferir uma com a outra.
Abraços!
André – Equipe MakerHero
Adilson boa noite, estou uma placa ATMEGA 2560 E UMA SHIELD CC3000, preciso de sua ajuda se possivel, tenho uma caixa dagua e treis sensores de niveis tenho que pegar este sinais que a placa atmega ira receber e transmitir pela shield, estou entado mas não estou obtendo sucesso, poderia me ajudar.
grato
Anderson
Olá Anderson!
Isso parece o tipo de problema que pode ser resolvido no nosso fórum, dá uma olhadinha lá: https://www.makerhero.com/forum/
Faz um post bem detalhado falando das suas conexões e do programa que com certeza vão te ajudar a resolver esse problema.
Abraços!
André – Equipe MakerHero
Tem como ligar junto um display LCD, um RTC e RFID? estou querendo fazer isso no meu projeto
olá Adilson Thomsen, como faço para que o arduino possa conectar a outros roteadores sem deixar SSID e senha Fixos?
Muito bom mresmo.
Muito bom mesmo.
Olá,
Gostaria de saber como criar uma interface http? Para inserir botões on/off, displays, imagens…
Desde já agradeço!
Boa noite Adilson. Esse programa aqui eu posso acessar de qualquer lugar do mundo por ser na web?
Boa tarde Denis,
Provavelmente você terá que mexer na configuração do roteador para ter acesso pela internet, mas é perfeitamente possível sim.
Abraço!
Adilson – Equipe MakerHero
Adilson, para conectar a qualquer lugar do mundo eu preciso de um server? tem como configurar com esses códigos e mandar para nuvem, ou receber dados da novem para controle?
Oi Rafael,
Não necessariamente, você pode criar um “server” no próprio Arduino.
Abraço!
Adilson – Equipe MakerHero
É possível conectar a rede wireless com aquelas antenas NRF24L01 que não é um shield, mas trabalha na frequencia 2.4GHz, e posteriormente baixar ou acessar um arquivo da rede?
parabens pelo post..
sugestão de post: como fazer para ter um botão no arduino para WPS, para conectar no WiFi rapidamente
Boa noite.
Estou usando o arduino mega 2560 e uma wifi shield sparkfun cc3000. Não estou conseguindo fazer as configurações de ip, gateway, etc para a plaquinha em questão, aparece um ip nada a ver e nao consigo alterar. Será que alguém tem alguma dica de como seto essas configrações?
OLa parabens pelo blog; vcs poderiam fazer um post de como ligar um led via celular utilizando arduino unor3 e wifi-shield keys.
Boa tarde!
Estou com um “probleminha” com o segundo exemplo. O primeiro já resolvi a questão da conexão, mas no segundo estou à vários dias tentando descobrir o que pode estar acontecendo. Já revi toda a configuração de minha rede, testei outro Router e o resultado é o mesmo, como segue:
nInicializando…
nTentando conectar-se a rede WLAN_PLS_ROUTER
Conectado!
Requisitando endereco DHCP
nIP Addr: 10.0.0.9nNetmask: 255.0.0.0nGateway: 10.1.1.1nDHCPsrv: 10.1.1.1nDNSserv: 10.1.1.1
Aguardando conexao…
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Client connected.
Client disconnected
Ou seja, ele não mantém a conexão e não passa os dados que deveria ao navegador.
Apesar de não retornar da maneira adequada, consigo pingar no IP sem problemas.
Alguém tem alguma ideia ou está passando pelo mesmo problema?
Desde já agradeço a atenção.
Att.: Paulo
Boa tarde Paulo,
Você consegue fazer a conexão direta entre o computador e o módulo, para ver se o problema permanece ?
Abraço!
Adilson – Equipe MakerHero
Boa noite!
Conexão direta? Sendo um shield wifi só posso fazer conexão através deste tipo de rede, correto, ou existe outra maneira?
Como mencionei, com o ip fornecido pelo router, consigo pingar, mas não exatamente conectar via browser. Se eu escanear minha rede com o IP Scanner por exemplo, ele localiza o o módulo na rede, dá até para saber sobre o chip de rede utilizado, mas nada mais…
Alguma ideia?
Att. Paulo
Bom dia Paulo,
Sim, você pode fazer uma conexão P2P, mas não testei com esse modelo de wifi shield.
Abraço!
Adilson – Equipe MakerHero
Bom dia!
Estive sem tempo de fazer testes com o módulo wifi, pois estava vendo um outro projeto que utiliza um módulo Ethernet. Eis que no primeiro teste descrito acima, quase tudo funciona. Ele dispara os pings, diz que os 6 pacotes foram enviado mas nenhum pacote recebido. Então ao tentar o segundo exemplo, não funciona, pois mesmo eu sabendo o ip do dispositivo não consigo acessá-lo. Outra curiosidade, já tentei enviar dados para o ThingSpeak e não envia absolutamente nada, apesar de estar configurado corretamente. O módulo Ethernet envia os dados corretamente, e consigo fazer tudo o que não consigo com o Wifi, que comprei justamente para eliminar os cabos do projeto… Verifiquei todos os pontos de solda do módulo e está OK, já testei em outra placa Arduino UNO e nada. Alguma sugestão? Pois até o momento não consegui nenhum resultado esperado… Ah! Primeiramente estava utilizando módulos Xbee para transmitir os dados na minha rede interna, mas precisava de uma solução para Web.
Testei o tutorial para arduino UNO e funcionou normalmente.
Contudo, com arduindo atmega 2560, estou encontrando problemas na segunda parte do tutorial, que usa a library da Adafruit.
A primeira parte com a lib SFE CC3000 acontece ok.
Já a segunda parte, o programa bloqueia em !cc3000.begin().
Vocês poderiam me ajudar?
Preciso muito fazer esta shield da sparksfun funcionar com o arduino mega.
Boa tarde Renata,
Seu shield é da Keyes ou da Sparkfun ? Para o shield da Keyes, temos um tutorial específico, testado com o Arduino Mega:
https://www.makerhero.com/blog/wireless-wifi-shield-cc3000-keyes/
Abraço!
Adilson – Equipe MakerHero
Olá Adilson,
Percebi um problema no parser do segundo exemplo.
Onde é:
if (buf[bufSize-2] == ‘r’ && buf[bufSize-1] == ‘n’) {
(linha 136)
Deveria ser:
if (buf[bufSize-2] == ‘r’ && buf[bufSize-1] == ‘n’) {
Estes são os caracteres que representam fim da linha do request http.
Testei e agora está funcionando.
Espero ter ajudado. 🙂
Boa tarde Renata,
Muito bom, vou testar aqui e qualquer coisa altero o post. 🙂
Abraços e obrigado!
Adilson – Equipe MakerHero
Boa noite!
Estou tentando conectar na minha rede Wireless mas sem sucesso até o momento. A placa é testada e passa no teste, procura as redes disponíveis e encontra as redes vizinhas com seu respectivo tipo de segurança. Porém no ping, dá erro, não conecta na minha rede de testes, cuja segurança é WEP (em virtude de outros testes de rede que estou fazendo, embora a senha seja consideravelmente grande para não ter acessos indevidos). Obedeci as regras de SSID, senha e tipo de criptografia, mas nada. Vejam o resultado obtido:
——————————–
– SparkFun CC3000 –
——————————–
Inicializacao completa – CC3000
Versao de firmware : 1.24
Endereco MAC : 70:FF:76:02:6A:F9
——————————–
Procurando redes wifi
——————————–
Redes Wifi encontradas:
SSID: Bruno
Seguranca : WPA2
SSID: Carla
Seguranca : WPA2
SSID: PLS_WIRELESS
Seguranca : WPA2
——————————–
Conexao e teste de ping
——————————–
Conectando a rede : PLS_WIRELESS Erro: Nao foi possivel conectar !
Erro: Nao foi possivel obter dados de conexao
Aguardando endereco IP de : http://www.makerhero.com
Error: Could not lookup host by name
Teste de Ping IP 0.0.0.0 3 vezes…
Error: no ping response
Erro: Nao foi possivel desconectar !
——————————–
Então, sem conexão não consigo fazer mais nenhum teste, o que poderia ser? O sinal Wire é forte, pois estou a poucos metros do router. Uma pergunta, existe uma maneira de eu definir um número IP manual para a placa neste exemplo?
Outra coisa que noto enquanto carrego o código na minha Arduino UNO R3, aparece uma listagem de mensagens de erro e alerta, como os que seguem:
##########################################################
E:Meus DocumentosPauloDocumentosArduinoWIRE_1WIRE_1.ino:14:0: warning: “MAC_ADDR_LEN” redefined [enabled by default]
#define MAC_ADDR_LEN 6 //Armazena o endereço MAC
^
In file included from C:arduino-nightly-windowsarduino-nightlylibrariesSFE_CC3000_Library-master/utility/wlan.h:38:0,
from C:arduino-nightly-windowsarduino-nightlylibrariesSFE_CC3000_Library-master/SFE_CC3000.h:21,
from E:Meus DocumentosPauloDocumentosArduinoWIRE_1WIRE_1.ino:6:
C:arduino-nightly-windowsarduino-nightlylibrariesSFE_CC3000_Library-master/utility/cc3000_common.h:135:0: note: this is the location of the previous definition
#define MAC_ADDR_LEN (6)
^
O sketch usa 15.524 bytes (48%) de espaço de armazenamento para programas. O máximo são 32.256 bytes.
Variáveis globais usam 1.607 bytes (78%) de memória dinâmica, deixando 441 bytes para variáveis locais. O máximo são 2.048 bytes.
Pouca memória disponível, problemas de estabilidade podem ocorrer.
###########################################################
Alguém tem alguma ideia de como solucionar os problemas listados? É que estou fazendo os primeiros testes com a placa citada no tutorial, já tenho em uso placas Ethernet e outras com módulos XBee, que funcionam perfeitamente…
Abraços a todos.
Att.: Paulo Luis
Boa noite!
Problema resolvido, o problema em questão surgiu pois apesar da segurança utilizada ser WEP, a senha era em Hexadecimal de 128 bits, nesse caso não se pode tratar como char. Alterada a senha do Router Wireless, tudo OK!
Att. Paulo Luis
Ola, meu Shield CC3000 não consegue se conectar com o Wifi, já atualizei o firmware e nada, você pode me ajudar com alguma dica?
Boa noite, eu tenho um arduino com wifi,so que agora nao conssigo aceder a pagina de configuraçao do arduino, nem por ipnem por cabo rj45, parece que o arduino nega o acesso a essa pagina de configuraçao. o que posso fazer para resolver isso?
Olá,
Comprei de vocês o CC3000 Keyes e um Mega2560. Porém, na hora de testar o shield notei que há algum problema no “wifi.init()”. Pesquisando em outros lugares vi que a ligação do shield CC3000 pode ser diferente no caso do Mega2560. Encontrei respostas e guias para o shield da SparkFun, mas nada para o da Keyes. Vocês podem me ajudar?
Obrigado!
Bom dia Guilherme,
Temos um tutorial específico para o shield CC3000 da Keyes. Testei com ele e funciona normalmente no Arduino Mega, sem alterações no hardware:
https://www.makerhero.com/blog/wireless-wifi-shield-cc3000-keyes/
Qualquer problema, por favor nos avise.
Abraço.
Adilson – Equipe MakerHero
Olá, como eu mando dados para um servidor na nuvem com essa shield?
Consegui fazer com a shield ethernet
Abraço
Boa Tarde MakerHero,
Estou desenvolvendo um código em que o arduino faz medições de corrente tensão e ainda possui um giroscópio, todos esses ja desenvolvidos e testados.. E ainda temos essa placa cc3000, e queriamos passar esses dados para a internet, a indeia inicial, era ´para algum site ou email.. Mas esse artigo foi o unico que achei com algo do tipo, que por sinal está muito bom! Mas enfim, fiz o primeiro teste com a biblioteca da sparkfun, e funcionou perfeitamente, mas no segundo teste não deu nada certo, no serial monitor, apenas imprimiu “nInicializando…” e logo após da erro, ou melhor, aparece letras estranhas.. parece que a placa nao esta nem inicializando.. então queria saber se tem algo que vcs saibam para concertar esse problema.. Ah, e eu uso uma blackboard V1.0 da Robocore.. mas segundo eles se usa a mesma plataforma do arduino UNO, e todos os outros codigos testado nela, com base no arduino UNO, deram certo.. Bom é só isso, gostaria muito dessa ajuda.
E realmente, o blog é muito bom, e ajuda bastante nesse universo do arduino, muito Obrigado!
Olá,
Estou pensando em adquirir algum produto pra me introduzir à IoT, e estava pensando nesse (não gostaria de me prender a cabos que nem o ethernet shield).
Tenho 2 dúvidas: seria possível eu acessar os dados na Internet sem eu estar necessariamente conectado na mesma rede?
E há algum tutorial que ensine o input de dados, digo, vc digitar alguma coisa na página da internet e o arduino processá-lo ?
Boa tarde, estou precisando de um repetidor de sinal wifi para colocar junto ao arduino
vc saberia me indicar cm?
Bom dia Filipe,
Gostaria de tirar um duvida, quando acesso o IP do endereço DHCP na pagina de internet não aparece nada e na serial port aparece:
Client connected.
Client disconnected
Parabéns pelos tutoriais, são de grande ajuda para todos.
Bom dia Kaue,
Por favor tente utilizar outro browser ou até mesmo ligar diretamente o computador à placa ethernet, para verificar se não é alguma limitação do roteador.
Abraço e obrigado!
Adilson – Equipe MakerHero
Bom dia
Desde já volto a felicitar pelo trabalho.
Eu comprei recentemente um “cc3000 wifi shield” no ebay, este é um puco diferente do que utilizam neste tutorial, mas pelo que tenho lido este funciona com as bibliotecas “Adafruit_CC3000.h” no entanto eu já fiz teste com estas e com a biblioteca “SFE_CC3000.h” e o resultado é sempre parecido.
O resultado obtido é para a primeira uns 3 caracteres de lixo no serial monitor e para a segunda um único caracter de lixo no serial monitor.
Já testei o leitor de cartões SD e este funciona bem usado o exemplo fornecido no site da Arduino.
Um pormenor ou carregar o vosso código (1º código) eu obtenho o seguinte aviso “memoria quase cheia, pode afetar a estabilidade do sistema”
O meu Arduíno é um “Arduino Duemilanove com ATmega328”.
A minha wifi shield é “CC3000 WiFi Shield With SD Slot for Arduino R3 Mega 2560” http://www.ebay.co.uk/itm/171785253129?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Se me poder ajudar ficaria muito grato.
Cumprimentos
Boa tarde José,
Realmente esse é um erro que também apareceu nos nossos testes, mas não afetou o carregamento do programa.
Abraço.
Adilson – Equipe MakerHero
Se for o shield azul, vc tem q mudar os pinos do codigo para 3, 5 e 10. Veja se há algo escrito nas respectivas portas do seu SHIELD. Procura “CS, VBAT e IRQ”.
Parabens pelo tutorial Filipe muito bom.
Gostaria de saber se há algum relacionado a pegar informações do web browser para ligar um led.
No exemplo acima voce está enviando informações gostaria de um que receba as informações da web page. Você possui algum tutorial nesse sentido?
Bom dia
Parabéns pelo trabalho
Uma questão nas configurações da senha de rede “char ap_password[] = “PASSWORD”; // Senha da rede Wireless” funcionou correctamente com a pass inserida como indicado nos 2 códigos?
cps.
Boa noite José,
Funcionou, é exatamente o código que usamos para os testes.
Abraço.
Adilson – Equipe MakerHero
Resolvido, problema da velocidade do Serial tem de estar a 115200 .
Muito Obrigado
Bom dia Filipe, você tem essa antena externa do wifi cc3000 para venda? estou precisando adquiri-la rapidamente.
Olá estou com uma duvida,a
alguem pode ajudar?
o meu ficou só no inicializando e não sai disso, e na parte do servidor como funciona,voce teria algum outro exemplo de comunicação com o servidor?
Obrigado,
Agradeço desde já
não consigo acessar meu endereço ip no browser. no monitor serial aparece “Client Connected” e “Cllient disconnected” ao mesmo tempo quando atualizo a pagina do browser com meu ip. alguém pode me ajudar?
Também estou com o mesmo problema, conseguiu resolver?
Alguém sabe como grava os dados lidos pelos sensores no cartão SD?
Boa noite,
Temos um artigo falando especificamente sobre módulo SD no Arduino: https://www.makerhero.com/blog/modulo-cartao-sd/
Abraço.
Adilson – Equipe MakerHero
Olá,
Estou tentando conectar o wifi shield a um arduino MEGA, mas estou tendo problemas.
Ao executar o primeiro programa de exemplo que você disponibilizou, no Serial Monitor só vejo lixo, não vem nenhuma das informações esperadas..
Sabe me ajdudar?
Confirme se a velocidade Serial do lado direito embaixo no console está 115200 e não 9600.
Isso deve ajudar, outro detalhe que foi útil pra mim é que:
//Pinos
#define ADAFRUIT_CC3000_IRQ 2 //Pino de interrupcao (D2 ou D3)
#define ADAFRUIT_CC3000_VBAT 7 //Pode ser qualquer pino digital
mudar os números para 3 e 5 ao invés de 2 e 7 para o MEGA.
Bom dia
O seu problema ficou resolvido com a dica do Rafael?
Eu estou com o mesmo problema mas eu só vejo um carácter lixo no serial monitor, e não faz mais nada!
Estou a usar um Arduino Duemilanove com ATmega328.
Ao carregar o primeiro código obtenho a mensagem “pouca memoria, pode afectar o estabilidade do sistema” ou parecida!
Peço ajuda.
Obrigado
Boa tarde José,
Essa mensagem de “pouca memória” também apareceu nos nossos testes, mas não afetou o carregamento do programa.
Quanto ao lixo, também foi detectado, mas você pode tentar outras opções de velocidade do módulo.
Abraço.
Adilson – Equipe MakerHero
Bom dia
Obrigado pelas respostas!
O problema estava mesmo na velocidade Serial que estava a 9600 e devia estar a 115200.
Problema resolvido e teste efectuados 🙂
Obrigado
Boa noite pessoal !!!!
Qual o código que eu conseguiria acender e apagar um led utilizando a página web ?
Ola…estou a desenvolver um projeto (TCC) do meu curso ou melhor uma maquete automação residencial. preciso controlar reles(para acender iluminação) também preciso controlar sensores(exemplo: alarme da residencia, temperatura, umidade e etc…) bom vamos para duvida…como comunicar com o arduino na maquete? ou melhor qual a melhor opção? com essa placa wifi eu consigo controlar pelo smartphone e recer os dados dos sensores, sei que existe bluetooth porem a distancia é limitada.
Obs: apresentação final sera na faculdade, então eu tenho a senha para entrar na internet…so não tenho acesso ao roteador para ligar o arduino ou fazer configurações mais complexas.
Agradeço desde ja
Olá Geraldo! É possível sim. Você pode receber os dados dos sensores em uma página ou mesmo enviar solicitações ao arduino. A questão do roteador não é necessário alterar as configurações, já que o computador ou celular estará na mesma rede (mesmo roteador) do arduino. Caso queira disponibilizar para um acesso externo (disponível na internet independente do local de acesso) vai precisar configurar as opções do DMZ do router. Mas como especificou, isso não vai ser necessário, sendo totalmente possível implantar o projeto.
att., Daniel
Olá, usaria o Arduino mais para prototipagem, a dúvida que fica é se depois posso usar os módulos usados no Arduino em outros circuitos (como um PIC por exemplo)?
caro estou com uma duvida,tem como eu conectar esse shield no Arduíno Ethernet,e usa-lo para fazer a mesma coisa que o exemplo 2?
Att,
caíque carvalho
Boa tarde!
Gostaria de saber se o primeiro exemplo de programação do shield vale para todos os shields wifi, pois eu tenho um diferente.
Boa tarde Vinicius,
Nem sempre. Apesar de algumas bibliotecas servirem para vários módulos ou shields, geralmente cada dispositivo tem a sua biblioteca própria. Uma outra opção que você tem é alterar a biblioteca para que funcione com a sua placa.
Abraço.
Adilson – Equipe MakerHero
Boa tarde, utilizando o arduino uno e o cc3000 e uma camera, eu consigo enviar a imagem para algum sit????
eu vou fazer um tcc de um robo e preciso captar a imagem de video e audio para visualizar pela internet, consigo fazer isso com esses componentes?????
Boa tarde,
Consegue sim. Vai exigir um trabalho intenso de pesquisa, mas é possível.
Adilson – Equipe MakerHero
Equipe MakerHero estudo no inatel em santa rita do sapucai, estou com um projeto de cubos de led controlado por arduino nano, queria saber se tem como usar o WIFI SHIELD SPARKFUN para controlar a frequência dos leds via wifi. TA ai o esquema de montagem: https://electronicavm.files.wordpress.com/2011/07/cubo.png.
Bom dia Wesley,
Teoricamente sim. Com o Wifi Shield você consegue controlar as portas do Arduino. Talvez você precise utilizar um registrador de deslocamento como o 74HC595.
Abraço.
Adilson – Equipe MakerHero
Boa tarde Pessoal, não consigo fazer a conexão via wpa2 spk, sabem se existe alguma restrição? é necessário fazer a primeira conexão via smartconfig? com esse exemplo ai somente trocando o ssid e senha não consegui conectar.
Obrigado, No aguardo.
Boa noite,
Você tentou a conexão com algum outro tipo de segurança, por exemplo WEP ? Utilizamos WPA sem problemas.
Adilson – Equipe MakerHero
Boa noite.
Ainda a pouco perguntei se é possivel usar o Uno R3 para “ligar alguma coisa” via a internet wi-fi mas vi um menor ainda o Arduino Pro Mini Atmega328p, pois quero que seja permanente.
por exemplo: atraves da internet por um roteador wi-fi eu da “rua” ligar as lampadas da garagem e da casa ?
desde já agradeço e desculpas novamente por esstar pegando um “pouco” pesado.
Marco
Primeiramente queria parabeniza-los pelo excelente trabalho do blog e também dizer que sou novo na plataforma arduino e gostaria de saber se é possivel configurar esse dispositivo com um arduino UNO R3 e fazê-lo acender uma lampada ou ligar algo pela comunicação wi-fi.
exemplo: queria de algum lugar pela internet dar um comando de “acende luzes” e o arduino ligar as luzes de casa. via internet e o roteador.
desde já agradeço a atenção e espero não ter exigido de mais .
Marco Lomboni
Boa noite Marco,
Obrigado. Sim, é possível fazer isso, mas no momento não temos nenhum tutorial nesse sentido. Mas agradecemos a sugestão.
Abraço.
Adilson – Equipe MakerHero
Olá Marco! O que precisa fazer primeiramente é desenvolver as funcionalidades de acordo com o tutorial proposto pelo FILIPEFLOG. Após o perfeito funcionamento em sua rede local (acessando por um ip de rede local, como mostrado no tutorial), você deve realizar uma configuração em seu roteador. O “mecanismo” que gerencia o acesso externo (disponibilizando um acesso pela rede mundial de computadores) é chamado de DMZ. Assim você pode habilitar o acesso externo em seu roteador, verificar o IP de seu modem/roteador (para acessar a internet o modem/roteador fica com um IP único na rede, que geralmente é alterado quando o mesmo é reiniciado), e configurar o IP do dispositivo local que deseja acessar pela internet, no caso, o IP local do seu arduino. A propriedade do seu modem/roteador vai fazer que quando tentar acessar o mesmo pela internet faça o redirecionamento para seu dispositivo na rede interna. Pesquise como efetuar essa configuração. É válido não só para arduino, mas para qualquer dispositivo que esteja conectado em um rede fechada que deseja acessar externamente. Não pode deixar de considerar que seus dispositivos podem ficar vulneráveis, já que está permitindo acesso externo, mas acredito que não terá problemas.
Atenciosamente, Daniel
Olá Marco! O que precisa fazer primeiramente é desenvolver as funcionalidades de acordo com o tutorial proposto pelo FILIPEFLOG. Após o perfeito funcionamento em sua rede local (acessando por um ip de rede local, como mostrado no tutorial), você deve realizar uma configuração em seu roteador. O “mecanismo” que gerencia o acesso externo (disponibilizando um acesso pela rede mundial de computadores) é chamado de DMZ. Assim você pode habilitar o acesso externo em seu roteador, verificar o IP de seu modem/roteador (para acessar a internet o modem/roteador fica com um IP único na rede, que geralmente é alterado quando o mesmo é reiniciado), e configurar o IP do dispositivo local que deseja acessar pela internet, no caso, o IP local do seu arduino. A propriedade do seu modem/roteador vai fazer que quando tentar acessar o mesmo pela internet faça o redirecionamento para seu dispositivo na rede interna. Pesquise como efetuar essa configuração. É válido não só para arduino, mas para qualquer dispositivo que esteja conectado em um rede fechada que deseja acessar externamente. Não pode deixar de considerar que seus dispositivos podem ficar vulneráveis, já que está permitindo acesso externo, mas acredito que não terá problemas.
Atenciosamente, Daniel
Pessoal,
Alguém usou esse shield para ler uma string digitada no browser? Ja que o “readString.indexof” do ethernet não funciona.
Ex, se eu digitar:
“http://192.168.1.2/AcenderLuz”
Eu quero que ele pega essse “AcenderLuz” processe e acenda um led por exemplo.
Alguém já fez isso com esse shield? E que possa me ajudar?
Conseguiu algo nesse sentido jayme?
Estou precisado acender um led via wifi. Criar um webbrowser e através de um comando ou uma string acender e apagar um led
Pessoal,
Alguém já conseguiu colocar setar um IP FIXO neste shield? Só estou consigo dinâmico….
Atribui o MAC do shield pra um ip fixo no meu roteador e resolveu meu problema.
Boa noite Jayme, vc conseguiu acender o led pela via wifi web? qual código utilizou para isto?
Caros boa noite!
Gostaria de saber se com esse modulo wireless, eu consigo conecta-lo ao arduino uno e narede local, substituindo a porta Com1 usb do meu leitor RFID, porque fiz uma alimentação e gostaria que os dados das tags RFID fossem transmitidos para o monitor através da rede local, sem a necessidade de fios.
Isso seria possivel com esse modulo ou com NRF24L01?????
Desde ja obrigado!!
Boa noite Edson,
Não temos como dizer se isso é possível sem ver o seu projeto completo. Talvez você tenha que desenvolver algum tipo de programa para ler os dados à partir da rede local.
Adilson – Equipe MakerHero
Quero parabeniza-los pelo excelente conteúdo desenvolvido nesse blog e obrigado pelo atendimento.
Valeu Edson !
Grande abraço e continue acompanhando a MakerHero !
Adilson – Equipe MakerHero
Bom dia. Você sabe se tem como mostrar o nível de sinal e ou qualidade do mesmo de cada SSID. Tem uma lista de comandos que posso usar?
Bom dia João,
Não sei se é possível, pelo menos com a biblioteca disponibilizada. Não encontrei nenhum comando que teste o nível de sinal.
Abraço.
Adilson – Equipe MakerHero
Ola, preciso conectar meu Arduíno em uma rede, mas o mesmo precisa estar em modo AP e não cliente, depois ele deve buscar informações que os equipamentos que estão em modo cliente enviarão
é possível usando esta shield ?
obrigado.
Boa tarde Hans,
Vi alguns documentos mostrando que o chip CC3000 não permite atuação como um access point, ele pode apenas se conectar à um AP. Não é especificamente desse shield, mas esse módulo utiliza o mesmo chip :
http://www.adafruit.com/product/1469
Abraço.
Adilson – Equipe MakerHero
Esse código tem pronto ou foi desenvolvido ??
att
Boa tarde Carlos,
Esse código foi desenvolvido tendo como base os exemplos das bibliotecas citadas.
Abraço.
Adilson – Equipe MakerHero
CAROS,
COMO POSSO AGREGAR COMANDO DE VOZ E CONFIRMACAO POR AUDIO DE UM ACIONAMENTO EM UM ARDUINO, OU ISSO JA VEM INCORPORADO NO EQUIPAMENTO?
POSSO AUMENTAR MEUS CANAIS DE ACIONAMENTO LIGANDO DOIS ARDUINOS EM PARALELO?
EXISTEM APLICATIVOS PARA ARDUDIINO COM MAIS DE 10 CANAIS?
AGUARDO
GRATO!
Boa tarde Fabiano,
Comandos de voz e acionamento por áudio não são nativos no Arduino, você deve adaptar módulos específicos para essa finalidade.
Não entendi a pergunta sobe os 10 canais, pode ser mais específico ?
Grato.
Adilson – Equipe MakerHero