Anda di halaman 1dari 8

Tutorial Mdulo Wireless ESP8266 com

Arduino

23 de junho de 2015
Wireless
244 Comentrios
8

Com o Mdulo Wireless ESP8266 voc pode conectar o seu Arduino nas redes wireless 802.11
b/g/n, enviando e recebendo dados nos modos AP (Access Point/Ponto de acesso) e STA (Station),
e neste tutorial vamos mostrar como configurar esse mdulo como web server, enviando dados
para um browser.

Esse mdulo se comunica com o microcontrolador utilizando interface serial e seu firmware pode
ser atualizado, se necessrio. Possui ainda 2 pinos GPIO (General Purpose Input Output, ou
Entrada e Sada de uso geral), permitindo que o mdulo seja programado diretamente e a GPIO
acionada sem a necessidade de uso de um microcontrolador.
Outras caractersticas do Mdulo Wireless ESP8266:

Conexo redes padro 802.11 B/G/N


Alcance aproximado: 91 metros
Tenso de operao : 3.3 VDC
Comunicao serial: pinos TX e RX
Modos de operao : Cliente, Access Point, Cliente+Access Point
Modos de segurana wireless : OPEN/WEP/WPA_PSK/WPA2_PSK/WPA_WPA2_PSK.
Suporta comunicao TCP e UDP, com at 5 conexes simultneas

O mdulo possui antena embutida e um conector de 8 pinos, alm dos leds indicadores de
funcionamento (vermelho) e comunicao (azul):

Ateno para o nvel de sinal utilizado pelo mdulo, que de 3.3V, assim o pino RX (Recepo
serial) no pode ser ligado diretamente ao Arduino. Voc pode montar um divisor de tenso com
dois resistores, utilizando o calculador deste link.

Ligao do mdulo ESP8266 ao Arduino


Na ligao do ESP8266 com o Arduino usamos um resistor de 1K entre o Vcc (3.3V) e o pino
CH_PD (Chip Enable). Para o divisor de tenso, utilizamos 2 resistores de 10K, o que diminuiu a
tenso do nvel de sinal para um valor suficiente para os testes. Os dois push-buttons do circuito
sero utilizados para enviar informaes uma pgina web, utilizando um web server. Os
resistores utilizados nos botes tambm so de 10K.

Recomendamos a utilizao de uma fonte externa para alimentao do mdulo, pois dependendo
da situao ele pode exigir at 300mA de corrente, e o limite do Arduino de 50mA.

Programa web server ESP8266


Antes de carregarmos o programa do web server, vamos alterar a velocidade de comunicao (baud
rate) do mdulo, que por padro est setada em 115200 (firmware verso 0.9.5). Nessa velocidade,
a biblioteca Software Serial no foi capaz de realizar a comunicao adequadamente, por isso
alteramos a velocidade para 19200, utilizando o programa abaixo.
Na linha 17 colocamos a velocidade padro (115200), e na linha 25 setamos a nova velocidade
(19200):
1 // Programa: Versao firmware modulo ESP8266 e
mudanca de baud rate
2 //
// Autor : FILIPEFLOP
3
4 #include <SoftwareSerial.h>
5
6 //RX pino 2, TX pino 3
7 SoftwareSerial esp8266(2, 3);
8
9 #define DEBUG true
10
setup()
11void
{
12 Serial.begin(9600);
13 // Configure na linha abaixo a velocidade inicial do

14 // modulo ESP8266
15 esp8266.begin(115200);
sendData("AT+RST\r\n", 2000, DEBUG);
16 delay(1000);
17 Serial.println("Versao de firmware");
18 delay(3000);
19 sendData("AT+GMR\r\n", 2000, DEBUG); // rst
Configure na linha abaixo a velocidade desejada para a
20 //
// comunicacao do modulo ESP8266 (9600, 19200, 38400, etc)
21 sendData("AT+CIOBAUD=19200\r\n", 2000, DEBUG);
22 Serial.println("** Final **");
23}
24
25void loop() {}
26
String sendData(String command, const int timeout, boolean debug)
27{
28 // Envio dos comandos AT para o modulo
29 String response = "";
30 esp8266.print(command);
int time = millis();
31 long
while ( (time + timeout) > millis())
32 {
33
while (esp8266.available())
{
34
// The esp has data so display its output to the serial window
35
char c = esp8266.read(); // read the next character.
36
response += c;
37
}
38 }
39 if (debug)
40 {
Serial.print(response);
41 }
42 return response;
43}
44
45
46
47
48
49
50
51
Nesse programa, mostrado no serial monitor a verso de firmware do mdulo e tambm se os
comandos foram processados com sucesso:

No programa vamos utilizar a biblioteca SoftwareSerial para efetuar a comunicao com o


mdulo usando os pinos 2 (RX) e 3 (TX). Assim, podemos utilizar o serial monitor para
acompanhar o envio dos comandos ao mdulo. Na linha 18 do programa, substitua as informaes
de SSID (nome da rede wireless) e SENHA pelas informaes da rede qual o mdulo ir se
conectar.
1 // Programa: Web Server com modulo ESP8266
2 // Alteracoes e adaptacoes: FILIPEFLOP
3
4 #include <SoftwareSerial.h>
5 //RX pino 2, TX pino 3
6 SoftwareSerial esp8266(2, 3);
7
8 #define DEBUG true
9
10void setup()
11{
Serial.begin(9600);
12 esp8266.begin(19200);
13
14 sendData("AT+RST\r\n", 2000, DEBUG); // rst
15 // Conecta a rede wireless
16 sendData("AT+CWJAP=\"SSID\",\"SENHA\"\r\n", 2000, DEBUG);
17 delay(3000);
sendData("AT+CWMODE=1\r\n", 1000, DEBUG);
18 // Mostra o endereco IP
19 sendData("AT+CIFSR\r\n", 1000, DEBUG);
20 // Configura para multiplas conexoes

21 sendData("AT+CIPMUX=1\r\n", 1000, DEBUG);


22 // Inicia o web server na porta 80
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);
23}
24
25void loop()
26{
27 // Verifica se o ESP8266 esta enviando dados
(esp8266.available())
28 if
{
29
if (esp8266.find("+IPD,"))
30
{
delay(300);
31
int connectionId = esp8266.read() - 48;
32
33
String webpage = "<head><meta http-equiv=""refresh"" content=""3"">";
34
webpage += "</head><h1><u>ESP8266 - Web Server</u></h1><h2>Porta";
35
webpage += "Digital 8: ";
int a = digitalRead(8);
36
webpage += a;
37
webpage += "<h2>Porta Digital 9: ";
38
int b = digitalRead(9);
39
webpage += b;
40
webpage += "</h2>";
41
String cipSend = "AT+CIPSEND=";
42
cipSend += connectionId;
43
cipSend += ",";
44
cipSend += webpage.length();
45
cipSend += "\r\n";
46
47
sendData(cipSend, 1000, DEBUG);
sendData(webpage, 1000, DEBUG);
48
49
String closeCommand = "AT+CIPCLOSE=";
50
closeCommand += connectionId; // append connection id
51
closeCommand += "\r\n";
52
53
sendData(closeCommand, 3000, DEBUG);
}
54
55 }
56}
57String sendData(String command, const int timeout, boolean debug)
58{
59 // Envio dos comandos AT para o modulo
60 String response = "";
61 esp8266.print(command);
long int time = millis();
62 while ( (time + timeout) > millis())
63 {
while (esp8266.available())
64
{
65
// The esp has data so display its output to the serial window
66
char c = esp8266.read(); // read the next character.

67
68
69
70
71
72
73}
74
75
76
77
78
79
80
81
82
83
84
85
86
87

response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;

Acompanhe no serial monitor as informaes de conexo ao access point (AP) e tambm o


endereo IP obtido pela placa.

Para testar o funcionamento do circuito, abra um browser (Chrome, Firexox, etc) e digite na barra
de endereos o endereo IP que foi mostrado no passo anterior, no nosso caso, 192.168.0.27:

Acione os botes do circuito para que as informaes correspondentes sejam enviadas ao browser.
Devido taxa de atualizao, as informaes podem demorar alguns segundos para aparecer na
tela. Abaixo, temos uma imagem do circuito que utilizamos para montar este post:

Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final
do artigo) e visite nossa loja FILIPEFLOP!

Anda mungkin juga menyukai