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





terça-feira, 8 de dezembro de 2015

Iniciando com testes AT+ do ESP8266 ESP-12 via CP2102


Por vários meses corri atrás da tal IoT, a Internet das Coisas. Resumindo, conectar as "coisas" (interruptores, motores, sensores, etc) à Internet (subentende-se que o interior de nossa casa também faça parte da Internet - por exemplo, nosso computador, celular, smarTV, vídeogame, etc).

Nas andanças atrás de peças eletrônicas baratas no Aliexpress, me deparei com um adaptador de Wi-Fi para o Arduino e que surpresa eu tive ao pesquisar mais sobre o componente e saber que ele poderia ser programado como um Arduino. Uma peça do tamanho da ponta do nosso dedo indicador ser um Arduino com Wi-Fi. Para quem conhece um pouco, é uma miniaturização fantástica. E barata! Existe até uma versão Arduíno com o ESP-12 no lugar do ATMega chamado WeMos.

Isso nos possibilita fazer nosso próprio aparelho com tecnologia embarcada e conectada à Internet (DIY - Do It Yourself), permitindo ser controlado e monitorado pelo nosso celular, por exemplo, em qualquer lugar em que haja conexão à Internet.

Vou explicar aqui o primeiro passo que consegui dar nessa área, utilizando um ESP-12 conectado à um PC, através do monitor serial da IDE Arduino.

O objetivo é fazer a conexão do ESP-12 com o Access Point (roteador) de casa, para uma familiarização inicial com estes módulos. O mais mastigado que posso, pois tive que colher informações de outros módulos para conseguir fazê-lo funcionar.

Apesar de ter usado um Breakout board para o ESP-12, pois o espaçamento da conexão não é do padrão que utilizamos para prototipação de 2 mm, é bem menor, o esquema do projetinho ficou assim:



O Breakout board que usei foi um bem barato encontrado no mercado livre e que já contém alguns resistores e espaço para um regulador de tensão de 3.3v. Usei um LD1086v33 o que deixou meio grosseiro e fui obrigado a acrescentar mais um à protoboard para energizar outros pinos para o funcionamento.

Esp8266 WIFI série módulo porta IO placa de placa de terminais ( apenas adaptador frete grátis(China (Mainland))
O CP2102 é genérico, sem pinos de CTS nem DTR. Ground, VCC (5v), TX e RX já bastam para fazer funcionar. Não utilize o 3.3v, pois nunca tem corrente suficiente para alimentar o ESP8266.
Novo USB 2.0 para TTL UART módulo conversor Serial CP2102 STC 5PIN PRGMR cabo livre SG051-SZ(China (Mainland))
Aliás, quando for utilizar em portas USB de microcomputadores, não utilize cabos longos e/ou finos, e prefira utilizar diretamente (sem cabo) as portas onboard traseiras. Pelo que pesquisei, o ESP8266 precisa de pelo menos 500mA de corrente.

Reforçando, o ESP8266 só trabalha com tensão 3.3v. Deve ser utilizado um LD1086v33 ou LM1117 para que não force e queime o componente.

O circuito correto, segundo o site esp8266/Arduino é com o esquema abaixo. Acabei por não utilizando os resistores nem o capacitor, mas funcionou para os testes de conexão com AP.


Abaixo fotos da montagem.

Utilizei o próprio IDE Arduíno 1.6.5, para fazer os testes. O monitor serial é simples e deu certo sem muitos entraves. 

Conforme orientações pesquisadas, deve ser utilizada essa versão ou mais recente, mas a 1.6.6 tem alguns problemas de projeto, por isso não recomendam utilizá-la. 

Após conectar o CP2102 na porta USB e ser detectado, escolha a COM correta em Ferramentas/Porta. Escolha Ferramentas/Monitor Serial. 

Na janela, escolha na caixa à direita, "115200 velocidade" e na caixa ao lado, "Ambos, NL e CR".

Agora podem ser dados os comando AT+ das tabelas Nurdspace, Pridopia,Sparkfun

Observem que o erro foi por ter digitado o comando em minúsculas, isto é, não podem ser.

Caso a placa responda com caracteres estranhos, provavelmente a velocidade está errada.

Mais orientações podem ser conseguidas nos endereços:
Provavelmente o próximo post deva ser sobre upload de firmware, especificamente o NodeMCU para programação via IDE Arduino.





quarta-feira, 14 de outubro de 2015

Sugar ORM no Android Studio 1.4 com erro android.database.sqlite.SQLiteException: no such table

Foi difícil de achar solução para o problema, restando apenas a tentativa e erro para corrigí-lo.

Muito provável que a troca de versão do Android Studio de 1.3 para 1.4 tenha ocasionado o erro, então segue a solução que encontrei.

No build.gradle (Module app), acrescentar, na seção dependencies a linha

compile 'com.github.satyan:sugar:1.4'
ao invés da sugestão do site


compile 'com.github.satyan:sugar:1.3'
ou

compile 'com.github.satyan:sugar:1.3.1'
No AndroidManifest.xml incluir a expressão


android:name="com.orm.SugarApp"

Na seção <application /> e


<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="2" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" />
entre as seções <application /> e <activity />, lembrando de alterar o DATABASE para o nome do arquivo e DOMAIN PACKAGE NAME para o domínio utilizado (o mesmo que está no item package da seção <manifest />; de preferência alterar o QUERY LOG para false.

Para teste, podemos inserir a classe e exemplo oferecidos no site do ORM:


public class Book extends SugarRecord<Book> {  String title;  String edition;
  public Book(){  }
  public Book(String title, String edition){    this.title = title;    this.edition = edition;  }}
mas com uma modificação, que deve ter sido adotada no versão 1.4 (a versão utilizada no site deve ter sido a 1.3): retire o parâmetro <Book> da primeira linha:


public class Book extends SugarRecord {

Insira um botão na content_main.xml ou no layout criado e insira na propriedade onclick o texto clique.

Na activity correspondente, crie o método clique:


public void clique(View v) {
    Book book = new Book("Title here", "2nd edition");
    book.save();
}
E teste no emulador (sugiro o Genymotion).

Testei e refiz várias vezes para conferir a causa do problema. 
Aparentemente a causa principal era a versão mesmo.