Translate

sábado, 31 de dezembro de 2016

Blink no ESP8266 ESP-12F via CH340G


Outro post para lembrar posteriormente como fazer algumas coisas bem básicas.

Tentei utilizar o exemplo Blink do esp8266 no Arduino IDE sem sucesso. Tinha até abandonado a tentativa alguns meses atrás, então resolvi ir até o fim. Simplesmente o exemplo não funciona no ESP-12F, e através de um exemplo da URL iot-playground.com, descobri que era simples cumprir, fazendo alguns testes adicionais. Lembrando que utilizo o CH340G mencionado em  utilizando-o-firmware-nodemcu-com-lua.

Desta vez utilizei o Arduino IDE 1.8.0. Complementarmente as instruções de programando-esp8266-esp-01-esp-12-com-Arduino-IDE-via-CP2102, existem algumas configurações que podem complicar, se não forem feitas corretamente. Seguindo a configuração no último endereço citado, no item "Configurando o Arduino IDE 1.6.7", verificar se coincide também com a figura abaixo:


No exemplo Blink do ESP8266, devemos alterar todos os LED_BUILTIN do código por 2. No ESP-12F, o programa funcionará no LED de RX. Provavelmente funcionará nas outras versões o ESP8266, pois no exemplo que consultei foi utilizado o ESP-01.


Original:

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
                                    // but actually the LED is on; this is because 
                                    // it is acive low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);                      // Wait for two seconds (to demonstrate the active low LED)
}
Modificado:

void setup() {
  pinMode(2, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
//Serial.begin(115200);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(2, LOW);   // Turn the LED on (Note that LOW is the voltage level
                          // but actually the LED is on; this is because 
                          // it is acive low on the ESP-01)
  delay(1000);            // Wait for a second
  digitalWrite(2, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);            // Wait for two seconds (to demonstrate the active low LED)

//Serial.print(LED_BUILTIN);
}
Existem 2 linhas comentadas para mostrar qual o valor de LED_BUILTIN. No meu teste, mostrou "1". Quando utilizei o original, testei todas as portas, mas não achei qual delas correspondia.

Adição posterior: D1 é a porta TX0; dependendo do modelo, muda o valor de LED_BUILTIN (se não me engano, nesse modelo que testei é o D15)

Utilizando a porta 2 no código, a porta ativada é a GPIO02.

NÃO ESQUEÇA QUE PARA FAZER O UPLOAD DO PROGRAMA PARA O ESP-12F, O BOTÃO FLASH DEVE SER MANTIDO APERTADO DURANTE TODA A CARGA.

Adição posterior: aprendi que o NODEMCU 1.0 não precisa estar com o FLASH apertado para o upload

Para este programa, o microcontrolador continua a funcionar normalmente mesmo com o botão Flash apertado.

sábado, 16 de julho de 2016

Carregando o firmware micropython no ESP8266

O procedimento é muito simples e a dificuldade está nas muitas ferramentas e sites de referência. Novamente utilizei o ESP-12F com CH340G acoplado.


  • baixar o Esp8266flasher.exe no site de desenvolvimento deste (baixar a versão do SO utilizado, 32 ou 64 bits); caso seja necessário, descompacte o arquivo para deixar disponível o arquivo executável;
  • baixar o módulo Micropython do site desenvolvedor; observe que a versão correta está na seção "Firmware for ESP8266 boards";
  • executar o programa baixado ESP8266FLASHER.EXE;
  • na aba Config, clique na primeira engrenagem e localize o módulo micropython baixado;
  • clique na guia Operation, escolha a porta serial correta e clique em Flash(F); aguarde o término da barra de progresso;
  • para testar, conecte um emulador de terminal (por exemplo o PUTTY) na porta serial em que o esp8266 estiver conectado e resete o esp8266;

Referência:

Tutorial de reset/restore e update de firmware de fábrica do ESP8266


E para voltar o esp8266 para configuração de fábrica depois de carregar e descarregar micropython e nodemcu firmware?

Olha o passo-a-passo, depois da salada de frutas que passei para conseguir, mas que pode ser aproveitado até para atualizar o firmware:

  • utilizei as instruções do site filipeflop, mas estavam muito desatualizadas, por isso, vai um pouco (na verdade muito) mais mastigado; o modelo que usei é o ESP-12F com conversor usb-serial CH340G agregado;
  • baixar o flash download tool no site da Espressif; no meu caso estava na versão "ESP8266 Flash Download Tools V3.3.4"; observe que deverá ter o python 2.7 ou mais recente instalado e com o caminho dos binários e script incluídos no PATH (nas váriáveis de ambiente do Windows); coloquei um mini-tutorial no final deste post;
  • baixar o sdk non-os do esp8266 no site da Espressif; na data deste post, baixei o "ESP8266 NONOS SDK V1.5.4" e o último patch "ESP8266 NONOS SDK V1.5.4.1 Patch_20160704" para deixar mais atualizado;
  • descompacte os arquivos em pastas separadas;
  • executar o ESP Download Tool e carregar a configuração conforme a tela abaixo (observar que os checkbox à esquerda dos uploads estão marcados); use o bom senso para encontrar os uploads nas pastas corretas;

  • clicar em START e aguardar a barra de progresso se completar;
  • para testar, conecte um emulador de terminal (por exemplo o PUTTY) na porta serial em que o esp8266 estiver conectado, resete o esp8266 e insira o comando AT+GMR (em maiúculas, senão dá erro; caso não pule a linha após dar um Enter, tecle Ctrl+J (line feed):

Qual a finalidade disso? Estava tentando carregar um programa pelo Arduíno IDE e falhei ao tentar fazer o upload. Suspeito que era problema de existir o Nodemcu como firmware. Enfim, se não dominarmos o SO do módulo, o que se dirá de dominar o funcionamento dos programas?

PYTHON

Não acho interessante abrir um post somente para ensinar a instalar o Python, então uma receitinha simples:

  • baixe o Python (de preferência o 2.xx) no site;
  • descompacte para uma pasta (eu prefiro C:/python27);
  • no Win7 clicar em Iniciar, e com o botão direito no Computador escolher Propriedades;
  • escolher Configurações avançadas do sistema e a guia Avançado;
  • clicar no botão variáveis de ambiente;
  • na listbox Váriáveis do sistema, clique duplo em PATH;
  • no valor da variável, acrescentar (referenciando no meu caso, em que a instalação está na pasta C:\PYTHON27) ";C:\PYTHON27;C:\PYTHON27\SCRIPTS;" como abaixo:

  • clicar em Ok e pronto.








quarta-feira, 29 de junho de 2016

Utilizando o firmware nodemcu com LUA em ESP8266 ESP-12 genérico



    Adquiri alguns ESP-12F no Aliexpress, aproximadamente US$ 2,78, frete grátis, devido ao fato de já vir com o conversor USB-SERIAL CH340G. Baratíssimos e com o breakout board de programação encaixado. Muito prático.


   Sofri um pouco para conseguir carregar alguma coisa nesse ESP. O firmware original do Nodemcu não se adaptou. Não insisti muito, porque demorei para chegar nessa conclusão. Achei que havia problemas com o CH340G e gerou várias mensagens de erro de memória, caracteres estranhos, etc. Só deu certo utilizando o app gravador certo com a firmware adaptável. Este post foi feito logo após dar certo, então não há aprofundamento. Cheguei somente ao ponto de conseguir a conexão wifi com LUA.


1. Iniciando o procedimento


   Inicialmente, instalei o driver do CH340G para windows (7-x64, no meu caso). Baixei no endereço http://www.wch.cn/download/CH341SER_ZIP.html ou alternativo.
   Em seguida, acessei o site http://nodemcu-build.com/ para gerar um firmware customizado. Somente dei o email (onde será enviado o endereço de download do firmware gerado), marquei alguns módulos e cliquei em "Start your build". 5 minutos depois, chegou o email com o endereço. Baixei os 2 firmwares gerados (um para utilizar somente números inteiros, teoricamente mais rápido e menor, e outro que utiliza também números com ponto flutuante).


   Baixei o ESPFlasher.exe https://github.com/nodemcu/nodemcu-flasher (alternativo) para gravar o firmware no ESP. Para carregar o firmware, simplesmente conectar o ESP na USB, executar o ESPFlasher.exe, selecionar a porta COM referente à USB utilizada e indicar o firmware baixado na aba Config. Verificar o endereço 0x00000 e na aba Advanced, verificar se a velocidade está em 115200 ou 230400. Voltar à aba Operation e clicar em Flash. Aguardar até o final da operação. Caso suspeite de erro, clicar em Restore Defaults na aba Advanced, para limpar as alterações e refazer a configuração da carga. Às vezes é necessário resetar o módulo para assumir o novo firmware.

2. Verificando o firmware.

   Fiz via ESPlorer, que pode ser baixado no endereço http://www.14core.com/how-to-install-esplorer-ide-in-multiple-platform/ (alternativo).
   Verificar a porta COM utilizada, a velocidade (melhor 115200) e clicar em Open, para fazer a comunicação.

  Logo após Resetar o ESP, o console ficou assim (note caracteres estranhos), e o comportamento estava normal, aparentemente.

   Com algumas dicas da página da Adafruit sobre o esp8266, vi que havia necessidade de alterar o modo de comportamento do ESP, originalmente AP, para station:

   Entrando com o código abaixo (modifiquei da página da Adafruit) e enviando para o ESP, é feita a conexão do ESP com o AP que você utiliza. Observe que na página referida existe um código para listar os APs disponíveis para o ESP. O final do código falhou. O servidor de DHCP deve ter demorado um pouco para fornecer o endereço e o primeiro resultado foi NIL. Reinseri o comando e o resultado foi ok.

 

   Este blog me serve sempre como referência para posteriormente refazer os passos, chegando no resultado. Assim, sinta-se livre para comentar e perguntar, que farei o possível para responder.

3. Referências:

  • https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-nodemcu-lua
  • http://bbs.espressif.com/viewtopic.php?f=67&t=225/
  • http://www.wemos.cc/



quarta-feira, 20 de janeiro de 2016

Programando ESP8266 ESP-01 ESP-12 com Arduino IDE via CP2102


Este ensaio demorou para sair. Estava temendo não dar certo por muitas razões. Muita informação, mas devido aos vários modelos, as informações são desencontradas, se contradizem, etc. Garimpei muitos sites até filtrar os mais confiáveis.
O site base é este: https://github.com/esp8266/Arduino onde se encontra o projeto e código fonte para habilitação do IDE Arduino para manipulação dos programas para ESP8266.
A pinagem retirei do site http://makezine.com/2015/04/01/installing-building-arduino-sketch-5-microcontroller/  pois, devido à utilizar o modelo ESP-01, os conectores são dispostos diferentes do ESP-12 que utilizo. 
Como utilizo um breakboard para conversão da pinagem e embuti um LM1117 para fornecer 3.3v para o componente, deve-se checar a maneira que é feita a alimentação, fazendo um drop-down de 5v para 3.3v ou enviando os 5v direto para o pino certo, pois corre-se o risco de fazer o drop-down de 3.3v para uma tensão menor ainda (eu fiz isso).
Outro aviso é que o processo de compilação é muito mais demorado do que quando utilizamos um Arduino UNO. Seja paciente. -> Descobri que alguns "windows" dão problema ao compilar, mesmo sendo a mesma máquina reformatada. Não encontrei a causa ainda, mas quando dá o problema, a compilação demora mais de 4 minutos enquanto compilando em uma instalação do windows estável demora alguns segundos (20 para mim, quando foi rápido).
Utilizei o Arduino 1.6.7. Recomendam que não se utilize o 1.6.6, pois tem problemas com drivers seriais (eu tive problemas com o CP2102).

CP2102:
  • utilizo uma genérica, bem básica que só precisa ligar o 5v, GND, TX e RX;
  • ao plugar na USB pela primeira vez, o driver é instalado (utilizo o Windows 7 no momento);
  • no Gerenciador de Dispositivos deve ficar como: 



Configurando o Arduino IDE 1.6.7:
  • escolher Arquivo/Preferências;
  • no campo "URLs adicionais de Gerenciadores de Placas" preencher com http://arduino.esp8266.com/stable/package_esp8266com_index.json  e "OK";
  • escolher menu Ferramentas/Placa xxxx/Gerenciador de Placas;
  • procurar o item ESP8266;
  • selecionar a última versão e "Instalar"; aguardar pois foram mais de 150 MB;
  • escolher menu Ferramentas/Placa xxxx/ Generic ESP8266 Module;
  • verificar a velocidade (Upload Speed); a original de fábrica é 115200;
  • verificar também a Porta - deve bater com o mostrado no Gerenciador de Dispositivos, acima;

Esquema eletrônico:
  • Pinagem:
    CP2102ESP8266
    VCC 5v
    (converter para 3.3v !!!)
    CH_PD (EN) + VCC
    GNDGND + GPIO0
    TXORXD
    RXITXD
ESP8266 ESP-12
CP2102
Esquema montado


Fazendo Upload e Executando
  • Utilizei o exemplo Blink do ESP8266 (não é o mesmo do Arduino); 
  • Selecione Arquivo/Exemplos/ESP8266/Blink;
  • Com os componentes conectados, carregar o programa pelo menu Sketch/Carregar;
  • Lembrando novamente que o processo de carga demora muito mais que no Arduino UNO;

Infelizmente este exemplo não utiliza a principal funcionalidade do ESP8266 que é a conexão wifi. Próximo passo!

Mais algumas dicas: tentei trabalhar com o nodemcu LUA, mas foi muito complicado pela bagunça que os programas fizeram na velocidade da serial. jogou a velocidade a 230400 e depois a 74880, velocidade que nem estão na lista da IDE arduino. Retornando à postagem anterior, fiz a tentativa e erro com as velocidades até achar em que se encontrava (9600) e use um comando AT+ para alterar a velocidade para 115200 novamente. Lembrar que o esquema acima não permite comunicação serial com o ESP8266, devendo ser alterado para o esquema do post anterior.

CH340G

Uma observação para erros de carregamento: em um ESP-12F, tive que manter o botão flash apertado durante todo o carregamento que, assim, foi bem sucedido. Este módulo utiliza o adaptador USB-Serial CH340G agregado numa breakboard que contém os botões FLASH e RST embutidos. Deixei uma garra jacaré apertando o botão durante a carga, pois o dedo fica dolorido de tanto apertar esse botão desconfortável. Fica a dica.


Alguma coisa deu errada quando tentei repetir com a versão 1.8.5 do Arduino IDE.

Consegui corrigir, mas vai a receita de bolo, pois pode ser devido a ter utilizado um modelo diferente de CP2102.
Vários posts da Internet dão errado ou exigem vários componentes. Baseei no mais simplificado que foi em um FTDI x ESP-12, apenas invertendo RX e TX no esquema, isto é, liguei TX com TX e RX com RX, do esquema abaixo (clique para ir para a página original)

 Esquema original

Para isso, usei um carregador de celular de 5,5 V derrubando para 3,3 V com um AMS1117, alimentando o GND e o 3.3 do esquema.

Uma curiosidade é que, em muitas vezes, o primeiro upload falhou e o segundo deu certo. Outra é que o circuito funciona sem precisar tirar ou mudar qualquer conexão, neste caso.


CP2102ESP8266
GNDGND + GPIO0 + GPIO15
TXDTXD
RXDRXD


FONTE (pós AMS1117)ESP8266
VCC 3.3vVCC + CH_PD + GPIO02
GNDGND 

No Arduino IDE, a configuração foi:

Arduino 1.6.7


Arduino 1.8.5

Resultado para o exemplo Blink do ESP8266:


Prototipagem