Programação Visual para Sonoff Basic

imagem

Um artigo sobre como criar um controlador lógico programável a partir de um dispositivo chinês barato. Esse dispositivo encontrará sua aplicação tanto na automação residencial quanto como uma lição prática em ciência da computação nas escolas.

Para referência, por padrão, o programa Sonoff Basic funciona com o aplicativo móvel através do serviço de nuvem chinês. Após a alteração proposta, todas as outras interações com esse dispositivo serão possíveis no navegador.

Seção I. Conectando Sonoff ao MGT24


Etapa 1. Crie um painel de controle


Registre-se no site mgt24 (se você ainda não se cadastrou) e faça login com sua conta.

Entrar
imagem

Para criar um painel de controle para um novo dispositivo, clique no botão "+".

Exemplo de criação de painel
imagem

Após a criação do painel, ele aparecerá na lista de seus painéis.

Na guia “Setup” do painel criado, localize os campos “Device ID” e “Authorization Key”. No futuro, essas informações serão necessárias ao configurar o dispositivo Sonoff.

Exemplo de guia
imagem

Etapa 2. Piscando o dispositivo


Usando o utilitário XTCOM_UTIL, faça o download do firmware do Sonoff Basic PLC para o dispositivo. Para isso, é necessário um conversor USB-TTL. Aqui estão as instruções e instruções em vídeo .

Etapa 3. Configure o dispositivo


Aplique energia ao dispositivo, depois que o LED acender, pressione o botão e mantenha-o pressionado até que o LED comece a piscar periodicamente uniformemente.

Neste ponto, uma nova rede wi-fi chamada “PLC Sonoff Basic” aparecerá, conecte seu computador a esta rede.

Decodificação LED indicação
Indicação LEDStatus do dispositivo
piscamento duplo periódicosem conexão com o roteador
brilha continuamenteconexão estabelecida com o roteador
uniforme periódico intermitentemodo de ponto de acesso wifi
colocar para forasem poder


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

Preencha os campos da seguinte maneira:

  • “Nome da rede” e “Senha” (para vincular o dispositivo ao seu roteador wi-fi doméstico).
  • “Device ID” e “Authorization Key” (para autorizar o dispositivo no serviço MGT24).

Exemplo de configuração de parâmetros de rede do dispositivo
imagem

Salve as configurações e reinicie o dispositivo.

Aqui está um tutorial em vídeo .

Etapa 4. Conectando sensores (opcional)


O firmware atual suporta até quatro sensores de temperatura ds18b20. Aqui está um tutorial em vídeo sobre montagem de sensores. Aparentemente, este passo será o mais difícil, pois exigirá mãos diretas e um ferro de soldar.

Seção II Programação visual


Etapa 1. Script


Blockly é usado como ambiente de programação, o ambiente é fácil de aprender, portanto você não precisa ser um programador para criar scripts simples.

Adicionei blocos especializados para escrever e ler parâmetros do dispositivo. O acesso a qualquer parâmetro é realizado pelo nome. Os nomes dos compostos são usados ​​para os parâmetros do dispositivo remoto: "parameter @ device".

Lista suspensa de opções
imagem

Um exemplo de cenário de ativação e desativação cíclica da carga (1Hz):

imagem

Um cenário de exemplo que sincroniza a operação de dois dispositivos separados. Ou seja, o relé do dispositivo de destino repete a operação do relé do dispositivo remoto.

imagem

Cenário para termostato (sem histerese):

imagem

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, a rede já possui bastante material de treinamento sobre Blockly .

Etapa 2. Ordem de Script


O script é executado continuamente e, assim que chega ao fim, começa novamente. Existem dois blocos que podem suspender temporariamente o script, "atraso" e "pausa".

O bloco de atraso é usado para atrasos de milissegundos ou microssegundos. Esta unidade mantém rigorosamente o intervalo de tempo, bloqueando a operação de todo o dispositivo.

O bloco de pausa é usado para segundos (talvez menos) atrasos e não impede a execução de outros processos no dispositivo.

Se o script em si contiver um loop infinito, no corpo do qual não há "pausa", o intérprete inicia independentemente uma pequena pausa.

Se a pilha de memória alocada estiver esgotada, o intérprete interromperá a execução de um script tão voraz (tenha cuidado com as funções recursivas).

Etapa 3. Depurando scripts


Para depurar um script já carregado no dispositivo, você pode executar o rastreamento do programa em etapas. Isso pode ser extremamente útil quando o comportamento do script não é o que o autor pretendia. Nesse caso, o rastreamento permite que o autor encontre rapidamente a origem do problema e corrija o erro no script.

O script para calcular o fatorial no modo de depuração:

imagem

A ferramenta de depuração é muito simples e consiste em três botões principais: “iniciar”, “um passo à frente” e “parar” (também não esqueceremos “entrar” e “sair” do modo de depuração). 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, use o bloco de impressão.
Aqui está um vídeo de visão geral sobre o uso do depurador.

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


Para que os scripts funcionassem no dispositivo de destino, um interpretador de bytecode e um assembler para 38 instruções foram desenvolvidos. Um gerador de código especializado foi incorporado ao código-fonte em bloco que converte blocos visuais em instruções do assembler. No futuro, esse 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 muito sentido descrevê-la; na rede, você encontrará muitos artigos sobre o design de máquinas virtuais simples.

Para a pilha da minha máquina virtual, geralmente aloco 1000 bytes, isso é suficiente com uma margem. Obviamente, recursões profundas podem esgotar qualquer pilha, mas é improvável que encontrem aplicação prática.

O bytecode resultante é bastante compacto. Como exemplo, o bytecode para calcular o mesmo fatorial é de apenas 49 bytes. Esta é a sua apresentação visual:

imagem

E este é o seu programa de montagem:

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 do assembler não tiver nenhum valor prático, a guia javascrit, pelo contrário, dará 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)); 

Quanto ao desempenho. Quando iniciei o cenário mais simples do pisca-pisca, na tela do osciloscópio, recebi um meandro de 47kHz (a uma velocidade de clock de 80MHz).

imagem

imagem

Acho que esse é um bom resultado, pelo menos essa velocidade é quase dez vezes mais rápida que a de Lua e Espruino .

A parte final


Para resumir, direi que o uso de scripts nos permite não apenas programar a lógica de um dispositivo individual, mas também possibilita vincular vários dispositivos em um único mecanismo, onde alguns dispositivos influenciam o comportamento de outros.

Também observo que o método escolhido para armazenar scripts (diretamente nos próprios dispositivos e não no servidor) simplifica a troca de dispositivos existentes para outro servidor, por exemplo, para o Raspberry doméstico, aqui está a instrução .

É tudo, ficarei feliz em ouvir conselhos e críticas construtivas.

Source: https://habr.com/ru/post/pt436272/


All Articles