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 |
Variedades sobre desenvolvimento, eletrônica e afins. Ou: minha memória de longo prazo.
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 |
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.
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
Montando um interruptor compatível com Alexa.
Utilizado o módulo Relé para ESP01 v4.0 do AliExpress
em conjunto com ESP01S<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.4.0/styles/default.min.css" rel="stylesheet">
<script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.4.0/highlight.min.js'/>>
<script>hljs.highlightAll();</script>
<pre><code class="language-c++">
..........................
</code></pre>
#define WIFI_SSID "YOUR_SSID"
#define WIFI_PASS "YOUR_PASSWORD"
#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}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