Lag et Raspberry Pi Gmail Notification Light

I dette raske og enkle Raspberry Pi-prosjektet lærer du hvordan du lager et e-postvarsel i Gmail. Hvis du har uleste e-postmeldinger, slår et Python-skript lysdioden på.

I dette raske og enkle Raspberry Pi-prosjektet lærer du hvordan du lager et e-postvarsel i Gmail.  Hvis du har uleste e-postmeldinger, slår et Python-skript lysdioden på.
Annonse

I dette raske og enkle Raspberry Pi-prosjektet lærer du hvordan du lager et e-postvarsel i Gmail. Hvis du har uleste e-postmeldinger, slår et Python-skript lysdioden på. Dette prosjektet krever svært få deler, og kan fullføres på under en time! Du kan selvfølgelig kle din LED slik som du vil, for eksempel en MineCraft redstone-blokk eller et annet objekt 3D trykt i klart plast. Her er sluttresultatet:

Hva trenger du

  • 1 x Raspberry Pi
  • 1 x brødbrett
  • 1 x 220 ohm motstand
  • 1 x 5mm LED
  • 1 x Gmail-konto
  • Mann til kvinne koble opp ledninger

Enhver Raspberry Pi vil fungere for dette prosjektet - selv Pi Zero! Det er bare nødvendig med en GPIO-pin, og det er ikke spesielt CPU-intensiv. Hvis du har en Pi-startpakke, har du mer enn nok deler for å fullføre dette.

Bygg Plan

Gmail-Varsel-LED
Dette er et veldig enkelt prosjekt. En lysemitterende diode (LED) er koblet til en GPIO (General Purpose Input Output) Pin på Pi. Et veldig enkelt Python-script vil løpe regelmessig for å sjekke til uleste e-postmeldinger og slå LED-en på eller av tilsvarende.

Maskinvaren

Gmail-Notification-Circuit
Koble den positive anoden (lang bein) til lysdioden til motstanden og deretter til GPIO pin 14. Du kan bruke en hvilken som helst GPIO-pin, men se først på pinouten, da de varierer litt mellom modellene. Koble den negative katoden (kort ben med flatt kant) til bakken.

Pi Setup

