43 Comentários

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
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Hardware » PIC na IoT com ESP8266 e ThingSpeak
Comentários:
Notificações
Notificar
guest
43 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gerson
Gerson
07/05/2018 18:47

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
Gerson
Reply to  Gerson
08/05/2018 20:51

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

Gerson
Gerson
07/05/2018 18:37

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.

Roberto Albrecht
Roberto Albrecht
15/02/2016 02:37

oi estou fazendo um projetinho com este modulo para utilizar em um cicuito e rodar em protocolo dmx para iluminação so que em 250 kbauds , voces ja testaram nesta velocidade? seria um transmisor para varios receptores, abraços

Ciro Peixoto
Ciro Peixoto
16/11/2015 09:37

Beleza Pedro! Bom artigo que desmistifica um pouco o uso do Arduino (parece que só existe ele) O Arduino na verdade, é só a junção inteligente de duas plataformas independentes: AVR-GCC http://www.nongnu.org/avr-libc/ e o AVRdude http://www.ladyada.net/learn/avr/avrdude.html O editor é bem "ruimzinho" (pode-se usar qualquer outro e no simples copiar-colar resolver o problema), mas há de se aplaudir a compactação do programa em duas funções que elimina heades de configuração básica e prototypes (o que tambem não é nenhum mistério) mas permite esconder uma sintaxe nebulosa de quem esta começando a querer fazer algo com microprocessador (é a parte que mais… Leia mais »

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Ciro Peixoto
16/11/2015 19:50

Ciro, muito obrigado!

Realmente, Arduino é um belo start para o mundo dos sistemas embarcados, mas é preciso que a galera saiba que há mais além disso. Espero ter contribuído positivamente para a visão de que é sim possível facilmente ir além do Arduino.

Novamente, obrigado pelo comentário e opinião!

Fabiano Ferreira Saldanha
Fabiano Ferreira Saldanha
16/11/2015 08:28

Ótimo artigo! estava com um problema em desenvolvimento, e eu precisava justamente achar uma pesquisa como esta...muito obrigado Pedro Bertoleti, deviam existir mais pessoas como você que se dedicam a compartilhar seus conhecimentos...Parabéns !

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Fabiano Ferreira Saldanha
16/11/2015 19:52

Muito obrigado Fabiano!

Fico feliz em te-lo ajudado de alguma forma.
Quanto a compartilhar conhecimentos, acredito que conhecimento é uma das poucas coisas que só se multiplica ao dividir com os outros!

Paulo Tovo Filho Tovo Filho
Paulo FIlho
15/11/2015 14:23

Pedro, parabéns pelo artigo. Muito bacana alguém escrever algo sobre o ESP8266 que não envolva Arduino. Eu estou desenvolvendo um projeto com PIC18F4620 e resolvi usar este modulo ESP01 pelo custo e pelo que prometia fazer. Confesso que estou um pouco frustrado com este modulo pois estou tendo muitos problemas com ele. Primeiro, existe um monte de versões de firmware soltas pela internet e cada lugar fala para você usar uma versão diferente da outra. No próprio site da http://www.electrodragon.com, tem uma versão atualizada mas que apresenta alguns problemas. Eu simplesmente não consigo mudar o BAUDRATE do modulo, sempre retorna… Leia mais »

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Paulo FIlho
16/11/2015 19:57

Paulo, primeiramente, muito obrigado!

Esse problema eu não tive, porém desconfio do que possa ser. Qual o clock que você está utilizando (quantos MHz)? É um cristal ou oscilador interno?
Pergunto pois, dependendo do oscilador e da frequencia, há problemas em operar com baudrate de 115200 mesmo.

Além disso, como você está fazendo o envio e recepção de dados pela serial com o ESP8266? Está fazendo por interrupção ou poling? Mostre-me o seu código e eu ajudarei no que for possível.

Paulo Tovo Filho Tovo Filho
Paulo FIlho
Reply to  phfbertoleti
17/11/2015 20:08

