Sadržaj:

Alexa pisač - Unaprijeđeni pisač računa: 7 koraka (sa slikama)
Alexa pisač - Unaprijeđeni pisač računa: 7 koraka (sa slikama)

Video: Alexa pisač - Unaprijeđeni pisač računa: 7 koraka (sa slikama)

Video: Alexa pisač - Unaprijeđeni pisač računa: 7 koraka (sa slikama)
Video: Cheap Alexa Printer From An Old Receipt Printer - Weekend Hacker #002 2024, Lipanj
Anonim
Image
Image
Alexa pisač | Upciklirani pisač računa
Alexa pisač | Upciklirani pisač računa

Obožavam reciklirati staru tehnologiju i učiniti je ponovno korisnom. Prije nekog vremena nabavio sam stari, jeftini termalni pisač računa i htio sam koristan način da ga ponovno namjestim. Zatim sam tijekom praznika dobila Amazon Echo Dot, a jedna od značajki koje sam najviše koristila bila je dodavanje namirnica na popis za kupnju. Pa sam mislio da bi bilo super kombinirati to dvoje i koristiti pisač računa kao IOT pisač za Alexa (ili Google Home, ili Siri itd.). Pogledajmo što će biti potrebno da se ova ideja ostvari.

Pribor

Evo dijelova koje koristim za ovaj projekt:

  1. Jeftini generički termalni pisač računa (mora podržavati ESC-POS)
  2. Amazon Alexa uređaj (vjerojatno će raditi i drugi uređaji s "kućnim pomoćnikom")
  3. Raspberry Pi Zero Wireless
  4. 7805 Regulator 5v
  5. 10μf kondenzator
  6. Kondenzator 1μf

Ostale stvari koje koristim za ovaj projekt su:

  1. Ako ovo onda ono (IFTTT.com)
  2. Oprema za lemljenje

Korak 1: Postavljanje Raspberry Pi Zero W

Postavljanje Raspberry Pi Zero W
Postavljanje Raspberry Pi Zero W
Postavljanje Raspberry Pi Zero W
Postavljanje Raspberry Pi Zero W
Postavljanje Raspberry Pi Zero W
Postavljanje Raspberry Pi Zero W

Prvi korak je ponovno ispisivanje starog pisača računa. Odlučio sam se koristiti Raspberry Pi Zero W kao kontroler zbog niske cijene i male veličine. Zapravo je dovoljno mali da stane u samo kućište pisača računa, tako da nema vanjskih veza! Pi Zero W također ima ugrađen Wifi pa je sve u osnovi integrirano u njegovu malu veličinu.

Da bismo Pi pokrenuli, moramo preuzeti Raspbian OS i snimiti ga na microSD karticu pomoću programa kao što je Etcher. Umetnite ga u Pi zajedno s HDMI kabelom, tipkovnicom, mišem i zatim uključite.

Kad se Pi podigne i nalazite se na radnom sučelju, možete se povezati s bežičnom mrežom klikom na ikonu bežične veze u gornjem desnom kutu i odabirom naziva bežične veze. Zatim, ako desnom tipkom miša kliknete tu istu ikonu bežične veze, možete otići do mrežnih postavki i postaviti statičku IP adresu tako da se možemo jednostavno povezati s njom putem mreže. Konačno, želite kliknuti na glavni izbornik i odabrati "Uređivač konfiguracije Raspbian", a na kartici "Sučelja" provjerite je li omogućen SSH. Zatim ga spremite i ponovno pokrenite Pi.

Korak 2: Ispis iz Pi -a

Ispis iz Pi
Ispis iz Pi
Ispis iz Pi
Ispis iz Pi

Nakon što se Raspbery Pi ponovno pokrene, trebao bi se povezati s bežičnom mrežom sa statičkim IP -om i s omogućenim SSH -om. Dakle, sada bismo se trebali moći povezati na daljinu s bilo kojeg drugog računala. Da biste to učinili, potreban vam je SSH klijent. Za Windows, dobar klijent je Putty. Na njega se možete povezati pomoću Pi -ove statičke IP adrese koju smo ranije postavili. Tada se možete prijaviti pomoću "pi" kao korisničkog imena i "maline" kao lozinke.

