Translate

terça-feira, 11 de agosto de 2026

Módulo auxiliar para USB-Serial programando automaticamente o ESP 32/8266

 

    Este artigo visa montar e descrever um módulo que muda automaticamente para modo de programação/bootloader nos ESP 32 e 8266 no Arduino IDE.

Parte do esquema em ESP32-Core-Board-V2


Pinagem S8050

    Testado com um CP2102 e um FTDI ft232rl, funcionou perfeitamente. Já o CH340e, como tem poucos pinos, não tem o DTR exposto. O módulo depende do serial possuir as 2 portas, DTR e RTS expostas. Somente com uma delas não funciona.

Errado: DTR-> io0, RTS->EN


quarta-feira, 29 de julho de 2026

WT32-ETH01 Program Mode

    Para programar o WT32-ETH01, um Esp32 Wroom com Ethernet embutida, conectar um USB-Serial com TX-RX invertidos, alimentação (3.3 ou 5V), jumpear GND e GPIo00, e energizar (deixar o GND da alimentação para ligar por último). Assim, ele entrará em modo de programação. Jumpear também o EN(able) e outro GND e energizar. 

    Assim que aparecer um connecting no Arduino IDE, ou um pouco antes, tirar o jumper do EN.

    Aparentemente no Thonny, não há a necessidade do jumper em EN.




  ssd1306:
    -SDA - I04
    -SCL - I02
    - GND
    - VCC - 3.3V

  programador serial CP2102:
    - desconectar os fios SCA e SCL do oled
    - 5v - 5v
    - tx -tx
    - rx- rx
    - gnd - gnd
    - modo programação :  I00 - gnd
    - reset : EN - gnd - retirar ao ver a msg connecting
    - velocidade: 921600

programador serial FTDI FT232RL:
    - desconectar os fios SCA e SCL do oled
    - 5v - 5v
    - tx - rx
    - rx - tx
    - gnd - gnd - verificar um gnd de verdade no serial
    - modo programação :  I00 - gnd
    - reset : EN - gnd - retirar ao ver a msg connecting
    - velocidade: 921600    

programador serial CH340 HW-728:
    - desconectar os fios SCA e SCL do oled
    - 5v - 5v
    - tx - rx
    - rx - tx
    - gnd - gnd - verificar um gnd de verdade no serial
    - modo programação :  I00 - gnd
    - reset : EN - gnd - retirar ao ver a msg connecting
    - velocidade: 256000 !!!!!    

terça-feira, 27 de maio de 2025

Shebang Line (Linha Shebang, Shabang, Sharp-bang)

        Nos Unix-like (Linux, macOS, etc) você pode definir seu programa executável ao chamar do shell, sem ter que invocar um interpretador (python, shell, etc), nos arquivos texto, como python .py.

        Na primeira linha do arquivo texto, inicie com #! para esta definição, seguido de espaço e do caminho (se não estiver no PATH) e nome do programa executor, como por exemplo:

#! python3 --argumentos

        Como pode haver problemas quanto ao ambiente, a recomendação, caso não funcione, é adicionar o /usr/bin/env logo após o #!.

#!/usr/bin/env python3 --argumentos

        Feito isso, e utilizando um chmod +X arq.py é possível chamar o arquivo diretamente na linha de comando:

$ arq.py



sexta-feira, 9 de dezembro de 2022

ESP01S Relay V4 utilizando o Tasmota e Echo / Alexa

 Montando um interruptor compatível com Alexa.

Utilizado o módulo Relé para ESP01 v4.0 do AliExpress

em conjunto com ESP01S

Necessário um programador para o ESP01/S

Para flash do Tasmota:
Sugiro jumpear o ESP01 e colocar um botão momentâneo e uma chave no programador:



O Jumpeamento no ESP01 permite que ele fique em modo de funcionamento. Pode deixar o jumper permanente que não há problema algum. No programador, o botão é de reset, ficando entre o GND e o RST e o switch força o modo de programação, ficando entre o GND e o GPIO0. Caso esteja desligado, esse switch deixa em modo de execução. Pode ser visto melhor nesta outra foto:

