
Pontos principais ou sobre o que é este artigo
Como os interesses das pessoas são diferentes, e as pessoas têm pouco tempo, então brevemente sobre o conteúdo do artigo.
Este artigo é uma visão geral do projeto do controlador com um preço mínimo e a possibilidade de programação visual através de um navegador WEB.
Como este é um artigo de revisão que visa mostrar "o que você pode extrair de um controlador centavo", não deve procurar verdades profundas e algoritmos detalhados nele.
A motivação, idéias e resultados da construção de um controlador baseado no chip Wi-Fi ESP8266 são considerados.
Advertência
Eu não queria escrever este artigo. Não sou fã de escrever artigos. É necessário pensar e além disso - muito. Pensar em escrever para minimizar o número de mal-entendidos. Pensar em como não ir ao extremo. E muito mais para pensar.
Mas os amigos disseram que, como meus esforços no campo da IoT e outras pequenas automações são interessantes para eles, eles podem ser interessantes para outras pessoas para o público em geral. Bem, para onde vai o público que está interessado nisso? Claro, em um habr. E aqui estou eu. Leitor antigo e novo escritor.
Por erros, imprecisões, erros de digitação, estilo não moderno de apresentação etc. que o leitor possa não gostar, não tenho nenhuma responsabilidade. Leia por sua conta e risco.
Também aviso imediatamente que não explicarei quais multicast MQTT, WiFi e UDP e outras coisas que não estão diretamente relacionadas ao tópico. Alguns links estão no final do artigo.
O nascimento de uma ideia ou de algumas letras
Bem, a vida não é uma coisa simples, e Sua Majestade Chance desempenha um papel importante nela. Então, quero compartilhar como eventos aleatórios, multiplicados por preguiça regular, resultaram em um design de controlador bastante interessante, baseado no ESP8266.
Tudo começou de maneira casual: eu queria construir um sistema de controle para o sistema de abastecimento de água e regar os canteiros do país.
Mas , como eu posso me envolver totalmente em guindastes de tubos-tanque apenas nas férias, antes dos quais houve mais de seis meses - tudo se limitava à discussão no trabalho com colegas e amigos-camaradas em um ambiente informal.
O tópico "pequena automação" ou, como é habitual dizer "esses alunos da escola-hacker-hacker" - o tópico da IoT - a Internet das coisas - tem sido interessante para mim há muito tempo. Muito antes do advento da Internet, como tal, em uso generalizado.
Mesmo na infância, eu queria que as coisas fizessem algo "elas mesmas". E é desejável que eu possa controlá-los de alguma maneira à distância. Mas naquela época (anos 80, início dos anos 90 do último milênio) isso era difícil. A Internet não estava amplamente disponível em nenhum lugar do mundo, pois não havia lugar algum, telefones celulares, tablets e até telas de LCD e unidades flash USB. Então eu tive que me limitar a "interruptores de luz no aplauso" e aos mais simples controles remotos por rádio. Mas para aqueles tempos e essa idade, era agradável e interessante.
Mas este é o passado. Nonche no pátio do século XXI. E todo mundo tem um smartphone no bolso, a Internet está quase em toda parte, onde é necessário e não necessário, e o banco de dados de componentes eletrônicos disponíveis agora é tal que há 15 anos o habitante comum do planeta Terra nem sequer sonhava com isso.
Portanto, tendo decidido moldar um controlador para assuntos de água no país, voltei meus olhos para o chip ESP8266.
Primeiro, esse chip é barato. E se um controlador não for suficiente - você pode colocar dois, três ou cinco. Em segundo lugar, possui Wi-Fi a bordo. Ou seja, você pode assistir o que acontece via Internet e até controlar o processo a partir de qualquer smartphone. Obviamente, você precisa de um ponto de acesso com acesso à Internet, mas isso não é um problema. Enfim, está quase em todo lugar, ou está prestes a estar, inclusive - e na minha casa de campo.
Tendo mergulhado no maravilhoso mundo dos projetos para o ESP8266, fiquei surpreso ao descobrir que, apesar das impressionantes capacidades deste chip, os projetos nele, com raras exceções, são divididos em dois tipos: programas extremamente primitivos como “clique nos rolos de um smartphone e veja o estado” sensor de temperatura via Internet ”; ou intérpretes bons e sólidos de JavaScript ou Lua, mas, infelizmente, consomem quase toda a memória e não permitem que você faça algo sério.
Minha primeira ideia foi tão simples quanto uma panqueca - escrever um programa simples de controle de bomba com base no estado dos sensores e isso é tudo. Mas, como um kalach ralado em termos de introdução de sistemas diferentes, percebi que não seria capaz de prever todas as curvas do algoritmo que gostaria ou precisaria endireitar durante a construção do sistema de irrigação de abastecimento de água.
D elaborar o programa no país, em um celeiro escuro - não é muito conveniente. E você precisa.
Qual é a saída? Obviamente, a primeira coisa que me veio à mente foi tornar o algoritmo personalizável. Um dos meus colegas deu muitos conselhos - o que configurar e como. Com isso, ele cortou minha primeira ideia pela raiz. Graças a ele. Se ele não tivesse implantado diante de meus olhos o número de parâmetros que eu precisaria configurar, provavelmente não recusaria esta opção: crie uma página de configurações de algoritmos.
Mas uma imagem aterradora do número de parâmetros de sintonia e até de influenciar uns aos outros me deixou sóbria. Mais uma vez, percebi que nada poderia ser previsto ...
Farei uma reserva imediatamente: sou preguiçoso. Muito preguiçoso! Estou francamente com preguiça de reescrever o programa todas as vezes. Portanto, surgiu a tarefa - como definir rápida e facilmente um algoritmo, de preferência sem programação? Além disso, esse algoritmo será bastante complicado; terá muitos parâmetros; Será individual para o meu caso e inadequado para outros. E eu realmente quero tornar o dispositivo mais ou menos universal ...
Como ainda faltavam seis meses para as férias e todo o trabalho de canos, decidi dedicar um tempo para pensar: como torná-lo conveniente e bonito? Como programar sem programação? Como ficar sem um trilhão de parâmetros que podem ser alterados durante a configuração?
Como sempre, tudo já foi pensado diante de nós: percebi que desejo desenhar um algoritmo na forma de quadrados de ação e conectá-los a linhas de comunicação que mostram de onde e de onde os dados estão vindo. Bem, cutucando a caixa, quero poder configurar alguns de seus parâmetros individuais.
E o ato de definir o algoritmo, desenhá-lo com quadrados, não é novo. Tais sistemas estavam de volta nos anos 80; existe um sistema NodeRed super popular que é bem conhecido daqueles que já aderiram ao mundo da pequena automação / IoT.
Mas isso é azar: esses sistemas são projetados para "PCs grandes". Na pior das hipóteses, no PI de framboesa. Mas de maneira alguma no ESP8266, que possui apenas algumas dezenas de kilobytes de RAM e não existe sistema operacional!
Como ser E existem apenas duas maneiras: gravar um programa em um "PC grande" ou laptop e transferi-lo de alguma forma para o ESP8266 ou tentar "amontoar o indesejável" no próprio controlador do ESP8266.
Portanto, o programa máximo que tive foi o seguinte: para programar seu controlador, não há necessidade de nada, exceto um laptop com um navegador WEB! Ou seja, um laptop com um navegador WEB e meu controlador - isso deve ser o suficiente para configurar totalmente e escrever e desenhar programas de controle.
E , como se viu, era bem possível perceber isso!
Não vou aborrecê-lo com todos os detalhes do desenvolvimento do projeto. Só posso dizer que, com base nas palavras que vieram à minha mente e à linguagem durante o processo de desenvolvimento, seria possível compilar um “ Dicionário de Profanação de Trabalhadores Eletrônicos ” separado. Mas tudo está para trás. Mais precisamente, não todos, mas o primeiro estágio mais difícil, quando não está claro - sua idéia será viver ou é apenas um absurdo um castrado cinza em uma noite de luar.
Vou compartilhar o resultado do que saiu e é chamado de "Controlador ShIoTiny" .
E o que aconteceu?
O hardware do controlador ShIoTiny é padrão e simples: três entradas projetadas para sensores de contato seco (botões, chaves reed, também são sensores de nível de água no tanque), uma entrada ADC, uma entrada para conectar um sensor de temperatura e umidade como DHT22 ou similar . E, finalmente, três saídas na forma de relés de comutação para 220V, 1 Amp. O relé diz 10A, mas sou realista e não os deixo passar pela placa de amplificador 10A. E controlar as entradas das bombas e 1 Amp é suficiente. Tudo isso é alimentado por uma fonte de energia com uma voltagem de 5 a 9 volts.
Obviamente, adicionei o sensor de temperatura exatamente como “Schaub was”, mas no ADC havia esperanças de medir a tensão da rede elétrica. Isso não é suficiente?
Obviamente, todas as entradas, exceto a entrada para conectar o DHT22, têm proteção contra resistores e diodos: eu não desejava queimar o ESP8266, e os diodos e resistores custam apenas alguns centavos.
Uma foto do produto final pode ser vista no início do artigo. Encomendei várias dessas pranchas - e se eu a queimar ou terei que cortar os caminhos e as pernas?
Mas, felizmente - não precisava.
O produto é, obviamente, beleza e grandeza. Mas, por conveniência, a seguir é apresentado um diagrama da conexão com os simuladores de placa de sensores e atuadores.