Nakon uspješne prijave, sada bismo trebali biti na sučelju terminala Pi. Ovdje možemo upisati naredbe koje će se izvršavati na Raspberry Pi. Na primjer, jedna od prvih stvari koje želimo učiniti je provjeriti je li softver na Pi ažuriran. Dakle, u terminal možemo upisati:

sudo apt-get ažuriranje

Ova naredba ažurirat će softverska spremišta na Pi. Zatim možemo instalirati softver pisača ESC-POS i potrebne knjižnice.

sudo apt-get install python3 python3-setuptools python3-pip libjpeg8-devsudo pip3 install --upgrade pip sudo pip3 install python-escpos

Kad to učinimo, sada možemo povezati pisač s Pi-jevim Micro-USB priključkom (pomoću adaptera) i uključiti ga. Zatim u našem terminalu možemo stvoriti malu python skriptu

nano hello_world.py

I u njega možemo dodati ovaj python kod

#!/usr/bin/pythoniz escpos.printer uvoz Usb p = Usb (0x0416, 0x5011) p.text ("Mini IOT pisač / n") p.close ()

Izađite iz njega (CTRL-X), spremite ga (CTRL-Y) i pokrenite ga da biste ga testirali

python3 hello_world.py

Korak 3: Povezivanje na Internet stvari (1. dio)

Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)
Povezivanje s internetom stvari (1. dio)

Što bi koristilo pisaču bez nečega za ispis? Htio sam omogućiti funkcionalnost ispisa s različitih internetskih usluga, poput Alexa. Pa kako to mogu postići? Jedna je mogućnost odabrati određenu internetsku uslugu, pronaći njihovu API dokumentaciju i napisati aplikaciju na temelju njihovog API -ja. Ali ja se odlučujem za lijeni put …

Postoji izvrsna web stranica pod nazivom "If This Then That" koja pokreće radnje za različite internetske usluge (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter itd.) Na temelju niza kriterija. Na primjer, "ako" objavim na Facebooku (ovo), "Zatim" pošaljite mi e-poštu (to).

Dakle, za prvu polovicu ovoga, kada sam se prijavio za besplatni račun, možete početi stvarati novi "applet" za različite usluge koje želite pokrenuti. "Ovaj" dio mog apleta bit će Alexa. Postoji mnogo Alexa okidača za odabir, ali ja ću odabrati onaj koji kaže "Pitaj što ti je na popisu za kupnju". I na kraju želimo da pokrene Python skriptu na Raspberry Pi, pa za "Taj" dio skripte želimo odabrati Webhooks.

U opciji Webhooks možemo dodati URL koji upućuje na naš Pi, na što ćemo se kasnije vratiti. Polje Metoda možemo ostaviti kao "Get", a za vrstu sadržaja odaberite "Plain Text". Za polje Tijelo kliknite "Dodaj sastojak" i odaberite "Cijeli popis". Ovo će poslati cijeli popis za kupnju kao zahtjev za dobivanje.

Korak 4: Povezivanje na Internet stvari (2. dio)

Povezivanje s internetom stvari (2. dio)
Povezivanje s internetom stvari (2. dio)
Povezivanje s internetom stvari (2. dio)
Povezivanje s internetom stvari (2. dio)

Prethodni korak vodi računa o dijelu "Interneta", pa sada dopuštamo rad na dijelu "stvari" pomoću Raspberry Pi. Da bismo komunicirali s applet webhooks -om "If This Then That", moramo postaviti web poslužitelj na Raspberry Pi. Postoji mnogo različitih načina postavljanja web poslužitelja, ali s obzirom na to da u konačnici želim pokrenuti Python skriptu, odlučio sam koristiti Pythonov Flask poslužitelj.

Pi ima unaprijed instalirane sve knjižnice Flask, pa sve što trebamo učiniti je početi pisati testnu skriptu:

nano flask_test.py

I u to, dodajmo neki kod koji služi jednostavnoj web stranici.