Ola, Pedro! Obrigado pelo retorno! Eu estou usando um cristal externo de 10Mhz com PLL ligado... ou seja, o pic está rodando a 40Mhz. Eu desconfiei que a velocidade poderia estar influenciando no problema da comunicação e por isso, desliguei o PLL e estou rodando agora a 10Mhz. Eu testei a comunicação a 115200, 9600, 19200 porem não funcionou. O envio é simples, estou mandando um array de char conforme você fez aqui no post. (char EspMode[]="AT+CWMODE=2rn";). A recepção, estou tratando por interrupção. Eu fiz um teste rápido jumpeando o TX e RX do pic para testar o envio e… Leia mais »

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Paulo FIlho
17/11/2015 20:18

Quanto ao RX é dificil dizer se há algo errado, mas desconfio que o erro principal esteja na forma que voce está enviando. Como voce colocou o (0x00, terminador de string / array de char em linguagem C), voce poderia enviar simplesmente com um puts(EspMode). Inclusive, foi exatamente a forma que fiz no artigo.

Além disso, não recomendo nenhum tipo de espera para enviar os caracteres do comando AT (como você fez neste while(BusyUSART());.

Por hora eu mudaria isso e testaria. Teste isso por favor e me diga o que ocorreu.

Atenciosamente,
Pedro Bertoleti

Paulo Tovo Filho Tovo Filho
Paulo FIlho
Reply to  phfbertoleti
29/11/2015 16:54

Pedro, boa tarde. Desculpe pela demora no retorno. Eu não sou muito fã de trabalhar com comandos AT. Sua observação sobre a forma que estava enviando foi realmente interessante pois faz muito mais sentido eu enviar a string usando o Puts do que enviar caracter a caracter e controlar isso. O puts faz tudo isso pra mim. Outra observação foi a verificação do busyUsart pois isso estava gerando um atraso no envio da string e estava acionando a interrupção de RX com lixo. Fiz essas alterações porem além desses pontos, o principal problema estava no conversor de nível de tensão… Leia mais »

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Paulo FIlho
08/12/2015 20:13

Paulo, não há de que!

Fico feliz que consegui te ajudar de alguma forma.

Abraço

Caixeta
Caixeta
12/11/2015 16:37

Olá, vc disponibiliza o arquivo final do projeto? Se puder me enviar um .rar ficarei muito grato, meu e-mail é [email protected]

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Caixeta
13/11/2015 21:42

Rafael, acabei de enviar!

Rafael Paixão Buzzatto
Rafael Paixão Buzzatto
11/11/2015 08:51

Belo artigo. Muito prazeroso ver o bom e velho PIC indo também para a Nuvem. Apesar de no 'Arduino' ser tudo soo easy, é importante lembrarmos que aquele bom e velho PIC comprado por R$5,00 na St. Efigenia também pode atender a pequenas necessidades. Gastando pouco e fazendo muito!

Uma boa dica para a utilização do Thingspeak é o app Thingview. Da para colocar os canais e visualizar os dados pelo celular sem a necessidade de acessar pelo browser. O que claro, facilita e deixa a 'brincadeira' mais 'interessante'.

Parabens pelo artigo.

Pedro Henrique Bertoleti
phfbertoleti
Reply to  Rafael Paixão Buzzatto
11/11/2015 20:38

Rafael, muito obrigado! Você pegou o espírito do artigo: mostrar aos que estão iniciando que há alternativas ao Arduino. Na minha opinião, o Arduino é muito importante para a imersão no mundo dos embarcados, mas está muito longe de ser o limite. Há muita coisa melhor para ser explorada. Além disso, como mostra este artigo, hoje em dia, qualquer microcontrolador que tenha uma UART e um pouco de memória RAM (esse é um ponto fraco dos PICs: memória RAM é mínima) pode interagir com a Internet. Ou seja, os 8 bits ainda estão na ativa! P.S.: muito boa a dica… Leia mais »

Yudhistira Guerrero Miranda
Yudhistira Guerrero Miranda
03/07/2017 04:00

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
Marcos
14/04/2017 02:29

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.

Talvez você goste:

Séries

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link