Programação visual para Sonoff Basic

Programação visual para Sonoff Basic
Um artigo sobre como criar um controlador lógico programável a partir de um dispositivo chinês barato. Tal dispositivo terá sua utilização tanto na automação residencial quanto em aulas práticas de informática escolar.
Para referência, por padrão o programa Sonoff Basic funciona com um aplicativo móvel através de um serviço de nuvem chinês, após a modificação proposta, todas as interações posteriores com este dispositivo serão possíveis no navegador.

Seção I. Conectando Sonoff ao serviço MGT24

Passo 1: Crie um painel de controle

Registre-se no site mgt24 (se ainda não estiver registrado) e faça login usando sua conta.
EntrarProgramação visual para Sonoff Basic

Para criar um painel de controle para um novo dispositivo, clique no botão “+”.
Exemplo de criação de um painelProgramação visual para Sonoff Basic

Assim que o painel for criado, ele aparecerá na sua lista de painéis.

Na aba “Setup” do painel criado, encontre os campos “Device ID” e “Authorization Key”, futuramente esta informação será necessária na configuração do dispositivo Sonoff.
Exemplo de guiaProgramação visual para Sonoff Basic

Etapa 2. Atualize o dispositivo

Usando o utilitário XTCOM_UTIL baixe o firmware CLP Sonoff Básico ao dispositivo, para isso você precisará de um conversor USB-TTL. Aqui instrução и instrução de vídeo.

Etapa 3. Configuração do dispositivo

Ligue o dispositivo, depois que o LED acender, pressione o botão e mantenha-o pressionado até que o LED comece a piscar periodicamente de maneira uniforme.
Neste momento aparecerá uma nova rede wi-fi chamada “PLC Sonoff Basic”, conecte seu computador a esta rede.
Explicação da indicação LED

Indicação de LED
Status do dispositivo

piscamento duplo periódico
sem conexão com roteador

brilha continuamente
conexão estabelecida com o roteador

piscando uniforme periódico
modo de ponto de acesso wi-fi

extinto
Sem fonte de alimentação

Abra um navegador de Internet e digite o texto “192.168.4.1” na barra de endereço, vá para a página de configurações de rede do dispositivo.

Preencha os campos da seguinte forma:

  • “Nome da rede” e “Senha” (para vincular o dispositivo ao roteador wi-fi doméstico).
  • “ID do dispositivo” e “Chave de autorização” (para autorizar o dispositivo no serviço MGT24).

Exemplo de configuração de parâmetros de rede do dispositivoProgramação visual para Sonoff Basic

Salve as configurações e reinicie o dispositivo.
é instrução de vídeo.

Passo 4. Conectando sensores (opcional)

O firmware atual suporta até quatro sensores de temperatura ds18b20. Aqui instrução de vídeo para instalação de sensores. Aparentemente, esta etapa será a mais difícil, pois exigirá braços esticados e um ferro de soldar.

Seção II. Programação visual

Etapa 1: criar scripts

Usado como ambiente de programação Em bloco, o ambiente é fácil de aprender, então você não precisa ser um programador para criar scripts simples.

Adicionei blocos especializados para escrever e ler parâmetros do dispositivo. Qualquer parâmetro é acessado por nome. Para parâmetros de dispositivos remotos, são usados ​​nomes compostos: “parâmetro@dispositivo”.
Lista suspensa de opçõesProgramação visual para Sonoff Basic

Cenário de exemplo para ligar e desligar cíclico da carga (1Hz):
Programação visual para Sonoff Basic

Um exemplo de script que sincroniza a operação de dois dispositivos separados. Ou seja, o relé do dispositivo alvo repete a operação do relé do dispositivo remoto.
Programação visual para Sonoff Basic

Cenário para termostato (sem histerese):
Programação visual para Sonoff Basic

Para criar scripts mais complexos, você pode usar variáveis, loops, funções (com argumentos) e outras construções. Não vou descrever tudo isso em detalhes aqui; já existe bastante coisa na rede. material educativo sobre Blockly.

