Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Transmitindo texto para um LCD com Arduino via web, Esquemas de Tecnologia Eletrônica

Como Transmitindo texto para um LCD com Arduino via web, utilizando um web site

Tipologia: Esquemas

2020

Compartilhado em 30/06/2020

zeduca
zeduca 🇧🇷

1 documento

1 / 11

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Transmitindo texto para um LCD com Arduino através de uma Web Page
Introdução
Neste artigo, iremos configurar um Arduino equipado com um Shield Ethernet como
um servidor Web que hospeda uma página em HTML dentro do cartão SD. Nesta
página que será exibida com o endereço IP configurado, existem dois campos para
entradas de texto. Tendo em vista que utilizaremos uma tela LCD de 16 colunas por 2
linhas, cada campo de texto, será enviado para cada linha do LCD respectivamente,
logo assim que digitarmos o textos nestes campos e clicarmos no botão de envio.
São necessários um Arduino Uno, um shield Ethernet e uma tela LCD 2 × 16 para este
tutorial, ou hardware compatível similar.
Hardware utilizado no projeto
Arduino Uno
Módulo Ethernet Shield
Cartão micro SD acima de 1 Gb de preferência
Tela LCD 16 x 2
Potenciômetro de 5 ou 10 KΩ para ajuste de contraste
Protoboard
Fios Jumper
Cabo USB padrão
Cabo patch Ethernet
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Transmitindo texto para um LCD com Arduino via web e outras Esquemas em PDF para Tecnologia Eletrônica, somente na Docsity!

Transmitindo texto para um LCD com Arduino através de uma Web Page

Introdução

Neste artigo, iremos configurar um Arduino equipado com um Shield Ethernet como um servidor Web que hospeda uma página em HTML dentro do cartão SD. Nesta página que será exibida com o endereço IP configurado, existem dois campos para entradas de texto. Tendo em vista que utilizaremos uma tela LCD de 16 colunas por 2 linhas, cada campo de texto, será enviado para cada linha do LCD respectivamente, logo assim que digitarmos o textos nestes campos e clicarmos no botão de envio. São necessários um Arduino Uno, um shield Ethernet e uma tela LCD 2 × 16 para este tutorial, ou hardware compatível similar.

Hardware utilizado no projeto

 Arduino Uno  Módulo Ethernet Shield  Cartão micro SD acima de 1 Gb de preferência  Tela LCD 16 x 2  Potenciômetro de 5 ou 10 KΩ para ajuste de contraste  Protoboard  Fios Jumper  Cabo USB padrão  Cabo patch Ethernet

Montagem do circuito

O Shield Ethernet deve ser encaixado com cuidado no Arduino Uno, e o LCD e o potenciômetro na protoboard, de acordo com a ilustração à seguir:

Entendendo o código