Note que já deixo pronto todos os meus ESP01/S e programadores. Alguns ESP01/S conseguem ser programados sem o switch, utilizando o modo Tasmotizer. Como não é nosso foco, deixo somente dicas e citações - https://github.com/tasmota/tasmotizer

Para instalação online do tasmota:
https://tasmota.github.io/install/

Caso esteja tudo em ordem - tudo ligado, porta serial identificada, modo de programação - basta selecionar - atualização: em 01/05/24 não existe mais o botão para escolha do microcontrolador abaixo (esp8266) - deve servir para qualquer microcontrolador da espressif




 e [Connect].

Escolha a serial do programador


 e [Conectar]

Para não encher muito de figuras, citarei somente o que deve ser escolhido
  • clicar em INSTALL TASMOTA BR
  • marcar ERASE e clicar em NEXT
  • clicar em INSTALL
O processo vai demorar um pouco, mas aparecerá um arco de progresso da instalação.

Ao final clicar em NEXT e fechar no X

Deixe o programador em modo de execução e resete-o.

Novamente escolha a serial do programador:

e [Conectar].

Clique em CHANGE WI-FI

Em seguida escolha a sua rede Wi-fi na caixa Network, digite a senha do Wi-fi e [Connect]

Clique agora em VISIT DEVICE.

Vai ser aberta uma nova aba no navegador com a configuração do dispositivo.

Clique em CONFIGURAÇÃO, CONFIGURAR OUTRA OPÇÕES

Copie e cole em MODELO:

{"NAME":"ESP01v4","GPIO":[256,320,0,32,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}

Altere o NOME AMIGÁVEL para um nome que queira utilizar no Alexa.

Marque o Belkin Wemo em EMULAÇÃO e clique em SALVAR.

Altere em CONFIGURAÇÃO, CONFIGURAR MÓDULO, para ESP01v4  e salve.

Caso esteja tudo certo, bastará encaixar o ESP01 de volta ao módulo relé, fazer as ligações elétricas/eletrônicas e pedir para a Alexa pesquisar dispositivos. 

Caso queira colocar um botão físico para des/ligar, coloque um botão momentâneo entre GND e RX.



Referências:
https://templates.blakadder.com/ESP-01S-Relay-v4.html

quinta-feira, 17 de fevereiro de 2022

Destacar / formatar código fonte no Blogger

1. Clicar em Tema na Coluna esquerda e na seta do botão PERSONALIZAR:




2. Escolher a opção Editar HTML:


3. Procurar pela Tag </head> e inserir a linha abaixo DEPOIS da tag encontrada:

<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.4.0/styles/default.min.css" rel="stylesheet">


4. Procurar pela Tag </body> e inserir as linhas abaixo ANTES da tag encontrada:

<script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.4.0/highlight.min.js'/>>
<script>hljs.highlightAll();</script>


5. Utilizar as tags abaixo ao redor do código fonte para realce:

<pre><code class="language-c++">
..........................
</code></pre>

quarta-feira, 16 de fevereiro de 2022

ESP-01 acionando módulo relé com Echo Dot - Alexa


Utilizando neste projeto: Arduino IDE 1.8.19, Board Esp8266 3.0.2, Library FauxmoESP 3.4.0

O LED é obrigatório nesse caso, devido ao módulo rele low level trigger. Outros módulo, tipo high level, podem exigir a remoção deste.

Foi utilizado o Pull-up interno do esp8266. Caso utilize o físico, recomenda-se um resistor de 3k3 entre vcc e gpio00.

Testei com inversão das GPIO 00 e 02 e tudo certo. Não há efeito colateral na inversão.

Em síntese, o rele inicia-se em estado off, podendo ser utilizada a Alexa, após "PESQUISAR DISPOSITIVOS" executado com sucesso, e o switch, para ligar e desligar o aparelho ligado ao rele.

O adaptador que usei na protoboard está semelhante à do post link, mas sem o botão e o switch.

ATENÇÃO: alimentar o circuito com 3.3v (até o rele de 5v funcionou perfeitamente). 

Obs.: Alexa falhou no video na primeira vez. Shit happens.... 

SUGESTÃO: Deixe um botão de reset acionável esternamente (GND e RST) para um reset fácil nas panes.









credentials.h

#define WIFI_SSID "YOUR_SSID"
#define WIFI_PASS "YOUR_PASSWORD"





program.ino code

#include 
#ifdef ESP32
    #include 
#else
    #include 
#endif
#include "fauxmoESP.h"
#include "credentials.h"

fauxmoESP fauxmo;

// -----------------------------------------------------------------------------

#define SERIAL_BAUDRATE     115200

#define RELE           2
#define BUTTON         0

#define ID_RELE        "Office Light"

const IPAddress remote_ip(192, 168, 15, 2);

boolean estado;
int buttonState;

// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------

void wifiSetup() {

    #ifdef DEBUG_ESP_PORT
    // Set WIFI module to STA mode
    WiFi.mode(WIFI_STA);
    // Connect
    Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
    #endif
    WiFi.begin(WIFI_SSID, WIFI_PASS);

    #ifdef DEBUG_ESP_PORT
    // Wait
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(100);
    }
    Serial.println();

    // Connected!
    Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
    #endif

}