No lugar dos sensores de nível - botões Entrada1..3, em vez de partidas - LEDs conectados ao relé Relé1..3. Bem, um resistor variável no ADC para simular a tensão de entrada.
Quando o relé está desligado, o LED vermelho acende. E quando ligado - verde. Então eu depurei na mesa.
Além de tudo isso, há um conector de alimentação à esquerda da placa e dois botões de serviço à direita: Reset e AP. Bem, um interruptor DIP que coloca o dispositivo no modo de programação. O conector de programação ESP8266 via adaptador USB-UART também está disponível.
Algumas explicações para os botões. O que é Reset - e, portanto, fica claro. Mas o botão AP é necessário para colocar o ShIoTiny no modo de ponto de acesso aberto (modo de configuração ou modo de configuração). Por que isso é necessário? Bem, por exemplo, você estragou as configurações de rede e deseja alterá-las. Pressione o botão AP por alguns segundos (até que o lindo LED azul acenda). Em seguida, pegue seu smartphone ou laptop, ligue o Wi-Fi e veja um ponto de acesso aberto com o nome esp_8266_xxxx e conecte-se a ele. Em seguida, vá para o navegador do seu smartphone ou laptop e digite a barra de endereço: 192.168.4.1. Se tudo estiver em ordem, você será direcionado para a página do controlador ShIoTiny e poderá configurá-lo de uma nova maneira.
Como vemos, o hardware não é nada complicado. Portanto, sobre a parte do software .
Em todos os saltos de implementação, descreverei, mas depois. Algum dia. E hoje vou considerar o software apenas "fora", ou seja, do ponto de vista do usuário - eu ou outro, que se arriscou a usar o meu ofício (existem acrobacias).
Do ponto de vista do usuário, o dispositivo é um servidor HTTP acessível via WiFi. Todas as configurações, programação e assim por diante - são feitas usando um navegador WEB.
E assim, fomos para a página do controlador. O que nós vemos? E vemos a aba “Controle e status”, que mostra o status atual dos dispositivos utilizados: entradas, saídas, ADC, DHT22. Além disso, os parâmetros de conexão ao ponto de acesso são mostrados (se trabalharmos no modo de uma estação WiFi); configurações do ponto de acesso (se trabalharmos no modo de ponto de acesso WiFi) ou ambos. Além disso, os parâmetros de conexão com o broker MQTT são mostrados se o protocolo MQTT for usado.