Primeiramente vamos falar do código de programação para o Arduino. No início do código, são incluídas as bibliotecas referentes à comunicação SPI, a bilioteca para funcionamento do Shield Ethernet, para as funções do cartão SD e finalmente para o funcionamento do display de cristal líquido. Criamos variáveis para o armazenamento de caracteres digitados para a transmissão, definindo o tamanho de buffer. Logo em seguida, devemos configurar os parâmetros para a internet, como por exemplo o endereço IP, que neste caso foi definido como 192.168.0.20, mas você pode configurar de acordo com a faixa de IP da sua rede local. Quando o Shield Ethernet estiver conectado à rede, abra um navegador da Web e navegue até o endereço IP definido no sketch do Arduino. Se tudo estiver configurado corretamente, a página da web hospedada pelo Arduino aparecerá no navegador da web. Digite o texto nos campos de texto a serem enviados para as linhas 1 e 2 do LCD e clique no botão na página da web. A comunicação usa o AJAX para enviar ou receber dados entre o servidor da web armazenado no cartão SD e a página da Web, através de pacotes XML. Mas o que é AJAX? AJAX significa Asynchronous JavaScript and XML, ou JavaScript e XML Assíncronos, em português. É uma técnica voltado para a web que permite que aplicações trabalhem de modo assíncrono, processando qualquer requisição ao servidor em segundo plano. Em outras palavras, o JavaScript e o XML trabalham de forma assíncrona no AJAX, possibilitando que qualquer aplicação que use AJAX pode enviar e receber dados do servidor sem precisar recarregar a página inteira. O XML ( Extensible Markup Language , é uma variação de linguagem no estilo do HTML, sendo que ao invés de somente exibir dados, o XML os armazena e transmite.

void setup() { // desabilita Ethernet chip pinMode(10, OUTPUT); digitalWrite(10, HIGH); Serial.begin(115200); // para depuração lcd.begin(16, 2); // Menssagem no LCD lcd.print(F("Inicializando")); // initialize SD card Serial.println("Inicializando SD card..."); if (!SD.begin(4)) { Serial.println("ERRO - a inicialização do SD card falhou!"); lcd.print(F("SD falhou")); return; // init failed } Serial.println("SUCCESSO - SD card inicializado."); // check for index.htm file if (!SD.exists("index.htm")) { Serial.println("ERRO - arquivo index.htm não encontrado!"); return; // can't find index file } Serial.println("SUCCESSO - arquivo index.htm encontrado."); Ethernet.begin(mac, ip); // inicializa o dispositivo Ethernet server.begin(); // começa a monitorar conexão de clientes // Mensagem de inicialização concluída e exibição do endereço IP lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("Conectado.")); lcd.setCursor(0, 1); lcd.print(ip); } void loop() { EthernetClient cliente = server.available(); // tenta obter cliente if (cliente) { // Verifica se obteve cliente boolean currentLineIsBlank = true;

while (cliente.connected()) { if (cliente.available()) { // dados do cliente disponíveis para leitura char c = cliente.read(); // ler 1 byte (caractere) do cliente // limita o tamanho da solicitação HTTP recebida armazenada // buffer: primeira parte da solicitação HTTP na matriz HTTP_req (string) // deixa o último elemento na matriz como 0 para a sequência de terminação nula (REQ_BUF_SZ - 1) if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // salva o caractere de solicitação HTTP req_index++; } // a última linha da solicitação do cliente está em branco e termina com \ n // responde ao cliente somente após a última linha recebida if (c == '\n' && currentLineIsBlank) { // envia um cabeçalho de resposta http padrão cliente.println("HTTP/1.1 200 OK"); // o restante do cabeçalho segue abaixo, dependendo se // página da web ou página XML é solicitada // Solicitação Ajax - envia arquivo XML if (StrContains(HTTP_req, "ajax_inputs")) { // envia o restante do cabeçalho HTTP cliente.println("Content-Type: text/xml"); cliente.println("Connection: keep- alive"); cliente.println(); // imprime o texto recebido no LCD, se encontrado if (GetLcdText(lcd_buf_1, lcd_buf_2, LCD_BUF_SZ)) { // lcd_buf_1 e lcd_buf_2 agora contêm o texto da página da web // escreve o texto recebido no LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print(lcd_buf_1); lcd.setCursor(0, 1); lcd.print(lcd_buf_2); }

boolean GetLcdText(char *line1, char *line2, int len) { boolean got_text = false; // sinalizador de texto recebido char *str_begin; // ponteiro para o início do texto char *str_end; // ponteiro para o fim do texto int str_len = 0; int txt_index = 0; char *current_line; current_line = line1; // obtem o ponteiro para o começo do texto str_begin = strstr(HTTP_req, "&L1="); for (int j = 0; j < 2; j++) { // cria 2 linhas de texto if (str_begin != NULL) { str_begin = strstr(str_begin, "="); // skip to the = str_begin += 1; // skip over the = str_end = strstr(str_begin, "&"); if (str_end != NULL) { str_end[0] = 0; // termina a string str_len = strlen(str_begin); // copia a string para o buffer e substitui %20 pelo espaço '' for (int i = 0; i < str_len; i++) { if (str_begin[i] != '%') { if (str_begin[i] == 0) { // termina a string break; } else { current_line[txt_index++] = str_begin[i]; if (txt_index >= (len - 1)) { // mantém a string de saída dentro dos limites break; } } } else { // substitui % 20 por um espaço if ((str_begin[i + 1] == '2') && (str_begin[i + 2] == '0')) { current_line[txt_index++] = ' '; i += 2; if (txt_index >= (len - 1)) {

// mantém a string de saída dentro dos limites break; } } } } // fim do loop i // termina a string current_line[txt_index] = 0; if (j == 0) { // obteve a primeira linha do texto, agora obtém a segunda linha str_begin = strstr(&str_end[1], "L2="); current_line = line2; txt_index = 0; } got_text = true; } } } // fim do loop j return got_text; } // define cada elemento de str como 0 (limpa a matriz) void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str[i] = 0; } } // procura a string sfind na string str // retorna 1 se a sequência for encontrada // retorna 0 se a sequência não for encontrada char StrContains(char *str, char *sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1;

Código de programação da Página Web (index.htm HTML e

JavaScript)

O código HTML e JavaScript abaixo deve ser copiado para um arquivo chamado index.htm e armazenado no cartão micro SD.

PROTOTIPANDO&nb sp

Transmitindo texto para Arduino via Web - web2lcd

Digite o texto para o LCD Arduino:




Pode ser necessário um leitor ou adaptador para o cartão micro SD para copiar o arquivo HTML de um PC para o cartão micro SD. Antes de inserir o cartão micro SD no soquete do shield Ethernet, copie o arquivo Index.html no cartão SD. Finalmente, ligue o Arduino a partir do cabo USB e carregue o sketch. Não esqueça de definir o endereço IP no sketch para se adequar à sua própria rede. A aparência da página web será esta: **Conclusão** Utilizando o método AJAX e XML, é possível transmitir texto de uma página da web para um LCD Arduino. Este projeto pode ser útil na construção de letreiros digitais, painéis LCD ou similares, que podem ser utilizados por exemplo em vitrines de comércio ou eventos, com a praticidade do envio da informação a ser exibida, enfim, numa infinidade de aplicações que variam de acordo com a sua criatividade. Espero que este projeto tenha contribuído para seus estudos, se você tiver alguma dúvida ou sugestão quanto a este projeto, por favor, não hesite em deixar um comentário abaixo.