Olá queridos leitores do Geektimes! Desta vez, quero chamar sua atenção para uma série de artigos sobre a integração de equipamentos sem fio nooLite em sistemas de automação residencial. Esse ciclo será semelhante à série de artigos já publicados ( um , dois , três ) sobre a integração dos módulos Laurent nos sistemas Smart Home, mas ele abordará o sistema nooLite e, após a leitura deste ciclo, você não terá mais dúvidas sobre o gerenciamento de dispositivos nooLite a partir do seu Smart em casa.Sobre a série de artigos
O ciclo é dividido em três partes. Na primeira parte, você aprenderá sobre como o equipamento sem fio nooLite funciona e como gerenciá-lo em seus projetos do Arduino. A segunda parte descreverá em detalhes a integração do módulo de controle MT1132 no Mega Server do Arduino e as possibilidades de gerenciar uma Smart Home que está sendo aberta nessa conexão. E o terceiro artigo da série será dedicado a um tópico muito interessante - o conceito de criação de dispositivos “100 em 1” baseados no Arduino Mega Server. Um exemplo de criação de uma estação de solda sem fio no AMS será examinado em detalhes, literalmente do nada - com base em apenas um dímero sem fio nooLite. Haverá também uma quarta parte da qual você aprenderá a criar um cristal mágico.A propósito, a estação de solda, que será discutida no terceiro artigo, já está presente na mais recente montagem do Arduino Mega Server sob o número 0,14. E os leitores mais curiosos não podem esperar pelo terceiro artigo, mas baixem imediatamente o kit de distribuição e descubram como tudo funciona por conta própria.
E o melhor é que pode haver centenas desses dispositivos no AMS e ao mesmo tempo. Por exemplo, uma estação de solda, uma estação meteorológica, uma unidade de segurança, um controlador de efeito estufa, etc. E tudo isso pode funcionar simultaneamente ou "iniciar" carregando uma página da web ou mesmo um site inteiro dedicado a um dispositivo específico.Mas não vamos nos antecipar, vamos deixar o mais interessante no final, mas por enquanto faremos a preparação teórica necessária. Prometo que tudo será declarado da maneira mais simples e inteligível. Então, vamos começar.Equipamento NooLite
O equipamento NooLite já é um sistema conhecido e popular e há muitas informações sobre ele na Internet. Vou tentar resumir os pontos principais aqui.O conceito é muito simples - existem unidades de energia para controlar a luz e várias cargas e painéis de controle que enviam comandos para essas unidades de energia. E tudo isso funciona, naturalmente, sem a participação de conexões com fio. Na verdade tudo. A beleza do sistema é que todos os componentes são pensados, bem feitos e fazem exatamente o que diz: eles controlam com segurança o equipamento conectado.Também existem sensores sem fio, controle de dispositivos de um smartphone e muito mais, mas é impossível cobrir tudo em um artigo. Aqui, focaremos apenas a integração do nooLite com a popular plataforma DIY - Arduino.De todo o vasto espectro de equipamentos nooLite, estaremos interessados no módulo de controle MT1132, pois ele foi projetado para conectar-se ao Arduino e aos computadores de placa única, como o Raspberry Pi. E funciona em uma interface serial simples. No futuro, direi que gostei do módulo devido à sua simplicidade, previsibilidade e operação confiável. E pude apreciar essas qualidades depois de um mês de luta infrutífera com o módulo de rede no chip W5500, que não queria funcionar normalmente.
E gostei especialmente do fato de que (além da fonte de alimentação) o módulo está conectado ao Arduino com apenas um (!) Wire (RX). O segundo (TX) pode ser omitido por completo. O módulo é "unidirecional", ou seja, foi projetado apenas para enviar sinais de controle. Os planos da empresa Nootehnika incluem o desenvolvimento e o lançamento de uma versão "bidirecional" do módulo.
O segundo elemento que precisamos do equipamento nooLite é uma unidade de controle de potência, por exemplo, SU111-300. A conexão da unidade é elementar e pode ser vista na ilustração. Dois fios estão conectados a uma rede de 220 volts e os outros dois à carga. A única coisa que eu gostaria de prestar atenção é que os módulos são fornecidos com um jumper que bloqueia o modo de escurecimento e, se você deseja ajustar a potência, é necessário cortá-lo (e lembre-se de isolar os fios desencapados resultantes).
Não vou me concentrar nos controles remotos porque esse é um controle "manual" e, em conexão com a automação, estamos mais interessados no automático. Só posso dizer que os experimentos foram realizados com o controle remoto PU311-2, na forma de um interruptor de parede, que se mostrou da melhor maneira, ou seja, acendeu e apagou a luz de maneira clara e sem falhas. Na verdade, o que é bom equipamento e diferente de ruim - você simplesmente não nota bem.Conceito de trabalho. Encadernação e desassociação
Antes de ligar e desligar aparelhos elétricos usando o sistema nooLite, você precisa "vincular" os módulos de controle às unidades de energia correspondentes. Isso é feito usando o chamado procedimento. “Ligações” e “desatamento” descritas em detalhes na documentação do nooLite. Em resumo, tudo se resume a pressionar um par de botões nos blocos vinculados e não apresenta nenhuma dificuldade.No caso em que o módulo de controle MT1132 é usado em vez do controle remoto, o procedimento ocorre de uma maneira ligeiramente diferente. A saber: como o módulo não possui botões, é necessário gerar e enviar programaticamente um comando de controle no canal desejado e pressionar o botão na unidade de energia, confirmando a "ligação" ou "desatamento".Os canais são "linhas de controle" e há 32 deles no módulo MT1132, conforme evidenciado pelos dois últimos dígitos no nome. Isso significa que, com este módulo, você pode gerenciar 32 grupos separados de equipamentos, o que é mais do que suficiente para um apartamento ou uma casa pequena. Se você tem uma casa grande, os módulos podem trabalhar em conjunto e escalar para qualquer número de canais.Descrição do protocolo
Há um documento maravilhoso no site da empresa Nootehnika que descreve detalhadamente e detalhadamente a conexão do módulo e seu protocolo de controle. Não vou desarrumar o artigo com detalhes técnicos desnecessários, qualquer um pode ler este documento, descreverei apenas os pontos principais.Para controlar o módulo, precisamos formar um comando de controle composto por 12 bytes. Os princípios para a formação dessa equipe estão descritos no documento acima. E como você verá abaixo, todas essas regras já estão programadas nas funções de controle e precisamos apenas usá-las para emitir comandos para o módulo.Equipes de teste
O nooLite possui um sistema de comando bastante desenvolvido, a partir do qual selecionaremos os mais simples e mais comuns e ilustraremos o sistema usando seu exemplo.- Snap
- Desatar
- Inclusão
- Desligado
- Configuração de energia (escurecimento)
Entendendo como as equipes básicas funcionam, você pode usar facilmente qualquer outra.Conectando o módulo MT1132
Como eu já disse, o módulo MT1132 está conectado literalmente com um fio (exceto energia). O módulo pode ser alimentado por uma tensão de 5 volts e uma tensão de 3,3 volts. Portanto, não houve problemas ao conectar o Arduino Mega de 5 volts ou o Arduino Due de 3,3 volts. O único ponto é que, com energia reduzida, o alcance da operação confiável do sistema diminui. E isso deve ser levado em consideração se você deseja alimentar o módulo a partir de uma tensão de 3,3 volts.
O módulo possui pinos RX e TX para receber e enviar sinais via interface serial. Crítica para a operação do módulo é a conexão do RX, para receber comandos de controle do controlador. Conseqüentemente, o pino RX no lado do módulo está conectado ao pino TX (18) no lado do Arduino. Essa pinagem é válida para o Arduino Mega e o Arduino Due.Parte do software
Agora vamos descobrir como gerenciar toda essa economia a partir de esboços no Arduino. Primeiro, inicialize o Serial1, ao qual conectamos o módulo MT1132 (isso é feito na frequência padrão 9600):Serial1.begin(9600);
Agora o código da função de controle principal:void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
Em princípio, nem precisamos saber como isso funciona; podemos usá-lo no modo "caixa preta" ou em um tipo de API, com uma certa interface destacada. Só precisamos saber como usar essa interface.Como você pode ver, existem apenas quatro parâmetros - canal, comando, dados e formato. Você pode ler por que princípio as solicitações para esta API podem ser lidas no documento mencionado, mas simplificaremos ainda mais nossa tarefa e agruparemos essa interface em comandos simples de controle de dispositivos nooLite.void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind(byte ch) {nooSendCommand(ch, 9, 0, 0);}
void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}
Equipe relativamente complexa é apenas a última, lá, além do canal, o nível de potência também é definido. Também há equipes no esboço em que não vamos nos concentrar agora, mas elas são formadas com a mesma facilidade.Na verdade ... é isso! Nenhum lugar é mais fácil. No código, os comandos de controle são assim:nooBind(ch);
nooUnbind(ch);
nooOn(ch);
nooOff(ch);
nooValue(ch, v);
Agora vamos praticar o gerenciamento do módulo de energia nooLite. Então, amarramos o bloco de potência no canal zero:nooBind(0);
O LED na unidade de energia começa a piscar. Pressione o botão no bloco - o LED pára de piscar - o bloco de força está conectado. Em vez do canal zero, você pode usar qualquer outro. E você pode facilmente gerar o número do canal no código do esboço de acordo com suas necessidades.Ligue a lâmpada (se amarramos a lâmpada no canal zero, os comandos para ela devem ser enviados neste canal):nooOn(0);
Defina a potência (brilho da lâmpada):nooValue(0, 100);
Aqui você precisa falar um pouco sobre as regras para formar uma equipe que define o nível de poder. O valor da energia não muda de 0 a 255, como se pode pensar, mas de 35 a 155. Se o valor for maior que 155, a potência será máxima, se for 0, isso será equivalente a um comando de desligamento.Aqui (apenas no caso) uma fórmula que converte valores "padrão" de 0 a 100 em um formato entendido pelo módulo nooLite:v = x * 1.2 + 34;
Usando esta fórmula, você pode definir o brilho da lâmpada na porcentagem usual de energia. E, é claro, se você precisar ajustar a potência de maneira não linear, poderá criar uma variável v de acordo com qualquer lei ou até mesmo escolher valores fixos. Isso será discutido na terceira parte do ciclo, quando ajustaremos a temperatura de aquecimento da estação de solda.Desligue o dispositivo:nooOff(0);
Desatar:nooUnbind(0);
O LED na unidade de energia começa a piscar. Confirmamos o desacoplamento pressionando o botão na unidade de energia. Agora é isso, agora a unidade de energia parou de responder aos nossos comandos e podemos "encaixá-la" novamente em qualquer um dos 32 canais do módulo nooLite MT1132.Aqui está o esboço completo.Código de esboço completobyte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)
void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}
void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}
void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}
void setup() {
Serial1.begin(9600);
/*
loop(), */
//nooBind(0);
//nooOn(0);
//nooOff(0);
//nooValue(0, 100);
//nooUnbind(0);
}
void loop(){
}
Subtotal
Como você pode ver, não há nada complicado em controlar os módulos de energia nooLite usando o Arduino, pelo contrário, o controle é fenomenalmente simples: o módulo é conectado com um fio e os comandos são quase uma linguagem humana natural - "ligue o canal 0", "desligue o canal 1", "Definir a potência de 50% no canal 3" não é realmente mais simples.Bônus para quem leu até o fim
Outro dia, foi lançada uma nova versão do Arduino Mega Server no número 0.14, na qual foram superadas todas as doenças infantis da tecnologia e que funcionam de maneira rápida e estável. E a mesma versão contém o núcleo de controle integrado de instrumentos nooLite e como tudo funciona, você aprenderá com o próximo artigo da série “Equipamento sem fio nooLite e Smart Home (parte 2). Mega Server do Arduino ".A segunda , terceira e quarta partes do ciclo.