Guia de Laboratório para aulas com ESP-12
Um microcontrolador é um circuito integrado que contém um computador. Ele possui:
- de um a quatro núcleos de processamento
- uma quantidade de circuitos timer
- Memória de programação (NVRAM) - Lugar onde fica armazenado o código a ser executado
- Memória RAM para dados
- interfaces de comunicação (WiFi, serial, GPIO, etc.)
- outros circuitos de aplicação mais específica, por exemplo acelerador AES
No caso do ESP-12, o microcontrolador se chama ESP-8266. Ele não possui NVRAM e a memória de programação é uma memória FLASH externa ao chip, montada na placa do ESP-12, ao lado do ESP-8266, por baixo daquela capa metálica. Na placa do ESP-12 se encontra ainda a antena para o WiFi.
Logo, o ESP-12 é capaz de executar o programa que estiver escrito nele, se comunicar pela portas GPIO e também através de WiFi.
ESP-01, ESP-12, NodeMCU são placas que facilitam a utilização do ESP-8266.
Portas do ESP-12E
- VCC e GND - Portas de alimentação do módulo. A tensão de operação do ESP-12 é 3.0V a 3.6V
- GPIO 0 - Define se o chip vai ser usado em modo programação ou modo de execução
GPIO 0 conectado no GND(0) - Modo programação - O ESP se prepara para receber um novo programa
GPIO 0 desconectado ou conectado ao VCC(1) - Modo de Execução - O ESP executa o programa existente na memória de programação
O GPIO 0 deve estar alimentado com o sinal lógico antes de ser conectado ao VCC
- TXD0 e RXD0 - Portas de comunicação. Através dessas portas o ESP (R)ecebe e (T)ransfere dados em modo de programação ou em modo de execução. Estes dados podem ser comandos AT (em modo de execução) ou um novo programa, compilado em código binário (em modo de programação)
- RST - RESET
- EN - ENABLE do WiFi
- GPIO - General Purpose Input Output. Portas pelas quais o ESP pode trocar dados com outros componentes, quando em modo de execução
- ADC - entrada analógica
Informações de como você pode usar o ESP-12 em casa podem ser encontrados neste link.
Informações para ajudar monitores da disciplina na preparação da aula estão aqui.
Verificar reset, conexão serial, e modo de programação
- Verifique se o pino GND está conectado com GND da protoboard (linha azul)
- Verifique se o pino VCC está conectado com a alimentação positiva do protoboard (linha vermelha).
- Verifique se o cabo de conexão serial está conectado (fio preto no GND da protoboard, fio verde no pino RXD0 e fio branco no pino TXD0).
- Verifique se o pino RST está conectado com resistor, diodo e capacitor.
- Verifique se o resistor do pino GPIO0 está conectado a zero. Não conecte o GPIO0 diretamente a zero, mas use um resistor para conectar o GPIO à chave e coloque a chave em posição zero. Se a chave não funcionar, use um simples fio conectado ao resistor.
- Dê o comando
esp_mac
. O LED azul do ESP-12 deve dar uma breve piscada e o MAC
deve aparecer na janela de comando.
Comandos AT
O ESP-12 vem de fábrica com firmware de comandos AT. Se alguém programou outra coisa no seu ESP-12, você pode refazer a programação de fábrica mediante o comando esp_at
.
Saia do modo de programação (chave em '1') e de dentro de uma janela de terminal, dê o comando esp_serial
e em seguida aperte a tecla Enter
.
A resposta deve ser ERROR
Se não aparece nenhuma resposta, a comunicação serial não está funcionando ou você está em modo programação (chave em posição '0' ou pull-down em GPIO0).
Se o ESP12 ficar doido:
AT+RESTORE
Para listar os pontos de acesso alcançáveis:
AT+CWMODE=1
AT+CWLAP
Para receber a homepage do servidor do Labarc:
AT+CWMODE=1
AT+CWJAP="LABARC","senha_wifi"
Verifique o endereço IP atribuído ao ESP-12:
AT+CIFSR
Conecte-se ao servidor HTTP do Labarc:
AT+CIPSTART="TCP","labarc.ufcg.edu.br",80
AT+CIPSEND=9
agora vai aparecer
>
no início da linha e não terá mais echo
GET /a/
termine com Enter
Compare a resposta com aquilo que você vê no browser na URL http://labarc.ufcg.edu.br/a
AT+CIPCLOSE
fecha a conexão TCP.
Tente acessar qualquer outro website.
Para sair do comando esp_serial
, use a combinação de teclas Ctrl-\ e q.
Programar o ESP-12 via serial
- Clique no ícone azul com símbolo de infinito na sua tela para abrir a IDE.
- Em Tools->Board escolhe a opção "NodeMCU 1.0 (ESP-12E Module)"
- Em Tools->Port escolhe a opção "/dev/ttyUSB0" ou "/dev/ttyUSB1".
- Abre File->Examples->ESP8266->Blink
- Clique em Upload (o ícone com a seta para direita). Você deve ver pontos desfilando na parte inferior da IDE. Depois que aparece "Upload done" o LED azul do ESP-12 deve estar piscando.
resultado | nota |
gravar MAC em um arquivo | 2 |
mostrar WiFi acess points | 2 |
acessar website do labarc | 2 |
acessar website do fora | 2 |
programar via serial | 2 |
Servidor HTTP
Para colocar um servidor HTTP dentro do seu ESP-12, veja em File->Examples->ESP8266WebServer->HelloServer
Não use a porta 80, use a porta 8080.
Acessar o Servidor
Você pode usar seu celular com acesso à internet via 3G. Caso você não tenha internet via 3G pode emprestar um que tenha.
Primeiro você precisa verificar o IP do seu ESP-12, ver dicas.
No navegador do seu celular, acesse então, por exemplo, http://150.165.42.32:8080
Dica 1: veja se seu ESP-12 está aparecendo na rede http://labarc.ufcg.edu.br/a/ip.html
Dica da Dica 1: saiba o MAC do seu ESP-12 usando o comando esp_mac para encontrar o IP no link acima.
Dica 2: no fim do setup()
, mande imprimir o IP que seu ESP-12 pegou, e visualize a impressão usando o Serial Plotter da IDE Arduino em 115200 baud.]
Dica da Dica 2: essa dica so funciona no momento que o upload termina. Depois, pode tentar a dica 5.
Sensor - Detectar que uma mão toca um fio
Implemente este circuito:
Use esta subrotina para obter um valor entre 0 e 200 que indica se alguém está segurando o fio ou não:
#define OSC_IN 12
#define OSC_OUT 13
uint8_t mao() {
register uint8_t now=0, prev=1, value=0;
for(register uint8_t i=0; i<200; i++) {
now = GPIP(OSC_IN);
value += now ^ prev;
prev = now;
if( now ) GPOC = (1 << OSC_OUT);
else GPOS = (1 << OSC_OUT);
}
return value;
}
Dentro da rotina
setup
é preciso colocar:
pinMode(OSC_IN, INPUT);
pinMode(OSC_OUT, OUTPUT);
Implemente IoT para uma porta corrediça automática: Um comando pelo browser do smartphone tranca e destranca a fechadura da porta (use um LED para indicar que a porta está destrancada). Se a porta estiver destrancada, quando sua mão toca na maçaneta (o fio), a porta se abre (use outro LED para indicar que a porta está aberta). Se a porta estiver trancada, ela não abre. Uma consulta pelo browser do smartphone deve informar se a porta está aberta ou fechada.
Restrições:
- Tocando uma entrada de porta CMOS, a porta reage a essa entrada, mais ainda se alguma outra parte do seu corpo estiver conectada em algum potencial elétrico. Não é permitido usar esse efeito, tem que usar o sensor conforme descrito para pegar nota.
- Não vale conectar LED nem no GPIO 12 nem no GPIO 13.
- Embora tem portas lógicas disponíveis na protoboard, não é permitido usar-las, tudo tem que ser feito por software.
Observação: Vocês poderão entender a teoria do funcionamento do sensor depois da aula sobre oscilador em anel.
Dica 1: Para saber os valores retornados por mao()
, tanto no caso de você tocar como no caso de não tocar, pode visualizar estes valores no esp_serial
usando Serial.println()
.
Dica 3: O "comando pelo smartphone" pode ser qualquer acesso ao servidor HTTP do seu ESP-12.
Dica 4: Para o LED, pode usar GPIO 4,5,14, ou 16.
Dica 5: dentro do esp_serial
pode usar Ctrl-\ B
para realizar um reset.
Dica da Dica 5: se Ctrl-\ B
não funcionar, pode dar reset tirando e recolocando o cabo USB de alimentação.
| Nota |
grave o IP do seu ESP-12 num arquivo chamado ip.txt | 2 |
(opcional) ESP-12 envia resposta para o browser do smartphone | 4 |
e smartphone tranca e destranca | 6 |
e porta abre | 8 |
e status da porta pelo browser | 10 |
Programar o ESP-12 OTA
- Abre File->Examples->ArduinoOTA->Labarc_OTA e coloque o numero do seu PC na variável host.
Salve o seu projeto. NÂO LEIA nada, só clique em "OK" e "Salvar".
- Clique em Upload para programar o ESP-12 via conexão serial, ou seja, escolhe Tools->Port->/dev/ttyUSB
- Verifique se o resistor do pino GPIO0 está conectado a VCC. Normalmente o resistor está conectado à chave. Verifique se a chave está na posição '1'.
- Abre um terminal X, dê o comando esp_serial dê reset (Ctrl-\ B ou tire e colo1que o cabo de alimentação). Verifique que não aparece nada de "DHCP" e observe o IP reportado.
- Escolhe no menu Tools->Port o nome de seu ESP-12 com IP reportado, por exemplo "ota-22 at 150.165.42.32 (Generic ESP8266 Module)".
Caso ele não aparecer, ou aparecer o nome mas o IP não confere, fecha a IDE Arduino e abre de novo.
- Pegue o desentupidor, e com ele na mão escolhe clique em Upload para programar o ESP-12 agora OTA (Over The Air, pelo WiFi).
- Acrescente o necessário no código Labarc_OTA para fazer o LED piscar. Use o código em File->Examples->ESP8266->BlinkWithoutDelay. No
labarc_loop()
não precisa de if(currentMillis...
, só do if(ledState...
.
Dica: quando você estiver trabalhando no modo OTA, pode usar o comando esp_serial
para ver o quê o ESP-12 está fazendo durante a programação. Observe que não pode usar esp_serial
durante a programação pela serial (ttyUSB).
O seu IP aparece no menu Tools->Port. Exemplo:
Em Tools->Port aparece
Alternativamente, pode rodar o comando esp_serial
e dar reset com a chave em '1'. Valem as dicas do servidor HTTP.
Para OTA funcionar, ninguém pode ativar seu celular como access point
Veja aqui a explicação:
https://superuser.com/questions/474280/considerations-about-using-multiple-wireless-access-points-with-the-same-channel