Comunicação sem fio com módulo wireless HC-12 e Arduino

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.

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:

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.

5/5 - (2 votos)

Related posts

Como usar o WifiManager com ESP32 e ESP8266

by Arduino e Cia
2 anos ago

Como usar o motor shield para ESP8266 NodeMCU

by Arduino e Cia
4 anos ago

Relógio com NodeMCU ESP8266 usando NTP

by Arduino e Cia
7 anos ago
Sair da versão mobile