#! flask/bin/python #UVOZ FLASK BIBLIOTEKA iz flask import Flask, zahtjev #CREATE A FLASK VARIABLE app = Flask (_ name_) #CREATE AN 'INDEX' PAGE @app.route ('/') def index (): return "Vaš Flask poslužitelj radi!" #POKRENITE PROGRAM ako je _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Sada samo spremite program i pokrenite ga pomoću ove naredbe:

sudo python3 flask_test.py

Odgovorom naredbe vidjet ćete da je zadani priključak na kojem radi Flask port 5000. Dakle, u web pregledniku, ako upišete IP adresu svog Pi -a: 5000, trebali biste vidjeti tekst "Vaš Flask poslužitelj radi!"

Imamo naš probni Python kod od ranije koji se ispisuje na naš pisač računa, a imamo i naš testni Flask poslužitelj. Stoga ih moramo kombinirati i ugraditi neki kod koji izvlači podatke iz našeg Webhook apleta. Kreirajmo novu Python datoteku:

nano iot_print_server.py

Unutar njega dodajte sljedeći kôd:

#! flask/bin/python #UVOZ FLASKARA I KNJIŽNICA ŠTAMPAČA iz uvozne bočice, zahtijev od escpos.printer uvoza USB #ZNAČAJNE PROMJENE ZA TISKAR I FLASKU p = Usb (0x0416, 0x5011) app = Flask (_ name_) #CREATE 'INDEX' PAGE @app.route ('/') def index (): return 'Vaš Flask poslužitelj radi!' #CREATE "PAGE" CALLED "LIST" FOR TINTING ALEXA SHOPPING LIST @app.route ('/list') def list (): #CAPTURE "DOBI" PODATKE IZ IFTTT WEB KNJIGA content = request.get_data () #CONVERT RAW DATA TO STRING str_content = str (content) #PODIJELITE PODATKE U ODVOJENE LINIJE str_split = str_content.splitlines () #ODVAJANE RIJEČI PO ZAPAČI I DODAJTE NA NOVI POPIS newlist = za riječ u str_split: word = word.split (',') newlist.extend (word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip ("b '") za s na novom popisu] #PRINT HEADER #print ("Popis za kupnju / n") p.text ("Popis za kupnju: / n ") #ENUMERIRAJ I ISPISAJ SVAKU STAVKU NA LISTU r = 1 za x u rmv_marks: #print (str (r) +". " + X +" / n ") p.text (str (r) +". " + x + "\ n") r + = 1 #RETURN RESULTS return 'x' #POKRENITE PROGRAM ako je _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Možete ga pokrenuti da vidite vraća li greške, ali još neće raditi s našom webhookom jer poslužitelj trenutno radi samo lokalno. Još nema vanjskog URL -a na koji se webhook ne može povezati. Mogli bismo postaviti prosljeđivanje portova na naš usmjerivač i samo koristiti vanjsku IP adresu, ali to nije previše sigurno. Alternativno, odlučujem se za NGROK.

Korak 5: Postavljanje vanjskog pristupa pomoću Ngroka

Postavljanje vanjskog pristupa pomoću Ngroka
Postavljanje vanjskog pristupa pomoću Ngroka
Postavljanje vanjskog pristupa pomoću Ngroka
Postavljanje vanjskog pristupa pomoću Ngroka

Ngrok postavlja sigurnu vezu s vašom mrežom bez otkrivanja vanjskog IP -a ili nereda s prosljeđivanjem portova. Nakon što se prijavite za besplatni račun, on vam daje token za autorizaciju. Zatim ga na svom Raspberry Pi -u možete preuzeti, raspakirati, povezati svoj auth token, a zatim ga pokrenuti na portu 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… raspakirajte ngrok-stable-linux-arm./ngrok authtoken [ovdje unesite svoj auth token]./ngrok http 5000

*** VAŽNO *** Besplatna verzija Ngroka ne daje statičku adresu, pa će vam svaki put kada ponovno pokrenete Ngrok dati drugu adresu. Ako želite statičku adresu kako ne biste morali stalno uređivati svoj Webhook, morat ćete platiti nadograđeni račun.

