Comunicação sem fio com módulo wireless HC-12 e Arduino
O módulo wireless HC-12 é um módulo que promete comunicação em distâncias de até 1000m, e funciona por interface UART/serial na conexão com um microcontrolador, PC, sistemas embarcados, etc.
É mais uma boa opção para conexão wireless se você procura um módulo fácil de usar e que se conecta aos mais variados tipos de dispositivos.
O módulo wireless HC-12 usa radiofrequência para comunicação, trabalhando na faixa de 433.4 à 473MHz. Essa faixa de frequência você pode configurar utilizando comandos AT, e você também pode alterar outros parâmetros, como a potência de transmissão do módulo (máximo de 100mW).
O módulo wireless HC-12
O HC-12 lembra um pouco os módulos bluetooth HC-05 e HC-06, pois trabalha com comunicação serial com o microcontrolador, ou seja, você precisa de apenas 2 pinos para ligação do RX e TX do módulo.
Na imagem acima podemos ver que temos, a princípio, duas formas de ligar uma antena nesse módulo, já que ele não conta com antena embutida. A primeira é soldar uma antena tipo “mola” na placa (essa antena já vem com o módulo), e a outra é utilizar uma antena externa no conector U.FL.
No HC-12 também temos um pino para que o módulo entre em modo de comando AT (pino SET), que é ativado em nível baixo. Com isso, você configura os parâmetros do módulo por meio de comandos AT, como veremos a seguir.
Configurando o módulo wireless HC-12 por comandos AT
E pra que você precisa configurar o módulo HC-12? Bom, como eu falei anteriormente, o módulo HC-12 trabalha com frequências entre 433.4 e 473MHz, e se você quer fazer dois (ou mais) módulos se comunicarem, eles precisam estar na mesma frequência.
Para realizar a configuração do módulo, vamos utilizar um conversor USB-TTL FTDI RS232, mas você pode, se preferir, usar também um Arduino para fazer esse processo.
Na montagem do circuito abaixo eu não usei a alimentação de 5V do módulo FTDI porque a corrente não foi suficiente para alimentar o HC-12, então optei por alimentação externa.
Observe que o pino SET do módulo está ligado ao GND, o que indica que o HC-12 deve entrar em modo de comando AT:
Configurando o módulo com comandos AT
Após a montagem, abra um programa de terminal como por exemplo o Termite (download). Configure a velocidade padrão do módulo, que é 9600 bps, e teste a comunicação usando o comando AT.
O módulo deve responder com um “OK”, conforme imagem abaixo, onde eu também usei o comando AT+C100 para alterar a frequência de comunicação do módulo:
Agora você pode usar os outros comandos para alterar a velocidade de comunicação, frequência e outros parâmetros do módulo:
- AT – Instrução de teste. Retorna “OK”
- AT+Bxxxx – Altera a velocidade da porta serial, onde xxxx é a velocidade desejada: 1200bps, 2400bps, 4800bps, 9600bps, 19200bps, 38400bps, 57600bps e 115200bps. A velocidade padrão do módulo é 9600bps. Após o comando, o módulo retorna com a mensagem “OK+Bxxxx”
- AT+Cxxx – Altera o canal de comunicação wireless, onde xxx aceita valores entre 001 e 127. O valor padrão é 001, operando na frequência de 433.4MHz. Após o comando, o módulo retorna com a mensagem “OK+Cxxx”
- AT+Px – Altera a potência de transmissão do módulo, onde x pode assumir valores de 1 à 8: 1 (-1 dBm), 2 (2 dBm), 3 (5 dBm), 4 (8 dBm), 5 (11 dBm), 6 (14 dBm), 7 (17 dBm) e 8 (20 dBm). Após o comando, o módulo retorna com a mensagem “OK+Px”
Usamos então os comandos AT acima para configurar dois módulos na mesma frequência, e realizar um teste de comunicação entre o computador e o Arduino.
Comunicação PC x Arduino usando HC-12
Nesse teste vamos usar dois módulos wireless HC-12, configurados da mesma maneira (velocidade de 9600 e frequência de 433.4 MHz).
O primeiro módulo continuará ligado no computador, que será de onde vamos enviar os comandos para acionar as portas do Arduino. Não esqueça de desligar o GND do pino SET, para que o módulo saia do modo de comandos AT.
O segundo módulo será ligado ao Arduino, nos pinos 10 e 11, onde vamos criar uma serial (RX e TX) por software usando a biblioteca SoftwareSerial.
Nos pinos 5, 6 e 7 temos 3 leds que vão acender conforme os comandos enviados do computador.
Depois de montar o circuito, carregue o seguinte programa no Arduino:
//Programa : Modulo Wireless HC-12 e Arduino //Autor : Arduino e Cia //Armazena o caracter recebido char buf; #include <SoftwareSerial.h> //Define os pinos para conexao serial do modulo wireless HC-12 SoftwareSerial mySerial(10, 11); // RX, TX //Define os pinos dos leds int pinoled_verm = 5; int pinoled_verd = 6; int pinoled_azul = 7; //Armazena o estado dos pinos int estadoled_verm = 0; int estadoled_verd = 0; int estadoled_azul = 0; void setup() { mySerial.begin(9600); //Define os pinos dos leds como saida pinMode(pinoled_verm, OUTPUT); pinMode(pinoled_verd, OUTPUT); pinMode(pinoled_azul, OUTPUT); Serial.begin(9600); } void loop() { while (mySerial.available() > 0) { buf = mySerial.read(); //Led vermelho if (buf == '1') { //Inverte o estado do led (HIGH/LOW) estadoled_verm = !estadoled_verm; //Aciona a porta do led digitalWrite(pinoled_verm, estadoled_verm); //Responde com msg sobre o estado do led mySerial.println("Estado do led vermelho alterado!"); } //Led verde if (buf == '2') { estadoled_verd = !estadoled_verd; digitalWrite(pinoled_verd, estadoled_verd); mySerial.println("Estado do led verde alterado!"); } //Led azul if (buf == '3') { estadoled_azul = !estadoled_azul; digitalWrite(pinoled_azul, estadoled_azul); mySerial.println("Estado do led azul alterado!"); } } }
O programa usa a biblioteca SoftwareSerial para emular uma porta serial nos pinos 10 e 11 do Arduino, e aguarda os valores 1, 2 ou 3 para acender os leds dos pinos 5, 6 e 7 respectivamente.
Testando a comunicação com o HC-12
Para testar a comunicação, alimente o Arduino Uno com uma fonte externa para isolar completamente a placa do computador. Abra uma janela do Termite para realizar a comunicação com o módulo wireless HC-12 ligado ao módulo FTDI. Em seguida, envie os valores 1, 2 ou 3 para acender os leds:
Observe quer conforme os comandos são enviados para o Arduino, este envia uma resposta também pela serial, indicando que os comandos foram recebidos com sucesso.
E antes de finalizar este post, gostaria de compartilhar um programa interessante para configuração do módulo wireless HC-12. Com ele você pode ler as informações de configuração do módulo e também alterar os parâmetros que desejar. Tudo isso sem precisar digitar comandos AT:
O download do HC-12 Configuration Utility pode ser feito neste link.
Gostou? Confira também o post Contador Remoto com sensor indutivo e módulo wireless HC-12, onde eu mostro como enviar dados remotamente para um display LCD 20×4 usando esse módulo.
eu vo fazer um projeto que terá 3 módulos Wireless um q vai ficar no computador e os outros dois irão ficar isolados enviando informação para o q esta no computador, queria saber se isso daria certo ou um dos q estão isolados poderia enviar informação para o outro q esta isolado? e se vcs tiverem uma forma de q isso não aconteça ia ajudar muito, desde já abrigado
È possivel controlar um servo motor de rotação continua (360º ) usando os modulos de 433Mhz e o arduino ou só com os HT 12E ??
Oi Flavio,
É possível sim. Você pode usar módulos 433, Bluetooth, Xbee.. são várias opções. 🙂
Abraço!
É possível utilizar deste aparato mostrado acima – na função de acionamento de um sistema simples de ar-condicionado (tipo split), no qual o mesmo monitore o funcionamento do aparelho através da informação de que há a necessidade das portas do ambiente estejam fechadas, para que então o sistema de ar entre em funcionamento, do contrário, caso uma das portas do cômodo esteja aberta o arduíno impediria o acionamento do ar-condiconado.
Que usb é esse desse conversor? Não entendi como conectar no pc, não tem um conversor com usb tipo a macho?
achei esse aqui: http://www.filipeflop.com/pd-2ba754-cabo-conversor-usb-ttl-pl-2303hx.html?ct=&p=1&s=1
da algum problema fazer a comunicação com ele?
Boa noite,
Usei um conversor FTDI USB-TTL, como esse: http://www.filipeflop.com/pd-14690c-placa-ftdi-ft232rl-conversor-usb-serial.html
Abraço!
Adilson
Posso incorporar um gps no módulo externo para que o mesmo envie a posição?
Oi Adão,
Pode sim, é perfeitamente possível.
Abraço!
Olá,
Gostei muito do tutorial. Seria possível automatizar um portão que aceita RF 433MHZ com esse modulo?
Agradeço desde já!
Oi Alvaro,
Nunca tentei, mas seria uma boa se funcionasse. Vou pesquisar. 🙂
Abraço!
Adilson
Tive um problema com esse Módulo, eu creio que talvez seja necessário adicionar um diodo nesse circuito. Meu módulo queimou depois de ficar muito tempo recebendo informação.
Fiz uma aplicação de ligar um led apertando um botao em outro arduino, esqueci o botão ligado por horas e o outro módulo queimou.
Tem como implementar a comunicação entre dois arduinos utilizando dois lcd 16,2 I2c?
E o consumo de energia? Será q rola com uma bateria como aquelas externa para Cel?
Boa noite,
Você quer dizer aquelas baterias estilo powerbank? Pode ser, teria que testar, pq no meu projeto eu usei fonte externa, já que a corrente da USB não foi suficiente para alimentar o módulo.
Abraço!
Adilson
Boa noite!
Alguém poderia me informar onde encontrar o datasheet do HC-12?
Não estou encontrando em lugar nenhum.
Desde já muito obrigado.
https://www.elecrow.com/download/HC-12.pdf
https://www.elecrow.com/download/HC-12.pdf
ola. eu gostaria de usar esses modulos pra controlar um aeromodelo.. posso usar ele só com o pic 16f628A sem precisar configurar nada no pc? só conectar o pic no modulo e usar?
Oi Lucas,
Isso mesmo. Se o seu PIC aceitar comunicação serial, é só plugar e usar.
Abraço!
Adilson
Muito bom o tutorial.parabens.
Obrigado Carlos!
Aguardo sua visita no Arduino e Cia sempre que puder. 🙂
Abraço!
Adilson
Estou fazendo um Projeto Pra trabalho de tcc.
Quero Ativar Um Beep Ou acender um led, Por ativamento de Distancia.
Tipo O Transmissor RF vai está parado, e se o Receptor RF ficar longe em uma certa Distancia.
Ele Ativa um comando E acende o Led.(réle…)
Preciso usar arduino
E se sim, Qual o recomendavel ?
Desde já agradeço pela ajuda.
bom dia
quero comprar o modulo HC-12 mais o link não estou conseguindo acessar, por favor ver o que esta acontecendo
O download do HC-12 Configuration Utility pode ser feito neste link.
Oi Carlos,
Obrigado por avisar. Link atualizado.
Abraço!
Adilson
Boa tarde. Um mesmo modulo HC-12 pode ora transmitir, ora receber? Caso negativo, seria possível colocar na placa do Arduino dois módulos, um para transmitir e o outro pra receber?
Oi Renato!
Pode sim. O HC-12 por transmitir e receber, é um módulo bem bacana para comunicação wireless. 🙂
Abraço!
Adilson