void hold(const unsigned int &ms) {
  // Non blocking delay
  unsigned long m = millis();
  while (millis() - m < ms) {
    yield();
  }
}

void setup() {

    #ifdef DEBUG_ESP_PORT
    // Init serial port and clean garbage
    Serial.begin(SERIAL_BAUDRATE);
    Serial.println();
    Serial.println();
    #endif

    // LEDs
    pinMode(RELE, OUTPUT);
    pinMode(BUTTON, INPUT_PULLUP);
    digitalWrite(RELE, HIGH); 
    #ifdef DEBUG_ESP_PORT
    pinMode(LED_BUILTIN, OUTPUT);
    #endif

    // Wifi
    wifiSetup();

    fauxmo.createServer(true);
    fauxmo.setPort(80); // This is required for gen3 devices
    fauxmo.enable(true);
    fauxmo.addDevice(ID_RELE);
    fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
        #ifdef DEBUG_ESP_PORT
        Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value);
        #endif
        if (strcmp(device_name, ID_RELE)==0) {
            digitalWrite(RELE, !state ? HIGH : LOW);
            estado = !state;
        }
    });
    digitalWrite(RELE, HIGH); 
    estado = true;

}


void loop() {
    fauxmo.handle();

    buttonState = digitalRead(BUTTON);
  
    if (buttonState == LOW) {
      estado = !estado;
      digitalWrite(RELE, estado ? HIGH : LOW);
      #ifdef DEBUG_ESP_PORT
      digitalWrite(LED_BUILTIN, estado ? HIGH : LOW);
      #endif
      
      hold(700);
    }

    static unsigned long last = millis();
    if (millis() - last > 10000) {
        #ifdef DEBUG_ESP_PORT
        Serial.printf("[MAIN] Free heap: %d bytes\n", ESP.getFreeHeap());
        #endif
        last = millis();
    }
}
  
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------

