No tutorial, é utilizado um display de 7 segmentos para apresentar o número de emails não lidos e pode-se também escolher fazer a conexão na rede via wi-fi ou via cabo.
Alterei algumas partes do código original para que eu pudesse utilizar um display lcd ao invés de um display de 7 segmentos para, quem sabe, futuramente incrementar as funcionalidades deste código.
Os componentes necessários para este tutorial são:
- 1x Placa Intel® Galileo
- 1x Display LCD 16x2
- 1x potenciômetro
- 1x Cabo de rede
- 1x Cartão µSD
O diagrama da montagem com o LCD está apresentado na imagem a seguir:
Sugestão de ligação do display LCD |
A montagem acima é da seguinte forma:
- Conectores DB4-DB7 do display ligados nos pinos A2-A5 da Galileo
- Conector RS do display ligado no pino A0 da Galileo
- Conector E (Enable) do display ligado no pino A1 da Galileo
- Conector V0 do display ligado no conector central do potenciômetro
- Conector VSS e conector R/W do display ligados em um conector não-central do potenciômetro curto-circuitado com Gnd da Galileo
- Conector VDD ligado ao conector restante do potenciômetro curto-circuitado com o pino de 5V da Galileo
Com esta ligação será possível apresentar no display a contagem de emails não lidos e qualquer mensagem que queiramos apresentar. O potenciômetro tem a função de controlar o 'alfa' do display.
Para realizar o tutorial é necessário que a Galileo esteja com o firmware atualizado e com o sistema linux instalado no cartão µSD, de acordo com os passos 3 e 4 destas recomendações.
Inclua o seguinte código em um arquivo python na raiz do cartão µSD que tem o linux instalado com o nome de pyMailCheck.py:
# pyMailCheck.py - Loga no seu gmail e imprime o numero de emails nao lidos. # Coloque este arquivo na raiz do cartao SD da Galileo. import imaplib # Usado para conectar em um servidor IMAP4. obj = imaplib.IMAP4_SSL('imap.gmail.com', '993') # Conecta em um servidor IMAP4 com SSL, porta 993 obj.login('my_email_address@gmail.com','myPassword') # Identifica o usuário e senha do cliente obj.select() # Seleciona o 'INBOX' (parametro default) # Procura na caixa de email o charset no (None), criterio:"UnSeen" (nao visto). Retornara uma tupla, pega a segunda parte, # divide cada string em uma lista e retorna o tamanho desta lista: print len(obj.search(None,'UnSeen')[1][0].split())
Altere o código acima colocando suas informações de e-mail e insira o cartão SD no slot da Galileo, ligue-a na fonte de energia e em seguida ao computador para fazer upload do código a seguir:
/* Galileo Email Checker by: Jim Lindblom SparkFun Electronics date: January 7, 2013 license: Beerware. Please use, reuse, and modify this code. If you find it useful, you can buy me a beer when we meet. This code connects a Galileo to Ethernet. Then runs a Python script - https://gist.github.com/jimblom/8292444#file-pymailcheck-py - that lives on the Galileo's SD card to check how many unread emails you have. That number is displayed on an OpenSegment Shield - https://www.sparkfun.com/products/11846 - which is controlled over SPI. Editado para funcionar com uma shield LCD por Rodrigo Monteiro */ ///////////////////////////// // Inclusao de bibliotecas // //////////////////////////// //Biblioteca do LCD #include <LiquidCrystal.h> #include <SD.h> // Biblioteca SD para ler o arquivo temporario // onde o script em python armazena o contador de emails nao lidos. #include <Ethernet.h> // Biblioteca Ethernet // Inicializa a biblioteca com o numero dos pinos de interface LiquidCrystal lcd(A0, A1, A2,A3, A4, A5); //////////////////////////// // Definicoes de Ethernet // /////////////////////////// byte mac[] = {0x6A, 0x11, 0x1l, 0x30, 0x12, 0x34}; /////////////////////////// // Definicoes de pinagem // ////////////////////////// const int STAT_LED = 13; // The Galileo's status LED on pin 13 ///////////////////////////////////////////// // Variaveis globais de checagem de emails // ///////////////////////////////////////////// const int emailUpdateRate = 10000; // Taxa de update em ms (10 s) long emailLastMillis = 0; // Armazena o ultimo instante de checagem de email int emailCount = 0; // Armazena a ultima contagem de email // setup() inicializa o lcd, o SD card, e o Ethernet // Se bem sucedido, o led de status se ligara. void setup() { pinMode(STAT_LED, OUTPUT); digitalWrite(STAT_LED, LOW); Serial.begin(9600); // Monitor Serial para debug // Declara o numero de linhas e colunas do LCD: lcd.begin(16, 2); lcd.print("Emails nao lidos"); lcd.setCursor(1, 1); initSDCard(); // Inicializa a classe SD if (initEthernet() == 1) // Se a Ethernet conectar, acende o LED de status digitalWrite(STAT_LED, HIGH); else { // Se a conexao Ethernet falhar, imprima erro, loop infinito //SPIWriteString("----", 4); lcd.print("Erro de rede"); lcd.setCursor(1, 1); while (1) ; } } // loop() checa pelo contador de emails nao lidos a cada emailUpdateRate // mili segundos. Se o contador mudou, atualiza o display. void loop() { // Apenas cheque o email se passou emailUpdateRate ms if (millis() > emailLastMillis + emailUpdateRate) { emailLastMillis = millis(); // atualiza emailLastMillis // Obtem o contador de emails nao lidos e armazena em uma variavel temporaria int tempCount = getEmailCount(); Serial.print("Voce tem "); Serial.print(tempCount); Serial.println(" emails nao lidos."); if (tempCount != emailCount) // Se e um valor diferente, atualize { // Faca isso para evitar piscar o mesmo numero emailCount = tempCount; // atualize a variavel emailCount lcd.print(emailCount); // imprima o contador de nao lidos lcd.setCursor(1, 14); } } // Bit de protecao no caso de overrun de millis: if (millis() < emailLastMillis) emailLastMillis = 0; } // getEmailCount executa o script pyMail.py , e le a saida. // Ira retornar o valor impresso pelo script python. int getEmailCount() { int digits = 0; int temp[10]; int emailCnt = 0; // Envia uma chamada de sistema para executar o script python e rotear a // saida desse script para um arquivo. system("python /media/realroot/pyMailCheck.py > /media/realroot/emails"); File emailsFile = SD.open("emails"); // Abre email para leitura // le dos emails ate que se atinja o final ou uma nova linha while ((emailsFile.peek() != '\n') && (emailsFile.available())) temp[digits++] = emailsFile.read() - 48; // Converte de ASCII para um numero emailsFile.close(); // fecha o arquivo de email system("rm /media/realroot/emails"); // remove o arquivo de emails // Transforma um numero individual em um inteiro de digito simples for (int i=0; i<digits; i++) emailCnt += temp[i] * pow(10, digits - 1 - i); return emailCnt; } // initSDCard() inicia a classe SD void initSDCard() { SD.begin(); } uint8_t initEthernet() { if (Ethernet.begin(mac) == 0) return 0; else return 1; }
Ligue o cabo de rede na porta ethernet da placa Galileo e em um roteador com internet e após alguns segundos pode-se verificar a contagem de emails não lidos:
Verificador funcionando |
Nenhum comentário:
Postar um comentário