Para ver, nada de especial e interessante. Não há nada para pressionar! Embora ... Existem mais duas abas! Definindo as configurações de rede A rede e os esquemas do diagrama do editor ElDraw .
Você adivinhou, o Networking está configurando uma rede, mas não apenas isso. Tem alguns parâmetros mais interessantes. “Picar” na guia Rede e ver aproximadamente o que é mostrado na figura.
Configurando o nome e a senha do ponto de acesso para cada um dos modos - estações WiFi e pontos de acesso WiFi. Tudo parece estar claro. Assim como o objetivo do botão Scan WiFi, é totalmente transparente.
Mas a lista suspensa "Modo ShIoTiny" requer esclarecimentos. O fato é que eu não conseguia decidir em que modo seria mais conveniente trabalhar. E, portanto, previsto para 5 modos de operação do dispositivo.

Listamos brevemente esses modos de operação.
Modo de configuração - modo de configuração. Este é o modo de ponto de acesso aberto com um endereço fixo 192.168.4.1 e o nome esp_8266_xxxx.
Modo estação - o modo da estação WiFi conectada ao seu ponto de acesso.
Modo AP - modo de ponto de acesso fechado. Você mesmo define o nome e a senha.
O modo AP + Estação é a inclusão simultânea do modo AP + modo Estação.
Modo único - trabalhe sem conectar-se à rede. Um controlador solitário carregando sua parte pesada ...
Em qualquer um dos modos, exceto no "Modo de configuração" , você pode bloquear a página WEB marcando a caixa de seleção "Bloquear Web no modo de estação" . Este é um tipo por razões de segurança.
As configurações são óbvias para o MQTT: servidor, porta, senha, conexão aberta ou SSL . Não vou morar aqui em detalhes.
Além de tudo o mais, o controlador ShIoTiny pode enviar e receber pacotes em um formato especial para multicast. Suas configurações também são óbvias: endereço e porta do grupo.
Obviamente, se você descrever todas as nuances das configurações, receberá um artigo separado, mas isso não está incluído nos meus planos.
E assim, com a guia Rede , tudo fica mais ou menos claro. Vamos seguir para o recurso principal do controlador - o editor do programa ElDraw .
Ao tocar na guia ElDraw, vemos algo como o seguinte. Obviamente, se o dispositivo não tiver um circuito carregado, o campo do circuito estará vazio.

À esquerda, há uma paleta de elementos ou nós (nós).
À direita, um campo de diagrama ou simplesmente um "diagrama".
Dos botões superiores para carregar e descarregar no disco e no dispositivo, além dos botões para edição.
Para quem trabalhou com editores, o gerenciamento geralmente é óbvio. Precisamos adicionar um elemento ao diagrama - pegue-o com o mouse e arraste-o da paleta para o diagrama. É necessário remover o elemento ou link do diagrama - cutucar nele ou sobre ele com o mouse e pressionar a tecla DEL . Precisamos conectar os elementos - pegamos a entrada de um elemento e a conectamos à saída de outro.
Ainda há redimensionamento (SHIFT + roda do mouse). Infelizmente, não há como copiar elementos e grupos de elementos. Mas isso não interfere muito.
Além disso, por razões de lógica, a entrada de um nó pode ser conectada apenas a uma saída de outro nó. Mas a saída do nó é com várias entradas de outros nós. As entradas estão sempre à esquerda dos nós. As saídas estão sempre à direita.
Quais recursos temos para implementar algoritmos?
Em oportunidades - bastante extensa. A paleta contém nós que representam todo o hardware do controlador ShIoTiny : entradas, relés, ADCs, DHT11 / 22.
Existem nós lógicos e aritméticos para processamento de dados.
Para que possamos trabalhar com o dispositivo via Internet, existem nós para assinar e publicar parâmetros no broker do MQTT.
Se quisermos que vários controladores ShIoTiny troquem informações entre si - você pode usar os nós para transmitir e receber parâmetros usando o protocolo UDP multicast.
Para este rum, existem nós de timer; nós de controle de gerenciamento de eventos.
Vou dar alguns exemplos. Por exemplo, você deseja que os dados de temperatura e umidade sejam publicados a cada 30 minutos em um servidor MQTT? Não há nada mais fácil. Desenhe assim.

