PIC na IoT com ESP8266 e ThingSpeak

PIC na IoT

Introdução

 

O mundo dos sistemas embarcados vive uma verdadeira revolução: a Internet das Coisas. Hoje, a grande maioria dos projetos visa conectividade à Internet, seja para maior praticidade de monitoramento (para fins de manutenção de equipamentos remotamente) ou para maior interação com usuário final.

 

Seguindo nesta tendência, este artigo mostra como um microcontrolador Microchip PIC de 8 bits, em conjunto com um módulo ESP8266, pode publicar dados na internet, dando assim a possibilidade deles serem inseridos na IoT.

 

Sim, os bons e velhos microcontroladores de 8 bits não ficam de fora da Internet das Coisas!! Que tal PIC na IoT?

 

 

PIC na IoT: Detalhes do projeto

 

Neste projeto, um PIC18F4520, em conjunto com um módulo Wi-Fi ESP8266 ESP-01, é capaz de mandar um dado para a plataforma online ThingSpeak a cada 30 segundos. O dado em questão é um simples contador de 8 bits (0 a 255). Tal dado foi escolhido apenas a titulo de exemplo.

 

O projeto, no entanto, pode ser facilmente modificado para enviar qualquer tipo de dado para o ThingSpeak (como temperatura, por exemplo).

 

 

Materiais utilizados

 

Dentre o hardware utilizado, destacam-se:

  • Microcontrolador PIC18F4520: microcontrolador da linha PIC 8 bits com 32 KB de memória flash e 1 KB de memória RAM. Possui 36 I/O de propósito geral, oscilador interno e suporta, com clock externo, até 40MHz de clock;
  • ESP8266 ESP-01: módulo Wi-Fi de ótima relação custo/benefício para aplicações embarcadas. Destacam-se sua versatilidade (por trabalhar com as principais encriptações Wi-Fi e controle facilitado por comandos AT via UART) e dimensões físicas reduzidas;
  • LM1117T: trata-se de um regulador variável de tensão, ou seja, com base no circuito de ajuste montado, escolhe-se uma tensão de saída (desde que a diferença entre tensão de saída e entrada esteja dentro do drop-out de tensão do componente). Eu o utilizei pois, desta forma, posso garantir a tensão de alimentação do ESP8266 ESP-01 no range permitido.

 

 

Thingspeak e ESP8266: Como fazer?

 

O Thingspeak consiste em uma popular plataforma (grátis) para armazenamento de dados na web, exibindo os dados enviados e armazenados na forma de gráficos. A exibição é feita via navegador, sendo possível, então, visualizar as informações a partir de qualquer dispositivo que possui acesso à Internet e navegador disponíveis. Considerando sua utilidade, esta é uma ferramenta muito boa no mundo da Internet das Coisas. 

 

Os dados são organizados no Thingspeak na forma de canais. Ou seja, é "forçada" uma categorização dos dados, o que acaba sendo muito benéfico quando o número de informações é grande.

 

O envio de dados ao Thingspeak é feito via requisição HTTP (seguro ou não), sendo que nesta requisição um dos parâmetros passados é uma chave única (vinculada ao canal do ThingSpeak desejado para enviar as informações). É importante também ressaltar que o intervalo mínimo entre dois envios é de 15 segundos (envios feitos em intervalos menores serão descartados). 

 

Portanto, para o ESP8266 enviar dados ao ThingSpeak, é necessário, basicamente:

  1. configurar o módulo no modo estação;
  2. se conectar a um roteador com acesso à rede, permitir múltiplas conexões (algo necessário para fazer uma conexão e requisição HTTP no ESP8266);
  3. abrir uma conexão http com o ThingSpeak;
  4. informar quantos bytes serão enviados na requisição e, finalmente;
  5. enviar a requisição HTTP.

 

É importante ressaltar que a conexão HTTP é automaticamente fechada logo após a requisição, logo é preciso reabrí-la no próximo envio.

 

