Translate

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