- Materiais requisitados:
- Como as coisas funcionam?
- Programando o ESP8266-01:
- Conectando ESP8266-01 com Arduino:
- Programa Arduino e funcionamento:
O ESP8266-01 tem sido um ótimo módulo para saciar toda a nossa sede de projetos IOT. Desde o seu lançamento, desenvolveu uma forte comunidade e evoluiu para um módulo Wi-Fi fácil de usar, barato e poderoso. Outra plataforma de código aberto que é muito mais popular é o Arduino, que já tem vários projetos construídos em torno dele. A combinação dessas duas plataformas abrirá portas para muitos projetos inovadores, portanto, neste tutorial, aprenderemos como fazer a interface do módulo ESP8266-01 com o Arduino. Assim poderemos enviar ou receber dados entre o Arduino e a Internet.
Para o propósito deste tutorial vamos ler a hora, data, temperatura e umidade da internet usando uma API com o ESP8266-01. Em seguida, envie esses valores para uma placa Arduino e exiba-os na tela LCD 16 * 2. Parece legal certo !! Então vamos começar.
Materiais requisitados:
- Placa Arduino (qualquer versão)
- ESP8266-01
- Placa de programação FTDI com opção de 3,3 V
- LCD 16x2
- Potenciômetro
- Botão de apertar
- Fios de conexão
- Tábua de pão
Como as coisas funcionam?
Antes de começarmos, é importante saber como realmente isso vai funcionar. Basicamente, temos que começar com o módulo ESP8266-01. Estaremos usando o IDE Arduino para programar o ESP8266 e o código será escrito para usar uma API para ler um arquivo JSON por meio de solicitação http. Em seguida, usaremos a frase desse arquivo JSON para extrair apenas as informações necessárias do arquivo JSON completo.
Uma vez que as informações estejam expressas, iremos imprimi-las usando a comunicação serial. Essas linhas seriais serão então conectadas ao Arduino, para que o Arduino possa ler as informações enviadas do ESP8266. Assim que as informações forem lidas e processadas, iremos exibi-las na tela LCD.
Tudo bem, se você não entendeu isso completamente, pois estaremos aprendendo o mesmo no restante deste tutorial.
Programando o ESP8266-01:
Este tutorial presume que você tenha alguma experiência com o módulo ESP8266. Caso contrário, é recomendável ler os três tutoriais a seguir para entender completamente sobre isso.
- Introdução ao ESP8266-01
- Programação ESP8266-01 usando comandos AT
- Programação do ESP8266-01 usando Arduino IDE e Flashing sua memória
Você também pode verificar todos os nossos projetos ESP8266 aqui.
Aqui, vamos programar o módulo ESP8266-01 usando o IDE Arduino. Para o hardware estamos usando a placa FTDI com 3,3V para programar ESP8266, pois tornará o hardware muito simples. O diagrama de circuito para conectar seu ESP8266 com a placa FTDI é mostrado abaixo.
Certifique-se de que as seguintes condições sejam atendidas
1. O ESP8266-01 é tolerante apenas a 3,3 V, não use 5 V. Portanto, defina o FTDI apenas no modo 3.3V.
2. GPIO_0 deve ser aterrado para o modo de programação
3. O pino de reinicialização deve ser conectado por meio de um botão ao pino de aterramento. Este botão deve ser pressionado antes de enviar o código. Cada vez que o botão é pressionado, o LED azul no módulo ESP8266-01 fica alto para indicar que o módulo foi reiniciado.
Assim que as conexões forem feitas, abra o IDE do Arduino e verifique se você consegue carregar um programa de amostra com sucesso. Se você não tiver certeza de como usar o IDE do Arduino para carregar o programa no ESP8266, siga a Programação do ESP8266 com o Arduino para aprender. Neste ponto, presumo que você tenha carregado o programa blink com sucesso.
. O programa completo é fornecido no final desta página, mais abaixo, estou explicando-os como pequenos trechos. O programa também requer a biblioteca Arduino JSON para compilar, portanto, se você ainda não adicionou a biblioteca ao seu Arduino IDE, adicione-a baixando da biblioteca Arduino JSON do Github.
O ESP8266 precisa se conectar à internet para obter os dados sobre data, hora, temperatura e umidade. Então você tem que permitir que ele se conecte ao seu Wi-Fi, provando o SSID e a senha nas linhas abaixo
const char * ssid = "JIO-Fi"; // Insira seu SSID de Wi-Fi const char * password = "Pas123"; // Insira sua senha de Wi-Fi
Dentro da função setup () verificamos se o ESP consegue se conectar ao Wi-Fi, caso contrário ficará esperando para sempre apenas imprimindo “Conectando..” no monitor serial.
while (WiFi.status ()! = WL_CONNECTED) {// Aguarde até que o Wi-Fi seja conectado delay (1000); Serial.print ("Conectando.."); // Imprimir Conectando.. até que a conexão seja estabelecida }
A próxima etapa é a etapa muito importante. Se a conexão Wi-Fi for bem-sucedida, temos que invocar uma solicitação http get para ler o arquivo JSON da Internet. Neste tutorial, estou usando a API fornecida por wunderground.com. Portanto, se você está planejando usar o mesmo, pode acessar o link e se inscrever para a chave de API gratuita ou usar qualquer API de sua escolha. Depois de finalizar sua API, você terá um link parecido com este abaixo
Observação: eu alterei a chave API deste link, então isso não funcionará. Mantenha sua chave API protegida e não compartilhe.
Minha API aqui é usada para obter os dados meteorológicos de Chennai. Você pode usar qualquer API. Mas quando você carrega a API em qualquer navegador, ela deve retornar um arquivo JSON. Por exemplo, minha API retorna o seguinte arquivo JSON
O seu pode retornar um arquivo com dados diferentes. Podemos verificar se este arquivo JSON também é recebido por nosso ESP8266 lendo-o e imprimindo JSON em nosso monitor serial usando as seguintes linhas
int httpCode = http.GET (); // passa uma solicitação get if (httpCode> 0) {// Verifique o código de retorno // carga útil = http.getString (); // Armazena o valor em Varibale Payload para depuração // Serial.println (payload); // Imprime a carga útil para depuração, caso contrário, comente ambas as linhas
Comentei essas linhas, pois são necessárias apenas para teste. Depois de garantir que o ESP8266 seja capaz de obter os dados JSON, é hora de formular os dados. Como você pode ver, esses dados são enormes e a maioria dos valores são inúteis, exceto aqueles que são necessários para nós, como data, hora, temperatura e umidade.
Portanto, usamos a biblioteca JSON Arduino para separar os valores necessários para nós e armazená-los em uma variável. Isso é possível porque os valores no arquivo JSON são atribuídos como pares de valor de nome. Portanto, este nome é uma string que conterá o valor necessário para nós.
Para fazer isso, temos que mover para um site que irá analisar o arquivo JSON e nos fornecer o código do Arduino. Sim, é tão fácil assim. Vá para https://arduinojson.org/assistant/, cole o arquivo JSON que carregamos em nosso navegador e pressione Enter. Quando feito o meu parecia algo assim abaixo
Role um pouco para baixo para ver o programa de fraseamento que é criado automaticamente
Tudo o que você precisa fazer é selecionar a variável desejada, copiá-la e colá-la em seu IDE Arduino, como fiz aqui
/ * Phrasing Data using the JSON librarey * / // Use https://arduinojson.org/assistant/ para obter os valores de fraseado para sua string JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * End of Phrasing Data * / // Endereça o valor sin para as variáveis desejadas JsonObject & current_observation = root; // em current_observation JsonObject & current_observation_observation_location = current_observation; // sob observação_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // obter os detials da localização const char * current_observation_local_time_rfc822 = current_observation; // Hora local // obtém a hora local const char * current_observation_temperature_string = current_observation; // "90.7 F (32.6 C)" // obtém o valor da temperatura const char * current_observation_relative_humidity = current_observation; // "73%" // obtém o valor de umidade
Acabei de copiar as variáveis current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string e current_observation_relative_humidity . Uma vez que estamos planejando exibir apenas esses quatro dados em nossa tela LCD.
Finalmente, obtivemos os dados de que necessitamos da Internet e os salvamos como uma variável que podemos usar com facilidade. Para enviar esses dados para o Arduino, basta escrevê-los serialmente através do monitor Serial. As linhas a seguir farão exatamente o mesmo
// Imprime as variáveis através do monitor serial Serial.print (current_observation_station_id); // envia os detalhes da localização para o Arduino delay (100); // atraso de estabilidade Serial.print (current_observation_local_time_rfc822); // envia os detalhes da hora local para o Arduino delay (100); // atraso de estabilidade Serial.print (current_observation_temperature_string); // envia os detalhes da temperatura para o Arduino delay (100); // atraso de estabilidade Serial.print (current_observation_relative_humidity); // envia os detalhes de umidade para o Arduino delay (100); // atraso de estabilidade
Observe que usei Serial.print () e não Serial.println (), pois o comando Serial.println () anexará a / n e / r junto com os dados que não são necessários para nós. Também adicionamos um atraso de 10 segundos para que o ESP envie esses valores apenas em um intervalo de 10 segundos para o Arduino.
Conectando ESP8266-01 com Arduino:
Até agora, programamos nosso ESP8266-01 para ler os dados necessários da Internet em um intervalo de 10 segundos e enviá-los em série. Agora temos que fazer a interface do ESP com o Arduino para que possamos ler esses dados seriais. Também temos que adicionar uma tela LCD 16 * 2 ao Arduino para que possamos exibir os dados recebidos do módulo ESP8266. O diagrama de circuito para fazer a interface do módulo ESP8266 com o Arduino é mostrado abaixo
Certifique-se de que o pino GPIO_0 seja deixado livre, ligue o módulo apenas com o pino de 3,3 V do Arduino e pressione o botão para colocar o módulo ESP no módulo operacional. Agora, o programa que carregamos no ESP deve ter começado a funcionar e o módulo deve ser enviado os dados via pino serial para o Arduino. Esses pinos seriais são conectados aos pinos número 6 e 7 no Arduino. Portanto, podemos usar a opção serial do software no Arduino para ler esses dados seriais dos pinos.
Programa Arduino e funcionamento:
O programa Arduino completo também é fornecido junto com o código ESP no final desta página. Você pode rolar para baixo para ver o programa ou ler mais se quiser entender o programa.
O programa de interface é bem simples, basta usar a biblioteca serial do software para ler os dados dos pinos 6 e 7 e exibi-los na tela LCD. Como os dados recebidos estão em formato de string, temos que usar a opção substring para quebrar a carga útil de acordo com nosso requisito ou até mesmo convertê-la em inteiro, se necessário. Portanto, começamos definindo os pinos aos quais o LCD está conectado.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pinos aos quais o LCD está conectado LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Uma vez que tenha ligado os pinos Rx e Tx de ESP8266 com a 6 e 7 ª pino de Arduino temos que inicializar a série Software para os pinos para que possamos receber os dados de série a partir deles.Eu têm nomes isso como ESP_Serial, você pode nomeie-os como quiser
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Dentro da função setup () inicializamos a comunicação serial para o monitor Serial e também para o serial do software. Se você puder se lembrar, fizemos o programa ESP para se comunicar a uma taxa de 9600 bauds, então temos que usar a mesma taxa de baud para a porta serial do software. Também exibimos uma pequena mensagem de introdução no LCD por 2 segundos.
configuração vazia () {lcd.begin (16, 2); // Estamos usando um display LCD 16 * 2 lcd.print ("Arduino & ESP"); // Exibe uma mensagem de introdução Serial.begin (115200); ESP_Serial.begin (9600); atraso (2000); lcd.clear (); }
Dentro da função loop () principal, temos que verificar se o ESP8266 está enviando algo. Se for, então lemos a string de ESP8266 e a salvamos em uma variável chamada carga útil. A carga útil variável é do tipo String e conterá todas as informações enviadas do módulo ESP8266.
while (ESP_Serial.available ()> 0) {carga útil = ESP_Serial.readString ();
Agora temos que dividir essa string em pequenos pedaços para que possamos usá-los para nosso próprio propósito, neste caso temos que dividi-los para exibi-los na tela LCD. Isso pode ser feito facilmente usando a função substring no Arduino. Você tem que saber a posição de cada caractere para usar esta função substring . Você pode imprimir a carga útil no monitor serial para saber a posição dos caracteres e usá-los para categorizar as substrings conforme mostrado abaixo
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperatura = carga útil.substring (48, 54); Umidade = carga útil.substring (55, 60);
Agora posso ir em frente e usar essas variáveis para imprimi-las no monitor serial ou apenas imprimi-las no LCD. No entanto, imprimi-los no monitor serial nos ajudará a verificar se as substrings estão divididas corretamente. Em seguida, basta imprimi-los no display LCD usando as seguintes linhas
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (temperatura); lcd.setCursor (10, 1); lcd.print (Umidade);
Faça upload do programa para o Arduino e certifique-se de que as conexões sejam as mostradas no diagrama de circuito acima. Ajuste o contraste do display LCD até ver as coisas claramente. Você deve ver a mensagem de introdução no LCD e, após alguns segundos, os detalhes como data, hora, temperatura e umidade devem ser exibidos na tela LCD conforme mostrado abaixo.
Você também pode notar o led azul no ESP8266 piscando sempre que os dados chegam. Se você não puder ver isso, significa que o ESP não está no modo de programação, tente pressionar o botão Reiniciar e verifique as conexões.
Semelhante a isso, você pode usar qualquer API para obter quaisquer dados necessários da Internet e alimentá-los para o Arduino e o processo de seu trabalho com o Arduino. Existem toneladas de APIs disponíveis na internet e com todas elas você pode fazer um número ilimitado de projetos. Espero que você tenha entendido o projeto e gostado de construí-lo. Se você enfrentou algum problema, poste-os na seção de comentários abaixo ou em nossos fóruns.
Você pode encontrar todos os nossos projetos relacionados ao ESP8266 aqui.