Em forma de diagrama, temos a representação na figura 1.

 

PIC na IoT: Diagrama de envio de dados ao ThingSpeak com a ESP8266
Figura 1 - Diagrama de envio de dados ao ThingSpeak com a ESP8266

 

IMPORTANTE:

  1. Quando for enviar os comandos AT equivalentes aos do diagrama, não se deve esquecer o \r\n (bytes 0x0d e 0x0a) ao final da string. Sem isso, o ESP8266 não "entende" o fim do comando;
  2. Ao informar o número de bytes a ser enviado na requisição, o terminador de string (\r\n, conforme mostrado na observação anterior) é considerado neste número / faz parte do tamanho informado.

 

 

Projeto

 

O projeto (hardware e software) podem ser vistos abaixo:

 

a) Hardware

 

Todo o circuito (PIC e ESP8266) está alimentado em 3,3V (para poupar divisor resistivo no RX do ESP8266). O circuito esquemático está na figura 2. 

 

PIC na IoT: Circuito esquemático - PIC e ESP8266
Figura 2 - Circuito esquemático - PIC e ESP8266

 

b) Software

 

O projeto feito para o PIC foi escrito em linguagem C e compilado no compilador CCS. Porém, este projeto pode ser facilmente portado para ser compilado em qualquer compilador PIC.

 

Neste caso, foi fixada a taxa de um envio ao ThingSpeak a cada 30 segundos (taxa facilmente alterada no arquivo .h do projeto).

 

Enfim, vamos ao código! Abaixo, o arquivo .c do projeto:

 

 

E o header (arquivo .h):

 

 

Você pode baixar o código completo no GitHub 

 

 

Resultado

 

Como resultado, segue uma figura (figura 3) do gráfico gerado pelo ThingSpeak (dos dados enviados pelo PIC). Observe que nela já visei uma aplicação prática para o projeto: uma catraca eletrônica (contador de pessoas que passaram por uma determinada área). 

 

PIC na IoT: Gráfico ThingSpeak (dos dados enviados pelo PIC)
Figura 3 - Gráfico ThingSpeak (dos dados enviados pelo PIC)

 

 

Conclusão

 

Este artigo mostrou como um microcontrolador de 8 bits (no caso, um PIC 18F4520), com apenas de uma porta serial e ligado a um módulo Wi-Fi ESP8266 ESP-01, pode publicar dados na IoT (mais precisamente, na plataforma ThingSpeak). Com isso, mostra-se que os bons e velhos 8 bits podem sim estar na onda da IoT, dando possibilidade de criação de inúmeras aplicações e produtos.

 

 

Referências

 

  1. Tutorial: IoT Datalogger with ESP8266 WiFi Module and FRDM-KL25Z
  2. Artigo de Pedro Minatel sobre comandos AT no módulo ESP8266 ESP-01
  3. Artigo de André Curvello sobre módulo ESP8266 ESP-01
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Pedro Bertoleti
Sou engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP) e trabalho com Android embarcado em Campinas-SP. Curioso e viciado em tecnologia, sempre busco me aprimorar na área de sistemas embarcados (modalidades bare-metal, RTOS, Linux embarcado e Android embarcado). Para mais informações, acesse minha página no Facebook:https://www.facebook.com/pbertoleti

43
Deixe um comentário

avatar
 
22 Comment threads
21 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
22 Comment authors
GersonAgathaRoberto AlbrechtCiro PeixotoFabiano Ferreira Saldanha Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Gerson
Visitante
Gerson

Só pra deixar claro eu coloquei a chave de acesso que não apareceu na mensagem anterior. O código é: printf("GET /update?key=&field1=%d&field2=%d\r\n\0",intUmidade,intTemperatura);

Gerson
Visitante
Gerson

Ok senhores, resolvi meu problema aqui, o código está correto, meu erro era em outra parte do código.

Gerson
Visitante
Gerson