Gmail-Notification-Pi
Gi din Pi et operativsystem (OS) installert, det er ikke mye setup nødvendig (ikke sikker på hva du trenger? Lær hvordan du installerer en her Slik installerer du et operativsystem til din bringebær Pi Slik installerer du et operativsystem til din bringebær Pi Slik får du et nytt OS installert og kjører på Pi - og hvordan du kloner ditt perfekte oppsett for rask katastrofeoppretting. Les mer). Åpne en ny terminal ( Topp venstre > meny > Tilbehør > Terminal ) på Pi (sjekk disse snarveiene for å lage en kodende ninja Lagre tid i Linux-terminalen med disse 20 snarveiene Lagre tid i Linux-terminalen med disse 20 snarveiene, enten du er " være en terminal nybegynner eller noen som kom over frykten for lenge siden, her er 20 snarveier som kan hjelpe deg med å overvinne noen av kommandolinjens plagsomhet. Les mer). Du må opprette en ny mappe for å lagre Python-skriptet. Skriv inn kommandoen Følg:

pwd 

Dette står for "Skriv ut arbeidskatalog", og viser deg hvilken mappe du er i (som standard er dette "/ home / pi"). Naviger inn i dokumentmappen og opprett en ny katalog (mappe) kalt "gmail_python":

 cd Documents/ sudo mkdir gmail_python 

Kommandoen "mkdir" står for "Make Directory". Alt som følger dette vil bli brukt til katalognavnet. Du bør nå kunne se katalogen din:

 ls 

Hvis du har gjort en feil, kan du enkelt fjerne denne katalogen:

 sudo rm -r gmail_python 

Naviger nå til den nye katalogen:

 cd gmail_python/ 

Opprett et nytt Python-skript:

 sudo nano check_messages.py 

Dette vil lage skriptet og åpne det klart for redigering i Nano. Du kan selvfølgelig bruke et annet program, som Vim, selv om denne tweet oppsummerer følelsene mine om det:

Jeg har brukt Vim i ca 2 år nå, for det meste fordi jeg ikke kan finne ut hvordan jeg skal avslutte det.

- Jeg er Devloper (@iamdevloper) 17. februar 2014

Spøk til side, sjekk ut denne sammenligningen mellom de to nano vs vim: Terminal Text Editors Sammenlignet nano vs vim: Terminal Text Editors Sammenlignet Selv om Linux har blitt lett nok til praktisk talt alle som bruker uten å måtte bruke Terminal, er det noen av oss som regelmessig bruker det eller er nysgjerrige på hvordan man kan kontrollere ... Les mer for en fullstendig sammenbrudd.

Trykk CTRL + X for å avslutte Nano og komme tilbake til terminalen.

Python Setup

Gmail-Notification-kode
Nå som Pi er satt opp, er det på tide å skrive koden. Dette prosjektet krever det utmerkede Gmail Python Library av Charlie Guo. Last ned biblioteket fra Github og hent innholdet. Innsiden bør det være en mappe som heter "gmail". Kopier hele denne mappen til "/ home / pi / Documents / gmail_python".

Bytt tilbake til kommandolinjen og åpne skriptet igjen (hvis du trykker på opp-tasten kan du bla gjennom dine tidligere inntatte kommandoer):

 sudo nano check_messages.py 

Legg merke til hvordan det er samme kommando du brukte til å lage filen - hvis en fil allerede eksisterer, vil den bli åpnet, ellers vil den bli opprettet. Her er Python:

 import gmail, RPi.GPIO as GPIO, time # import modules GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output g = gmail.login('[email protected]', 'YOUR PASSWORD') unread_messages = g.inbox().mail(unread=True) total_messages = 0 for message in unread_messages: total_messages += 1 if total_messages>0: # there are unread emails, turn light on GPIO.output(14, True) else: # there are no unread emails, turn light off GPIO.output(14, False) 

Du må skrive inn brukernavn og passord for at dette skal fungere. Du kan se full kildekoden for gmail-plugin-modulen hvis du vil. Hvis du ikke føler deg komfortabel med å gjøre dette (eller bruker tofaktorautentisering), må du koble til Gmail ved hjelp av OAuth2. Dette er litt involvert for denne opplæringen, men Google har en utmerket startguide.

La oss bryte ned koden. Først importeres noen moduler. Moduler i Python er små kodestykker skrevet for et formål (ligner på biblioteker i Arduino IDE). RPi.GPIO er en Pi-spesifikke modul for tilgang til GPIO, gmail er modulen du lastet ned tidligere, og tid er en modul innbygget i Python for å gi timingfunksjoner. Nå brukes "GPIO.setmode" og "GPIO.setup" for å fortelle Pi at pin 14 er en utgang, og at du vil bruke "Broadcom Pin Numbering" (mer informasjon om BCM).

Denne linjen kobles til din gmail-konto. Den lager et objekt som heter "g", og kaller loggingsmetoden til gmail-modulen som ble importert tidligere. Ikke glem å skrive inn gmail-e-postadressen og passordet ditt.

 g = gmail.login('[email protected]', 'YOUR PASSWORD') 

Hent nå alle uleste meldinger og lagre dem i en variabel som heter "uleste meldinger":

 unread_messages = g.inbox().mail(unread=True) 

Legg merke til hvordan «ulest = sann» er bestått som en parameter - du kan endre dette for å hente meldinger basert på forskjellige parametere, for eksempel avsender eller emne. Ta en titt på dokumentasjonen for Programmeringsgrensesnitt (API) for mye mer informasjon.

Deretter brukes en for sløyfe til å sløyfe over hver melding:

 for message in unread_messages: total_messages += 1 

For sløyfer er veldig nyttige. De gjentar en blokk med flere ganger, ofte med en litt annen verdi hver gang. Denne for sløyfen går over hver melding i uleste meldinger og øker "total_messages" -variabelen.

Til slutt brukes noen enkle "hvis" setninger. Hvis det er uleste meldinger, slår du på lysdioden, ellers slår du av hvis den er av.

Husk at Python er saksfølsom, og bruker hvit avstand. Hvis du har problemer med å få koden til å kjøre, prøv denne nettsiden. Lim inn Python i og trykk på "validere over python kode" -knappen. Dette skal da fortelle deg hvilke (hvis noen) feil er tilstede i Python.

Bytt til Terminal og kjør skriptet ditt:

 python check_messages.py 

Denne kommandoen kjører skriptet ditt. Prøv å endre noen e-postmeldinger manuelt i innboksen din til ulest status og kjør skriptet igjen - du bør se lysdioden slås av eller på for å gjenspeile innboksen din.

Cron Setup

Nå som skriptet fungerer, er det på tide å automatisere det. Den enkleste måten å gjøre dette på er gjennom en cron jobb. Cron-jobber brukes til å planlegge oppgaver og skript, for eksempel automatiserte sikkerhetskopier. Åpne Crontab (liste over planlagte oppgaver):

 crontab -e 

Hvis det ikke er noen planlagte oppgaver allerede, vil denne filen være tom (det kan inneholde dokumentasjon eller kommentarer, foran en "#"). Hvis du allerede har oppføringer her, kan du bare skrive inn den nye kommandoen på en ny linje:

 * * * * * python ~/pi/Documents/gmail_python/check_messages.py 

De fem stjernene ("* * * * *") angir hvor ofte du skal løse oppgaven (du kan få virkelig fancy her, f.eks. Hver andre onsdag klokken 2:00). Disse fem stjernene angir at oppgaven skal kjøres hvert minutt. Dette er det minste intervallet tillatt (lære mer om cronjob-planlegging Slik planlegger du oppgaver i Linux med Cron og Crontab Slik planlegger du oppgaver i Linux med Cron og Crontab Evnen til å automatisere oppgaver er en av de futuristiske teknologiene som allerede er her. Hver Linux Brukeren kan dra nytte av planleggingssystemet og brukeroppgaver, takket være cron, en brukervennlig bakgrunnstjeneste. Les mer). Deretter forteller "python" planleggeren å utføre skriptet som en pythonfil. Endelig er "~ / pi / Documents / gmail_python / check_messages.py" den absolutte filbanen til skriptet ditt - en relativ sti vil ikke fungere.

Du bør nå ha ditt eget Gmail varsellys! Det ville være ganske enkelt å endre dette for å lete etter meldinger basert på et annet krav eller filter (lær hvordan du bruker filtre her 10 E-postproblemer du kan løse med Gmail-filter 10 E-postproblemer du kan løse med Gmail-filtre En overfylt innboks som gjør deg gal Ønsker du å gjennom innboksen din raskere enn noen gang? Prøv noen av disse glimrende Gmail-filtre for å se forskjellen. Les mer) eller utfør et annet stykke kode - kanskje du kan opprette en Twitter-bot som tweets basert på e-postmeldinger (lære mer om å bygge en Pi Twitter bot Hvordan bygge en Raspberry Pi Twitter Bot Hvordan bygge en Raspberry Pi Twitter Bot Twitter er verdens største lager av korte meldinger fra folk som ikke har noe å si - og nå kan du også bidra til det episke prosjektet med en automatisert Twitter bot, drevet av din Raspberry ... Les mer).

Men du ender opp med å kode din varselboks, jeg vil gjerne vite hvordan det går i kommentarene!

In this article