Bem botão meme "Upload". Isso é tudo!
Se você configurou corretamente a conexão com o broker MQTT na guia Rede, é tudo!
A cada meia hora, a temperatura será publicada no intermediário no tópico / T e umidade - no tópico / H. Ou, se você perguntar os nomes dos tópicos, abaixo deles.
Pergunta: Por que 18.000 30 minutos? Porque todos os tempos são medidos em décimos de segundo.
Agora você deseja adicionar a este circuito a capacidade de ativar o relé 1 via Internet, e mesmo por um certo tempo? Não é um problema. Desenhe assim.

Cerca de cinco, clique no botão "Upload". Isso é tudo! Agora, além do fato de que a cada meia hora, temperatura e umidade serão publicadas no broker do MQTT, será possível ativar o relé Relay1. Sim, não apenas ligue-o, mas por exatamente 10 minutos. Você pode ativar o relé publicando o tópico / r1cmd, definido como 1. E o estado real do relé será publicado no tópico / r1status.
Quero não apenas ligar, mas também desligar o relé antes do tempo? Sim, como você diz. A figura abaixo mostra como fazê-lo!

O princípio está claro? Você acabou de desenhar o algoritmo com o mouse! E escreva algumas configurações: hora, nome do tópico e tudo. Isso é muito mais claro do que escrever um monte de código.
A propósito , destacar links em cores diferentes não é um "photoshop" - essa é uma das funções do editor. Você pode colorir os links como desejar, para não confundi-los.
Mas oh e isso não é tudo! Para depurar o algoritmo, existe um botão "Monitor start". Por mais estranho que pareça, ele liga o modo "monitor". Nesse modo, o estado de todas as saídas de todos os nós é lido periodicamente no controlador ShIoTiny e exibido no circuito. Aproximadamente como na figura abaixo.

Ou seja, podemos ver em "quase tempo real" o que temos na entrada e na saída de cada nó. Ajuda muito quando algo não está claro.
Ainda há muitos "chips e recursos" que gostaria de descrever, e minha consciência não permitirá que você gaste seu tempo com eles em um artigo. A principal idéia realizada já está clara: um mínimo de parâmetros configuráveis - um máximo de visibilidade.
Voar na pomada
Claro, quero que não haja mosca na pomada, mas o mundo não é perfeito. Meu editor e meu controlador não são perfeitos. Encontrei duas características principais que ainda não consegui eliminar.
Em primeiro lugar, às vezes ocorrem falhas durante o movimento de elementos do grupo. Mas isso não interfere muito no trabalho. "", "".
, -, «Upload», . , .
Conclusão
, , , . , .
, -, . .
, « ».
— : shiotiny@yandex.ru
, , , .
, .
,
ShIoTiny
ESP8266
WiFi
MQTT
UDP Multicast
().
https://github.com/shiotiny/ShIoTinyBin
: https://github.com/shiotiny/ShIoTinyBin/blob/master/bin/esp-07-shiotiny.bin
: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/esp-07-shiotiny.png
: https://github.com/shiotiny/ShIoTinyBin/blob/master/doc/ShIoT-esp8266-01_obzor.pdf
" " .