Boa noite senhores, estou tentando enviar dados a dois fields em um mesmo canal no ThingSpeak mas não estou obtendo êxito, o código que estou utilizando é printf("GET /update?key=&field1=%d&field2=%d\r\n\0",Umidade,Temperatura); Alguém já fez isso e pode me dar uma ajuda? Desde já agradeço.

Yudhistira Guerrero Miranda
Visitante
Yudhistira Guerrero Miranda

Olá amigo.
É um excelente projeto e explica-a excelente, apenas realmente, em parte, como definir Thingspeak estou deixou uma grande lacuna e não sei como você conseguiu fazer para dar-lhe o gráfico mostrando resultados. Por favor, poderia me ajudar com uma explicação com um pouco mais detalhadamente sobre a parte de como configurar o programa para trabalhar com Thingspeak. Meu email é "[email protected]". De antemão eu gostaria de receber sua ajuda. Saudações!

Marcos
Visitante
Marcos

Olá Pedro Bertoleti,
Muito bom o seu projeto, estou fazendo exatamente isso para o meu TCC porém com o sensor DHT22 (sensor de temperatura e humidade).
Gostaria de saber se é possível utilizar o PIC 16F628A ou o 16F648A pois os dois também possuem portas TX e RX.

André Silva
Visitante
André Silva

Olá, Estou alterando a configuração da entrada AN0 para analógica da seguinte maneira:

SETUP_ADC_PORTS(AN0);
SET_ADC_CHANNEL(0);
delay_ms(10);
valor = read_adc();

Simulando no Proteus tudo funciona normalmente, mas ao compilar no PIC o programa deixa de enviar os dados para o lot.
Será que o problema está nesta configuração?

Caio Silva
Visitante
Caio Silva

Parabéns pelo ótimo trabalho pedro!
Para utilizar este código no PIC 18F4550, preciso mudar algo além do arquivo header #include ?

Alan Siqueira Maia
Visitante
Alan Siqueira Maia

Meu caro você consegui fazer os envios com o PIC 18F4550?

Caio Silva
Visitante
Caio Silva

Não consegui ainda.. Tentei até com o arduino q aparentemente é mais fácil, mas também n tive sucesso.. To desconfiando q é algum problema com o firmware do meu módulo

Danilo Flavio
Visitante
Danilo Flavio

Olá tem como eu enviar um dado para um site através da comunicação TCP? se sim como eu faço isso?

Danilo Flavio
Visitante
Danilo Flavio

Olá Pedro Bertoleti, Teria como você me passar o código inteiro? quero testar algumas coisas para meu projeto. [email protected]

Adriane Rodange
Visitante
Adriane Rodange

Adorei o post! era exatemente que estava procurando pro meu projeto.POderia me passar o código? Estou com dificuldade na configuração do esp. [email protected] Obrigada

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

Olá Adriane, tudo bem? O texto foi atualizado com o link para download do código. Obrigado!

Ruben P
Visitante
Ruben Guirão Pires

Bom dia, eu estou fazendo um teste com esse componentes para a aula e fiquei com uma dúvida nessa programação C. Eu estou usando o programa microC for pic e ao utilizar essa programação todos os dados que começam com # dão erros. Isso é devido a alguma biblioteca que deve ser baixada ou fiz algo errado? E há dois arquivos header sendo incluídos, eu entendo que você disponibilizou uma das programações header mas ela é pertinente a qual das instruções? #include ou #include "pic_esp8266.h"? Se não for muito incomodo, seria possível enviar o projeto pro meu email para que… Leia mais »

Ruben P
Visitante
Ruben Guirão Pires

1- Ok, pesquisando aqui as partes que começam com # são específicas do CCS e devem ser alteradas para funcionar no microC. Só nao achei ainda como. Alguma dica aqui?

2- Um dos headers é o principal e o outro para esconder informações mais sensíveis?

http://stackoverflow.com/questions/18454761/multiple-header-files-and-function-prototypes-in-c

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

Olá Ruben, tudo bem? O texto foi atualizado com o link para download do código. Obrigado!