Etapa 2: Ordem dos Scripts

O script é executado continuamente e, assim que chega ao fim, ele é reiniciado. Neste caso, existem dois blocos que podem pausar temporariamente o script, “atrasar” e “pausar”.
O bloco "delay" é usado para atrasos de milissegundos ou microssegundos. Este bloco mantém rigorosamente o intervalo de tempo, bloqueando o funcionamento de todo o dispositivo.
O bloco “pause” é usado para segundos (ou menos) atrasos e não bloqueia a execução de outros processos no dispositivo.
Se o próprio script contém um loop infinito, cujo corpo não contém “pausa”, o intérprete inicia independentemente uma pequena pausa.
Se a pilha de memória alocada estiver esgotada, o interpretador irá parar de executar um script que consome muita energia (tenha cuidado com funções recursivas).

Etapa 3: depuração de scripts

Para depurar um script que já foi carregado no dispositivo, você pode executar um rastreamento do programa passo a passo. Isso pode ser extremamente útil quando o comportamento do script for diferente do pretendido pelo autor. Nesse caso, o rastreamento permite ao autor encontrar rapidamente a origem do problema e corrigir o erro no script.

Cenário para cálculo fatorial no modo de depuração:
Programação visual para Sonoff Basic

A ferramenta de depuração é muito simples e consiste em três botões principais: “iniciar”, “um passo à frente” e “parar” (não esqueçamos também do modo de depuração “entrar” e “sair”). Além do rastreamento passo a passo, você pode definir um ponto de interrupção em qualquer bloco (clicando no bloco).
Para exibir os valores atuais dos parâmetros (sensores, relés) no monitor, utilize o bloco “print”.
é vídeo de visão geral sobre como usar o depurador.

Seção para curiosos. O que há sob o capô?

Para que os scripts funcionassem no dispositivo alvo, foram desenvolvidos um interpretador de bytecode e um assembler com 38 instruções. O código-fonte do Blockly possui um gerador de código especializado integrado que converte blocos visuais em instruções de montagem. Posteriormente, este programa assembler é convertido em bytecode e transferido para o dispositivo para execução.
A arquitetura desta máquina virtual é bastante simples e não faz sentido descrevê-la, na Internet você encontrará muitos artigos sobre como projetar as máquinas virtuais mais simples.
Normalmente aloco 1000 bytes para a pilha da minha máquina virtual, o que é suficiente para sobrar. É claro que recursões profundas podem esgotar qualquer pilha, mas é improvável que tenham qualquer utilidade prática.

O bytecode resultante é bastante compacto. Por exemplo, o bytecode para calcular o mesmo fatorial é de apenas 49 bytes. Esta é a sua forma visual:
Programação visual para Sonoff Basic

E este é o seu programa assembler:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Se a forma de representação assembly não tem nenhum valor prático, então a aba “javascrit”, ao contrário, dá uma aparência mais familiar do que os blocos visuais:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Em relação ao desempenho. Quando executei o script mais simples do flasher, obtive uma onda quadrada de 47 kHz na tela do osciloscópio (a uma velocidade de clock do processador de 80 MHz).
Programação visual para Sonoff BasicProgramação visual para Sonoff Basic
Acho que é um bom resultado, pelo menos essa velocidade é quase dez vezes mais rápida que Lua и espruino.

Parte final

Resumindo, direi que o uso de scripts nos permite não apenas programar a lógica de funcionamento de um dispositivo separado, mas também permite conectar vários dispositivos em um único mecanismo, onde alguns dispositivos influenciam o comportamento de outros.
Observo também que o método escolhido de armazenamento de scripts (diretamente nos próprios dispositivos, e não no servidor) simplifica a troca de dispositivos já em funcionamento para outro servidor, por exemplo, para um Raspberry doméstico, aqui instrução.

Só isso, ficarei feliz em ouvir conselhos e críticas construtivas.

Fonte: habr.com

Adicionar um comentário