Lembrete pessoal: para utilizar este circuito com o Tasmota, utilizar a configuração na opção módulo:
ou com a opção personalizada em "Other":
{"NAME":"ESP01v4","GPIO":[32,0,256,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}





Configuração Arduino IDE para Esp-01S respondendo ao Echo Dot/Alexa

 Seguem abaixo as últimas configurações para funcionamento de registro e chamado do Echo Dot v2 e Alexa para o Esp-01s.

Arduino IDE 1.8.19, Board Esp8266 3.0.2, Library FauxmoESP 3.4.0



segunda-feira, 14 de fevereiro de 2022

Adaptador Ep01 para Protoboard

 


Adaptador simples e esquema para facilitar o manuseamento do Esp01 em protoboards. Meus programadores do Esp01 já tem o botão de Reset e o switch de modo de programação embutidos, mas constam no diagrama, até para facilitar referências. Recomendo alterar a largura para 4 pinos, para liberar mais espaço na Protoboard.







terça-feira, 1 de junho de 2021

Mosquitto MQTT instalado no Raspberry Pi Zero W


Passo a passo para instalação do MQTT Broker Mosquitto no Raspberry Pi Zero W com Raspberry Pi OS Lite (32 bits).

É necessário também um cartão Micro SD de 4 GB ou mais.

Inserir o cartão em um adaptador e conectá-lo à entrada USB do PC.

Baixar o Imager do RPi no endereço https://www.raspberrypi.org/software/, instalar e executar. No Operating System, escolher Raspberry Pi OS (other) e Raspberry Pi OS Lite (32-bit). Em Storage, selecionar o Cartão SD e executar com WRITE. Confirmar a operação e aguardar a gravação do SO.

Tirar e colocar o adaptador na porta USB, para que o Windows o reconheça.

Abra o bloco de notas e digite o código abaixo, substituindo os dados em network pelo SSID e senha do seu Wi-Fi:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=BR
network={
    ssid="Wi-Fi_SSID"
    psk="Wi-Fi_senha"
}

Grave o arquivo como wpa_supplicant.conf no disco com nome boot (no cartão SD) e dê o comando "copy nul ssh" (isso deve criar um arquivo vazio com o nome de ssh)


Ejete o cartão SD no Windows e passe o cartão para o RPi.

É necessário descobrir o endereço IP do RPi. Você pode utilizar o Advanced IP Scanner disponível em https://www.advanced-ip-scanner.com/. O Mac Address dosRPis sempre se inicia por B8:27:EB, caso procure no seu roteador WiFi. No advanced IP Scanner é mais fácil de localizar:


No programa Putty, podemos acessar remotamente pelo SSH, o RPi:


O terminal pedirá usuário / senha que deverão ser pi / raspberry



Em seguida, dar os comandos:

sudo apt-get update
sudo apt-get upgrade

(Tive problemas no comando upgrade - mais especificamente no download do raspberrypi-kernel, que congelava perto dos 50% - rodei um sudo rpi-update e corrigiu)

Instalar o tmux - para multiplexar os consoles:

sudo apt-get install tmux

e o Mosquitto:

sudo apt-get install mosquittoy

e os Moquito clients:

sudo apt-get install mosquitto-clients

Inciar o tmux: tmux

Criar uma sessão tmux: Ctrl-B C

Trocar para a outra sessão tmux: Ctrl-B L

Inicia o servidor Mosquitto: mosquitto -d

Trocar para a outra sessão e mandar um teste para o servidor: 
    mosquitto_pub -d -t relaycontrol -m "Turn on"
Na outra sessão deverá aparecer a mensagem Turn on

Iniciar automaticamente o Mosquitto:

sudo systemctl stop mosquitto
sudo update-rc.d mosquitto remove
sudo rm /etc/init.d/mosquitto
sudo nano /etc/systemd/system/mosquitto.service

quarta-feira, 24 de março de 2021

Teste de link com 2 gateways


Aparelho simples que "ping"a no mesmo endereço, utilizando gateways diferentes e informando Timeout, latência ou latência muito alta. Isso feito no esp8266 mais simples, o esp-01. Útil e simples, mesmo que não utilize a reversão de gateway. O ping é dado 1 vez por segundo, alternando o gateway. No meu caso, o V e o A são iniciais dos provedores.

 

terça-feira, 21 de julho de 2020

Micronucleus no Attiny85 com USBAsp




Me atualizando sobre artigos, desde que parei de trabalhar com os ATTinys, surgiu um bootloader que consegue carregar os programas direto pela USB sem a necessidade de um conversor USB-Serial, o Micronucleus, usado pela placa de desenvolvimento Digispark, por exemplo.

Aqui vou utilizar um ATTiny85 com o mínimo de componentes, pelo menos para carga do bootloader e do programa.

#########################################################################

BOOTLOADER


Utilizei um USBasp para carregar o bootloader primeiramente. Trabalhoso acertar o driver.


Como o driver originário da Microsoft não funcionou diretamente, utilizei o Zadig para substituir o driver. Com o USBasp conectado, em Options, escolhi Load All Devices, pois minha lista veio vazia. Bastou escolher o USBasp da lista de Devices,  libusb-win32 como driver e Install ou Replace Driver. Demora alguns minutos para instalar ou substituir.  - ATENÇÃO: o driver some, não consegue ser instalado, etc. no Windows 10. É problemático mesmo e precisa insistir. Você instala o driver, abandona porque testa e não dá certo e depois de alguns minutos ele funciona no AVRDudess. Persista, porque eu quase desisti.



Para carregar o bootloader, utilizei o AVRDUDESS, utilizando o Programador "USBasp, http://www.fischl.de/usbasp", Port "usb", Baud rate "19200" e Bit clock "1.5 Mhz". Baixando e descompactando o Micronucleus, os firmwares estão na pasta firmware\releases, de acordo com o modelo do microcontrolador. É ele que deve ser indicado na caixa Flash e também ser escolhida a opção Write. Feito isso, é só clicar no botão Go da seção Flash.



Outros acertos são os Fuses:

Acerte o L para 0xE1, H para 0xDD, E para 0xFE e dê um Write (NÃO ERRE OS VALORES, porque pode bricar o ATtiny). Caso não faça essa etapa, não conseguirá carregar o programa depois. ATENÇÃO: Se não conhece, não mexa no fuse LB! Os Fuses são tão delicados que podem afetar o clock do microcontrolador, impedindo qualquer reprogramação - a única solução será HVSP - resetar com alta voltagem - tem um projeto com Arduino Uno aqui.

Caso tenha que testar a comunicação antes, pode utilizar o Botão Detect para tentar identificar automaticamente o microcontrolador.

Uma Dica: não sei porque, mas o driver do USBasp parou de funcionar, após um tempo ligado direto. Reiniciei o PC, deconectei e conectei novamente o USBasp e nada. Só entrando de novo no Zadig e pedindo para reinstalar o driver. Como comentei ali em cima, muitos problemas com muita insistência ou tomara que você tenha muita sorte e solucionem o problema de incompatibilidade com Windows 10.

#########################################################################

PROGRAMA

O teste de fogo é carregar uma versão alterada do Blink montando um circuito - utilizei o Tiny-Bread-Duino do Sr. M Druiven - aqui - depois de muita pesquisa e tentativas frustadas com menos componentes.
Refiz o fritzing - aqui - do Sr. Druiven, por estar com um Led Verde invertido e colocar mais alguns comentários.



Para constar, o diodo do topo é um 1N4148. Os outros dois são Zener 3.6V. Os resistores estão na cor certa, 22R e 1.5Kohms. Leds comuns. No resultador, o led verde permanece como aceso quando o circuito está alimentado e o vermelho pisca.

A barra de conectores é ligada diretamente nos fios do USB, - (GND), D+, D- e + (VCC). NÃO PRECISA DE CONVERSOR USB-SERIAL!!!! 😄

Depois de montado, verificado e conectado (e o bootloader estando Ok), ligamos o cabo USB no computador. Mesma dor de cabeça para instalar o driver que é o mesmo do USBasp. Siga o mesmo processo, mas deve aparecer como um dispositivo desconhecido no Zadig.


Caso tenha avisado que o driver foi instalado com sucesso, podemos tentar continuar com o processo de carga do programa.

Carregando o Arduino IDE temos que configurá-lo para programação do Disgispark: 
  • em Arquivo/Preferências, acrescente "http://digistump.com/package_digistump_index.json" às URLs adicionais...;
  • Em Ferramentas/Placa/Gerenciador de Placas, instale o "Digistump AVR Boards";
  • Em Ferramentas/Placa, escolha "Digispark default - 16.5 Mhz";
  • Caso necessário, em Ferramentas/Programador escolha "Micronucleus".

O programa teste é este (encontrado completo aqui):

int LED_BUILTIN = 1;
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); 
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

Basta dar Carregar (ou Sketch/Carrregar) no programa e o resultado deverá ser esse, depois de algum tempo (minutos?):



Dando tudo certo, o Led verde deve se acender e o vermelho a piscar 1x1 segundo.