În acest tutorial vă voi arăta cum să utilizați un Raspberry Pi cu un RGB LCD pentru a monitoriza tweets. Tweets conținând cuvinte cheie specifice sunt afișate în culori definite. Veți învăța cum să creați o aplicație Twitter pentru a utiliza fluxul API pentru a împinge date către programul dvs., oferindu-vă posibilitatea de a afla mai multe despre programele Python cu mai multe fire.
sudo pip install tweepy
Creați o aplicație Twitter, pe site-ul web Twitter, pentru a permite programului Raspberry Pi să se conecteze la flux. Pentru aceasta, navigați la https://apps.twitter.com și conectați-vă.
Creați o aplicație completând formularul, după cum se arată mai jos. Notă: puteți pune un substituent pentru site-ul dvs. - este un câmp obligatoriu, dar nu este necesar pentru acest proiect Raspberry Pi.
Crearea unei aplicații Twitter pe site-ul TwitterCând trimiteți formularul, va fi creată o aplicație. Pe Taste API veți vedea o Cheia API și Secretul API-acestea sunt unice pentru tine și vor fi necesare mai târziu.
Deoarece cheia API și Secretul sunt unice, am redactat-o pe această captură de ecranDerulați în jos și faceți clic pe Creați indicativul meu de acces:
Crearea tokenului de accesActualizați pagina dacă doriți. Veți avea acum Jeton de acces și Accesul la secretul accesului. Din nou, acestea sunt unice pentru dvs. și vor fi necesare ulterior.
Token-urile au fost finalizate. Ele pot fi, de asemenea, regenerate, pentru a crea altele noi sau revocateAceasta este aplicația creată.
În codul pentru acest proiect, de mai jos, va trebui să editați pentru a edita pentru a vă introduce Cheia API, API Secret, Accesați cheia pentru Token și Accesați Secretul Token. De asemenea, este posibil să schimbați calea către Adafruit_CharLCDPlate
așa că se potrivește cu locul în care l-ai instalat pe Pi.
Când rulați programul, Pi se va conecta la fluxul Twitter. În acest exemplu, orice tweet care conține cuvântul Jeremy va fi împins către Pi și afișat pe ecranul RGB. Acesta este orice tweet public de la oricine din lume - nimic de-a face cu cine urmărești - este oricine!
Amintiți-vă să utilizați sudo
atunci când rulați Python script-root privilegiile sunt necesare pentru accesul i2c pe ecranul LCD. De exemplu:
sudo python /path/to/script/script.py
Notă: Programul nu se va închide cu ușurință apăsând Control-C. În schimb, deschideți o altă coajă și utilizați ps ax
și ucide
pentru a termina programul.
Programul caută alte cuvinte din tweet pentru a seta culoarea luminii de fundal RGB. Dacă găsește lucrarea Clarkson se va seta culoarea roșie, perla este verde, dragoste este albastru.
În cele din urmă, dacă există timp între tweets, programul va derula textul înfășurat în cuvânt, astfel încât să puteți vedea totul.
importați sys sys.path.append ('/ home / pi / py /' + Adafruit_CharLCDPlate) de la Adafruit_CharLCDPlate Adafruit_CharLCDPlate de la tweepy.streaming import StreamListener de la importul tweepy OAuthHandler de la tweepy import Stream import json import filet import import import textwrap subproces api_key = "###" api_secret = "###" access_token_key = "###" acces_token_secret = "###" clasa DisplayLoop (StreamListener): " un ascultător pentru datele de flux tweet.El este, de asemenea, apelabil, astfel încât să poată rula buclă de afișare principal pentru a actualiza afișarea. "" def __init __ (auto): self.lcd = Adafruit_CharLCDPlate () self.lcd.backlight (self.lcd. RED) auto.lcd.clear () auto.backlight_map = 'clarkson': self.lcd.RED, 'perla': self.lcd.GREEN, 'iubire': self.lcd.BLUE, 'ură': sine. lcd.YELLOW, 'kyle': self.lcd.TEAL, 'like': self.lcd.VIOLET self.msglist = [] self.pos = 0 self.tweet = 'Nimic încă' def set_backlight (self) = "" = "" "" "" "" "" w în cuvinte: dacă w în self.backlight_map: self.lcd.backlight (auto.backlight_map [w]) use_default = False break dacă use_default: self.lcd.backlight (self.lcd.WHITE) def on_data (auto, date) : tweet_data = json.loads (data) self.tweet = tweet_data ['text']. (self, self): self.scroll_message () return adevarata def on_error (auto, status): print status def write_message (auto, msg): self.lcd.home () auto.lcd.message (msg) def scroll_message (auto): "" "Afișează pagina de text și actualizează poziția de defilare pentru următorul apel" "" dacă len (auto.msglist) == 0: self.write_message (".ljust (16) + '\ n" + ".Ljust (16)) elif len (auto.msglist) == 1: self.write_message (self.msglist [0] +' \ n '+ (De exemplu: self.write_message (self.msglist [0] + '\ n' + self.msglist [1]) alt: dacă self.pos> = len (self. msglist) -1: self.pos = 0 altul: self.write_message (auto.msglist [self.pos] + '\ n' + self.msglist [self.pos + 1]) auto.pos + = 1 def get_ip_address (auto, interfață): "Returnează adresa IP pentru interfața dată, de ex. eth0 "încercați: s = subprocess.check_output ([" ip "," addr "," show ", interfață]) return s.split (' ] .split ('/') [0] cu excepția: return '?.?.?.?' __call __ (auto): în timp ce Adevărat: dacă self.lcd.buttonPressed (self.lcd.LEFT): self.write_message (self.get_ip_address ('eth0') ljust (16) + '\ n' + self.get_ip_address "wlan0") ljust (16)) altfel: self.scroll_message () time.sleep (1) display_loop_instance = DisplayLoop la twitter și la pornirea fluxului de urmărire auth = OAuthHandler (api_key, api_secret) auth.set_access_token (access_token_key, access_token_secret) stream = Stream (auth, display_loop_instance) stream.filter (track = ['jeremy'])
Există câteva chestiuni cheie care se întâmplă în cod. Puteți să vă adaptați codul pentru propriile scopuri și vă încurajez să experimentați. Există două fire:
Există un exemplu simplu pe pagina tweepy github - aceasta se conectează la flux și imprimă orice tweet conținând cuvântul baschet. În acest exemplu puteți vedea mai clar cum a StreamListener
clasa este definită și apoi trecută la Curent
constructor.
Am făcut același lucru în scenariul meu aici: stream = Stream (auth, display_loop_instance)
cu display_loop_instance
.
Cazul lui StreamListener
pot defini câteva metode de eveniment pentru Tweepy pentru a apela. Ca și exemplul, folosesc doar on_data
și on_error
. Odată ce conexiunea la Twitter este stabilită on_data
se numește de fiecare dată când apare un tweet nou. Datele tweet-ul primite sunt un document JSON codat în UTF-8, astfel:
"created_at": "Sun 18 mai 11:07:53 +0000 2014", "id": 467984918237437952, "id_str": "467984918237437952", "text": " “, "sursă": "web", "trunchiate": fals, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "utilizator": "id": 2413327915, "id_str": "2413327915", "nume": "ControlMyPi", "SCREEN_NAME": "ControlMyPi", "Locul de amplasare": "", "URL": null, "descriere": null, "protejate": false, "followers_count": 0, "friends_count": 0, "listed_count": 0, "created_at": "Wed Mar 26 23:39:27 +0000 2014", "favourites_count": 0, "utc_offset ": null," TIME_ZONE ": null," geo_enabled ": fals" verificat ": fals" statuses_count ": 7," lang ":" en " "contributors_enabled": fals "is_translator": fals" is_translation_enabled ":, fals" profile_background_color ":" C0DEED " "profile_background_image_url": "http: \ / \ / abs.twimg.com \ / imagini \ / teme \ / THEME1 \ /bg.png", "profile_background_image_url_https":" https : \ / \ / abs.twimg.c OM \ / imagini \ / teme \ / THEME1 \ /bg.png " "profile_background_tile": fals, "profile_image_url":" http: \ / \ / abs.twimg.com \ / lipicios \ / default_profile_images \ /default_profile_5_normal.png “, "profile_image_url_https": "https: \ / \ / abs.twimg.com \ / lipicios \ / default_profile_images \ /default_profile_5_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color" : "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": true, "default_profile_image": true, "următorul": null, "follow_request_sent": null, "notificări": nule, "geo": "coordonate" nule: null, "loc": null, "colaboratori": null, "retweet_count": 0, "FAVORITE_COUNT": 0, "entități": "hashtaguri": [], "simboluri "," id_str ":" 106417803 "," "," indici ": [33,40]]" drept preferat ": fals" retweeted ": fals" filter_level ":" mediu“, "lang": "en"
Sunt interesat doar de text
atribut din acest document, așa că voi folosi biblioteca json a Python pentru a analiza obiectele json în Python. Pot să apuc textul și să îl codific ca ascii, astfel încât acesta să fie compatibil cu ecranul LCD.
Într-o înțelegere a listei, am introdus cuvântul tweet într-o listă cu lățimea de 16 caractere, pregătită pentru a fi afișată pe ecran: [x.ljust (16) pentru x în textwrap.wrap (str (self.tweet), 16)]
Apoi, am sunatset_backlight
-acest lucru caută un cuvânt secundar în textul tweet și stabilește culoarea RGB de fundal. Dacă nu găsește un cuvânt pe hartă, afișajul este implicit alb.
În cele din urmă am sunat scroll_message
pentru a forța o actualizare imediată pe ecran.
Există două lucruri independente care se întâmplă în program: primirea de tweete din flux și derularea acestora pe ecran. Firele de afișare au grijă de defilare și monitorizează de asemenea tastatura pentru o funcție secundară.
Cele două fire trebuie să funcționeze pe aceleași date, tweets, astfel încât să păstreze lucrurile simple thread-ul de afișare, de asemenea, apeluri metode de pe display_loop_instance
.
Python are o modalitate clară de a porni un fir care apelează o metodă pe un obiect. Trebuie doar să faceți clasa dvs. callabilă prin definirea unui __apel__
metodă.
În cod, această metodă are o buclă fără sfârșit în timp ce are un somn de 1 secundă. Acest somn este vital, fără ca textul să se deruleze prea repede. De asemenea, firul trebuie să cedeze, astfel încât să nu utilizeze în mod inutil o mulțime de timp CPU.
Un lucru util aici și, eventual, un punct în care acest program ar putea fi extins, este monitorizarea tastaturii. Îmi place să rulez acest program de la boot-up pentru a putea să-l ducem la lucru sau undeva și să îl conectați la o rețea LAN pe DHCP și acesta funcționează.
Uneori, totuși, trebuie să aflați adresa IP pe care ați fost alocată, astfel încât să o puteți înscrie. În firul de afișare cu buclă neterminată, am adăugat o simplă declarație pentru a verifica dacă butonul stânga al tastaturii este apăsat. Dacă este cazul, afișăm adresele IP cu fir și fără fir pe ecran. Puteți testa acest lucru apăsând tasta din stânga.
Pentru a rula automat programul la boot, trebuie doar să editați /etc/rc.local
fișier și adăugați o linie pentru a rula programul:
python /home/pi/path/to/program/program.py &
.
Reporniți și ar trebui să înceapă automat.
În acest tutorial, v-am arătat cum să construiți un dispozitiv utilizând un Raspberry Pi și un LCD Adafruit RGB pentru a afișa tweets și a le afișa în anumite culori, în funcție de orice cuvinte cheie definite în tweet-ul în sine.
Dați-mi voie să știu dacă aveți idei deosebit de interesante pentru utilizarea acestui proiect sau modurile în care l-ați adaptat pentru propriile scopuri.