Besplatna alternativa Ngroku koja nudi statičke IP adrese naziva se "Serveo" na www.serveo.net

************************

Na rezultirajućem zaslonu daje vam adresu za prosljeđivanje (https://random-string.ngrok.io) koju možemo koristiti u našem apletu Webhook. Vraćajući se na "Ako ovo onda ono", u polje URL unesite svoju Ngrok adresu za prosljeđivanje i usmjerite je na stranicu "popis" na našem Flask poslužitelju. Trebalo bi izgledati otprilike ovako

random_string.ngrok.io/list

Zatim nastavite i spremite promjene.

Da biste ga isprobali, nastavite s radom Ngroka, otvorite novi terminal i pokrenite našu python skriptu. Dok su obje stavke aktivne, pitajte Alexa što je na vašem popisu za kupnju. Nakon minute ili dvije trebao bi ispisati rezultate. Ako želite da se odmah ispiše, samo idite u svoj Applet na IFTTT -u i kliknite "Check Now". Ako sve prođe dobro, pisač računa trebao bi ispisati ono što je na vašem popisu za kupnju! Posljednji dio koda koji moramo dodati je način za automatsko pokretanje ngroka i našeg poslužitelja za bočice pri svakom pokretanju Pi. To možemo lako učiniti tako da našu Python skriptu izvršimo:

chmod +x iot_print_server.py

Tada možemo urediti našu /etc/rc.local datoteku tako da izgleda ovako:

## Prema zadanim postavkama, ova skripta ne radi ništa. # Ispišite IP adresu _IP = $ (naziv hosta -I) || true if ["$ _IP"]; zatim printf "Moja IP adresa je %s / n" "$ _IP" fi #autostart ngrok i usmjerite je na svoju autorizacijsku datoteku./home/pi/ngrok/ngrok http -config =/home/pi/.ngrok2/ngrok. yml 5000 #autostart pisača python skripta sudo python3 /home/pi/iot_receipt_printer.py & exit 0

Korak 6: Dodavanje Pi u pisač

Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač
Dodavanje Pi u pisač

Pisač računa koji imam ima puno praznog prostora unutar kućišta. S obzirom na to da je Raspberry Pi Zero malen, mislio sam da bi bilo super samo ga sakriti u pisač računa kako bi izgledao kao jedan uređaj. Jedini problem je što pisač Receipt radi na 12v, a Pi na 5v. Dakle, ako želimo samo jedan kabel za napajanje za oboje, morat ćemo smanjiti to napajanje od 12 volti na 5 volti.

Koristeći regulator napona 7805, kondenzator od 1 uf i kondenzator od 10 uf uspio sam stvoriti jednostavan regulator od 5 volti koji sam spojio na logičku ploču pisača računa. Lemio sam žicu "-" na zajedničko uzemljenje, a zatim sam žicu "+" lemio na "on" stranu prekidača za napajanje kako bi se Pi uključivao i isključivao kada se pisač uključi i isključi. Korištenjem višemetara testirao sam kako bih potvrdio da je izlaz siguran za Pi. Zatim sam lemio na mikro-USB kabel i spojio ga na Pi. Nakon što ste priključili kabel u pisač i okrenuli prekidač, i pisač i Pi su se uključili!

Na kraju sam izbušio rupu za spajanje USB kabela s Pi -a na pisač. Našao sam mjesto za staviti 5v regulator i Pi unutar kućišta pisača, a zatim sam sve ponovno sastavio. Dakle, pisač sada ima i vlastiti samostalni web poslužitelj!

Korak 7: Nadalje

Uzimajući to dalje
Uzimajući to dalje

Ako ste mogli pogledati "Ako ovo onda ono", vjerojatno ste primijetili da ima mnogo različitih web usluga za povezivanje. Dakle, ako nemate Alexa ili je ne želite koristiti, možete koristiti ovaj projekt za ispis sa bilo čega, kao što su Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, itd. Moj kod za ispis Tweetova možete pronaći na mojoj stranici Github. Sada idi i vidi što možeš smisliti!

IoT izazov
IoT izazov
IoT izazov
IoT izazov

Prva nagrada u IoT Challengeu

Preporučeni: