Advertentie
In dit snelle en gemakkelijke Raspberry Pi-project leer je hoe je een Gmail-e-mailmelding licht maakt. Als je ongelezen e-mails hebt, zet een Python-script de LED aan. Dit project vereist zeer weinig onderdelen en kan in minder dan een uur worden voltooid! Je kunt je LED natuurlijk op elke gewenste manier aankleden, zoals een MineCraft redstone-blok of een ander 3D-object geprint in doorzichtig plastic. Dit is het eindresultaat:
Wat je nodig hebt
- 1 x Raspberry Pi
- 1 x broodplank
- 1 x 220 ohm weerstand
- 1 x 5 mm LED
- 1 x Gmail-account
- Man-vrouw haak draden
Elke Raspberry Pi werkt voor dit project - zelfs de Pi Zero! Er is slechts één GPIO-pin nodig en deze is niet bijzonder CPU-intensief. Als je een... hebt Pi-starterkit je hebt meer dan genoeg onderdelen om dit af te maken.
Bouw plan
Dit is een heel eenvoudig project. Een Light Emitting Diode (LED) is verbonden met een GPIO-pin (General Purpose Input Output) op de Pi. Een heel eenvoudig Python-script zal regelmatig worden uitgevoerd om te controleren of ongelezen e-mails zijn en schakel de LED dienovereenkomstig in of uit.
De hardware
Sluit de positieve anode (lange poot) van de LED aan op de weerstand en vervolgens op GPIO-pin 14. U kunt elke GPIO-pin gebruiken, maar kijk naar de pinout ten eerste, aangezien ze enigszins verschillen tussen modellen. Verbind de negatieve kathode (korte poot met platte rand) met aarde.
Pi-instellingen
Als je Pi een besturingssysteem (OS) heeft geïnstalleerd, is er niet veel setup nodig (niet zeker wat je nodig hebt? Lees hier hoe u er een kunt installeren Hoe een besturingssysteem op een Raspberry Pi te installerenHier leest u hoe u een besturingssysteem op uw Raspberry Pi installeert en hoe u uw perfecte setup kunt klonen voor snel noodherstel. Lees verder ). Open een nieuwe terminal (Linksboven > menu > Accessoires > Terminal) op de Pi (bekijk deze snelkoppelingen om van jou een coderende ninja te maken Bespaar tijd in de Linux Terminal met deze 20 snelkoppelingenOf je nu een terminale beginner bent of iemand die lang geleden de angst heeft overwonnen, hier zijn 20 snelkoppelingen die je kunnen helpen een deel van de onhandigheid van de opdrachtregel te overwinnen. Lees verder ). U moet een nieuwe map maken om het Python-script op te slaan. Voer de volgende opdracht in:
pwd
Dit staat voor "Print Working Directory" en zal u laten zien in welke map u zich bevindt (standaard is dit "/ home / pi"). Navigeer naar de documentenmap en maak een nieuwe map (map) genaamd "gmail_python":
cd Documenten / sudo mkdir gmail_python
De opdracht "mkdir" staat voor "Make Directory". Alles wat hierop volgt, wordt gebruikt voor de directorynaam. U zou nu uw directory moeten kunnen zien:
ls
Als je een fout hebt gemaakt, kun je deze map eenvoudig verwijderen:
sudo rm -r gmail_python
Navigeer nu naar de nieuwe map:
cd gmail_python /
Maak een nieuw Python-script:
sudo nano check_messages.py
Hiermee wordt het script gemaakt en wordt het klaar om te bewerken Nano. Je zou natuurlijk een ander programma kunnen gebruiken, zoals Vim, hoewel deze tweet mijn gevoelens daarover samenvat:
Ik gebruik Vim nu ongeveer 2 jaar, vooral omdat ik niet weet hoe ik het moet afsluiten.
- Ik ben Devloper (@iamdevloper) 17 februari 2014
Maak een grapje, kijk hier eens naar vergelijking tussen de twee nano vs. vim: Terminal Text Editors vergelekenHoewel Linux voor vrijwel iedereen eenvoudig genoeg is geworden om te gebruiken zonder ooit de Terminal te hoeven gebruiken, zijn er sommigen van ons die het regelmatig gebruiken of nieuwsgierig zijn naar hoe men kan controleren ... Lees verder voor een volledige uitsplitsing.
druk op CTRL + X om Nano te verlaten en terug te gaan naar de terminal.
Python-installatie
Nu de Pi is ingesteld, is het tijd om de code te schrijven. Dit project vereist het uitstekende Gmail Python-bibliotheek door Charlie Guo. Download de bibliotheek van Github en pak de inhoud uit. Binnen zou er een map moeten zijn met de naam "gmail". Kopieer deze hele map naar "/ home / pi / Documents / gmail_python".
Schakel terug naar de opdrachtregel en open je script opnieuw (als je op de op-toets drukt, kun je door je eerder ingevoerde opdrachten bladeren):
sudo nano check_messages.py
Merk op dat dat dezelfde opdracht is die u gebruikte om het bestand te maken - als een bestand al bestaat, wordt het geopend, anders wordt het gemaakt. Hier is de Python:
Gmail, RPi importeren. GPIO als GPIO, tijd # importmodules GPIO.setwarnings (False) GPIO.setmode (GPIO.BCM) # vertel de Pi welke headers moeten worden gebruikt. GPIO.setup (14, GPIO.OUT) # vertel de Pi dat deze pin een output is g = gmail.login ('[email protected] ',' YOUR PASSWORD ') unread_messages = g.inbox (). mail (ongelezen = True) total_messages = 0 voor bericht in ongelezen_berichten: total_messages + = 1 als total_messages> 0: # er zijn ongelezen e-mails, zet GPIO aan. output (14, True) anders: # er zijn geen ongelezen e-mails, zet het licht uit GPIO.output (14, False)
U moet uw gebruikersnaam en wachtwoord invoeren om dit te laten werken. Je kunt de volledige broncode voor de Gmail-plug-in bekijken als je dat wilt. Als u zich hier niet prettig bij voelt (of als u tweefactorauthenticatie gebruikt), moet u verbinding maken met Gmail via OAuth2. Dit is een beetje betrokken bij deze tutorial, maar Google heeft een uitstekende aan de slag-gids.
Laten we de code opsplitsen. Eerst worden enkele modules geïmporteerd. Modules in Python zijn kleine stukjes code die voor een doel zijn geschreven (vergelijkbaar met bibliotheken in de Arduino IDE). RPi. GPIO is een Pi-specifieke module voor toegang tot de GPIO, gmail is de module die je eerder hebt gedownload en tijd is een module die in Python is ingebouwd om timingfuncties te bieden. Nu worden "GPIO.setmode" en "GPIO.setup" gebruikt om de Pi te vertellen dat pin 14 een output is en dat u "Broadcom Pin Numbering" wilt gebruiken (meer informatie over BCM).
Deze lijn maakt verbinding met je Gmail-account. Het creëert een object genaamd "g", en roept de login methode aan van de eerder geïmporteerde gmail module. Vergeet niet je Gmail-e-mailadres en wachtwoord in te voeren.
g = gmail.login ('[email protected] ',' JOUW WACHTWOORD ')
Haal nu alle ongelezen berichten op en bewaar ze in een variabele genaamd "ongelezen berichten":
unread_messages = g.inbox (). mail (ongelezen = True)
Merk op hoe "unread = True" wordt doorgegeven als parameter - u kunt dit wijzigen om berichten op te halen op basis van verschillende parameters, zoals afzender of onderwerp. Bekijk de Application Programming Interface (API) documentatie voor veel meer informatie.
Vervolgens wordt een for-lus gebruikt om elk bericht te herhalen:
voor bericht in ongelezen berichten: total_messages + = 1
Voor lussen zijn erg handig. Ze herhalen een codeblok meerdere keren, vaak met telkens een iets andere waarde. Deze for-lus gaat over elk bericht in ongelezen berichten en verhoogt de variabele "total_messages".
Ten slotte worden enkele eenvoudige 'als'-instructies gebruikt. Als er ongelezen berichten zijn, zet u de LED aan, anders schakelt u deze uit.
Onthoud dat Python hoofdlettergevoelig is en witruimte gebruikt. Als u problemen ondervindt bij het uitvoeren van de code, probeer het dan deze website. Plak je Python in en druk op de knop "validate above python code". Dit zou je dan moeten vertellen welke (eventuele) fouten aanwezig zijn in je Python.
Schakel over naar de Terminal en voer je script uit:
python check_messages.py
Met deze opdracht wordt uw script uitgevoerd. Probeer handmatig een aantal e-mails in uw inbox te wijzigen in de ongelezen status en voer het script opnieuw uit - u zou de LED moeten zien in- of uitschakelen om uw inbox weer te geven.
Cron-instellingen
Nu het script werkt, is het tijd om het te automatiseren. De eenvoudigste manier om dit te doen is via een cron-taak. Cron-taken worden gebruikt om taken en scripts te plannen, zoals geautomatiseerde back-ups. Open de Crontab (lijst met geplande taken):
crontab -e
Als er nog geen geplande taken zijn ingesteld, is dit bestand leeg (het kan documentatie of opmerkingen bevatten, voorafgegaan door een "#"). Als u hier al vermeldingen heeft, voert u eenvoudig uw nieuwe opdracht in op een nieuwe regel:
* * * * * python ~ / pi / Documents / gmail_python / check_messages.py
De vijf 'sterren' ('* * * * *') geven aan hoe vaak de taak moet worden uitgevoerd (je kunt hier heel chique worden, bijvoorbeeld elke tweede woensdag om 2.00 uur). Deze vijf sterren geven aan dat de taak elke minuut moet worden uitgevoerd. Dit is het kleinste toegestane interval (meer informatie hierover cronjob planning Taken plannen in Linux met Cron en CrontabDe mogelijkheid om taken te automatiseren is een van die futuristische technologieën die er al is. Elke Linux-gebruiker kan profiteren van planningssysteem- en gebruikerstaken dankzij cron, een gebruiksvriendelijke achtergrondservice. Lees verder ). Vervolgens vertelt "python" de planner om het script uit te voeren als een python-bestand. Ten slotte is "~ / pi / Documents / gmail_python / check_messages.py" het absolute bestandspad naar je script - een relatief pad zal niet werken.
Je zou nu je eigen Gmail-meldingslampje moeten hebben! Het zou vrij eenvoudig zijn om dit aan te passen om berichten te zoeken op basis van een andere vereiste of filter (leer hier hoe u filters gebruikt 10 e-mailproblemen die u kunt oplossen met Gmail-filtersEen overvolle inbox waar je gek van wordt? Wil je sneller dan ooit door je inbox? Probeer enkele van deze briljante Gmail-filters om het verschil te zien. Lees verder ), of voer een ander stuk code uit - misschien kunt u een Twitter-bot maken die tweets op basis van e-mails (meer informatie over het bouwen van een Pi Twitter-bot Hoe een Raspberry Pi Twitter Bot te bouwenTwitter is 's werelds grootste opslagplaats van korte berichten van mensen die niets te zeggen hebben - en nu ook jij kunt bijdragen aan dat epische project met een geautomatiseerde Twitter-bot, mogelijk gemaakt door jouw Framboos... Lees verder ).
Hoe je je meldingsvak ook codeert, ik zou graag willen weten hoe het gaat in de reacties!
Joe is afgestudeerd in computerwetenschappen aan de universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, kan hij vaak foto's of video's maken.