Kazalo:

Tiskalnik Alexa - Upcikliran tiskalnik računov: 7 korakov (s slikami)
Tiskalnik Alexa - Upcikliran tiskalnik računov: 7 korakov (s slikami)

Video: Tiskalnik Alexa - Upcikliran tiskalnik računov: 7 korakov (s slikami)

Video: Tiskalnik Alexa - Upcikliran tiskalnik računov: 7 korakov (s slikami)
Video: CS50 2013 - Week 10, continued 2024, December
Anonim
Image
Image
Tiskalnik Alexa | Upcikliran tiskalnik računov
Tiskalnik Alexa | Upcikliran tiskalnik računov

Ljubim recikliranje stare tehnologije in njeno ponovno uporabo. Pred časom sem kupil star, poceni tiskalnik za termične račune in želel sem uporaben način za njegovo ponovno namestitev. Nato sem med počitnicami obdaril Amazon Echo Dot in ena od funkcij, ki sem jih najbolj uporabljal, je bilo dodajanje živil na moj nakupovalni seznam. Zato sem mislil, da bi bilo kul združiti oba in tiskalnik računov uporabiti kot tiskalnik IOT za Alexa (ali Google Home, ali Siri itd.). Poglejmo, kaj bo potrebno za uresničitev te ideje.

Zaloge

Tu so deli, ki jih uporabljam za ta projekt:

  1. Poceni generični tiskalnik s termičnimi potrdili (mora podpirati ESC-POS)
  2. Amazon Alexa Device (verjetno bodo delovale tudi druge naprave za "domačega pomočnika")
  3. Raspberry Pi Zero Wireless
  4. 7805 5v regulator
  5. 10μf kondenzator
  6. 1μf kondenzator

Druge stvari, ki jih uporabljam pri tem projektu, so:

  1. Če to potem tisto (IFTTT.com)
  2. Spajkalna oprema

1. korak: Nastavitev Raspberry Pi Zero W

Nastavitev Raspberry Pi Zero W
Nastavitev Raspberry Pi Zero W
Nastavitev Raspberry Pi Zero W
Nastavitev Raspberry Pi Zero W
Nastavitev Raspberry Pi Zero W
Nastavitev Raspberry Pi Zero W

Prvi korak je, da znova natisnete stari tiskalnik računov. Za krmilnik sem se odločil za uporabo Raspberry Pi Zero W zaradi nizke cene in majhnosti. Pravzaprav je dovolj majhen, da se prilega samemu ohišju tiskalnika, zato zunanjih povezav ni! Pi Zero W ima tudi vgrajen Wi -Fi, tako da je vse v bistvu integrirano v njegovo majhnost.

Če želimo Pi zagnati, moramo prenesti Raspbian OS in ga zapisati na kartico microSD s programom, kot je Etcher. Vstavite ga v Pi skupaj s kablom HDMI, tipkovnico, miško in nato vklopite.

Ko se Pi zažene in ste na namiznem vmesniku, se lahko povežete z brezžičnim omrežjem tako, da kliknete ikono brezžičnega v zgornjem desnem kotu in izberete ime brezžične povezave. Če z desno miškino tipko kliknete to isto ikono brezžičnega omrežja, lahko odprete omrežne nastavitve in nastavite statični naslov IP, da se lahko preprosto povežemo z njim po omrežju. Nazadnje želite klikniti glavni meni in izberite "Urejevalnik konfiguracije Raspbian" in na zavihku "Vmesniki" preverite, ali je SSH omogočen. Nato ga shranite in znova zaženite Pi.

2. korak: Tiskanje iz Pi

Tiskanje iz Pi
Tiskanje iz Pi
Tiskanje iz Pi
Tiskanje iz Pi

Ko je Raspbery Pi znova zagnan, ga morate povezati z brezžičnim omrežjem s statičnim IP -jem in omogočenim SSH -jem. Zdaj bi se morali z njim povezati na daljavo iz katerega koli drugega računalnika. Če želite to narediti, potrebujete odjemalca SSH. Za Windows je dober odjemalec Putty. Z njim se lahko povežete s statičnim naslovom Pi, ki smo ga nastavili prej. Nato se lahko prijavite z uporabo "pi" kot uporabniškega imena in "malina" kot geslo.

Po uspešni prijavi bi morali biti zdaj na vmesniku terminala Pi. Tukaj lahko vnesemo ukaze, ki se bodo izvajali na Raspberry Pi. Na primer, ena od prvih stvari, ki jih želimo narediti, je zagotoviti, da je programska oprema na Pi posodobljena. Tako lahko v terminal vtipkamo:

sudo apt-get posodobitev

Ta ukaz bo posodobil skladišča programske opreme na Pi. Nato lahko namestimo programsko opremo tiskalnika ESC-POS in potrebne knjižnice.

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

Ko to storimo, lahko tiskalnik povežemo s Pi-jevim vmesnikom Micro-USB (z adapterjem) in ga vklopimo. Nato lahko v našem terminalu ustvarimo majhen skript python

nano hello_world.py

In vanj lahko dodamo to kodo python

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

Zaprite ga (CTRL-X), shranite (CTRL-Y) in ga zaženite, da ga preizkusite

python3 hello_world.py

3. korak: Povezovanje z internetom stvari (1. del)

Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)
Povezovanje z internetom stvari (1. del)

Kaj bi koristilo tiskalniku brez nečesa za tiskanje? Hotel sem omogočiti tiskanje iz različnih internetnih storitev, na primer Alexa. Torej, kako lahko to dosežem? Ena od možnosti je, da izberete določeno internetno storitev, izsledite njihovo dokumentacijo o API -ju in napišete aplikacijo na podlagi njihovega API -ja. Ampak jaz se odločim za lenobno pot …

Obstaja odlično spletno mesto z imenom "Če je to potem tisto", ki sproži dejanja za različne internetne storitve (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter itd.) Na podlagi nabora meril. Na primer, "če" objavim na Facebooku (to), "Potem" mi pošlji e-pošto (to).

Tako sem se v prvi polovici tega časa prijavil na brezplačen račun, lahko začnete ustvarjati nov »programček« za različne storitve, ki jih želite sprožiti. "Ta" del mojega programčka bo Alexa. Na izbiro je veliko sprožilcev Alexa, vendar bom izbral tistega, ki pravi "Vprašajte, kaj je na vašem nakupovalnem seznamu". Navsezadnje želimo, da sproži skript Python na Raspberry Pi, zato za del "Ta" v skriptu želimo izbrati Webhooks.

V možnosti Webhooks lahko dodamo URL, ki kaže na naš Pi, na katerega se bomo vrnili kasneje. Polje Metoda lahko pustimo kot "Pridobi", za vrsto vsebine pa izberite "Navadno besedilo". Za polje Telo kliknite "Dodaj sestavino" in izberite "Celoten seznam". To bo poslalo celoten seznam nakupov kot zahtevo za pridobitev.

4. korak: Povezovanje z internetom stvari (2. del)

Povezovanje z internetom stvari (2. del)
Povezovanje z internetom stvari (2. del)
Povezovanje z internetom stvari (2. del)
Povezovanje z internetom stvari (2. del)

Prejšnji korak skrbi za "internetni" del, zato zdaj lahko delamo na "stvari" delu z uporabo Raspberry Pi. Za komunikacijo z appletom webhooks "If This Then That" moramo na Raspberry Pi nastaviti spletni strežnik. Obstaja veliko različnih načinov za nastavitev spletnega strežnika, a glede na to, da si na koncu želim zagnati skript Python, sem se odločil za uporabo Pythonovega strežnika Flask.

Pi ima vnaprej nameščene vse knjižnice Flask, zato moramo le začeti pisati testni skript:

nano flask_test.py

In vanj dodajmo kodo, ki služi preprosti spletni strani.

#! flask/bin/python #IMPORT THE FLASK LIBRARIES iz flask import Flask, request #CREATE A FLASK VARIABLE app = Flask (_ name_) #CREATE AN 'INDEX' PAGE @app.route ('/') def index (): return 'Vaš strežniški strežnik deluje!' #RAD PROGRAMA, če je _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Zdaj samo shranite program in ga zaženite s tem ukazom:

sudo python3 flask_test.py

Po odzivu ukaza boste videli, da so privzeta vrata, na katerih deluje Flask, vrata 5000. Torej, če v spletnem brskalniku vnesete naslov IP vašega Pi: 5000, bi morali videti besedilo "Vaš strežnik za bučke deluje!"

Imamo našo preskusno kodo Python od prej, ki se natisne na tiskalnik potrdil, in imamo preskusni strežnik Flask. Nato jih moramo združiti in vključiti neko kodo, ki potegne podatke iz našega programčka Webhook. Ustvarimo novo datoteko Python:

nano iot_print_server.py

Znotraj nje dodajte naslednjo kodo:

#! flask/bin/python #UVOZ FLASK IN TISKARSKIH KNJIŽNIC iz uvozne bučke, zahteva od escpos.printer uvoznega usb #DODELI SPREMENLJIVE ZA TISKALNIK IN FLASK p = Usb (0x0416, 0x5011) app = Flask (_ name_) #CREATE 'INDEX' PAGE @app.route ('/') def index (): return 'Vaš strežnik za bučke deluje!' #CREATE "PAGE" CALLED "LIST" FOR TISK ALEXA SHOPPING LIST @app.route ('/list') def list (): #CAPTURE "GET" DATUM OF OF IFTTT WEBOOKS content = request.get_data () #CONVERT RAW DATA TO STRING str_content = str (vsebina) #PODELITE PODATKE V LOČENE VRSTE str_split = str_content.splitlines () #LOČENE BESEDE PO VEZIKI IN DODAJ NA NOVI SEZNAM newlist = za besedo v str_split: word = word.split (',') newlist.extend (word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip ("b '") za s na novem seznamu] #PRINT HEADER #print ("Nakupovalni seznam / n") p.text ("Nakupovalni seznam: / n ") #ENUMERATE IN Natisni vsak element na seznamu r = 1 za x v rmv_marks: #print (str (r) +". " + X +" / n ") p.text (str (r) +". " + x + "\ n") r + = 1 #RETURN REZULTAT return "x" #RUN PROGRAM if if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Lahko ga zaženete in preverite, ali vrne napake, vendar z našim spletnim kljukom še ne bo deloval, ker trenutno strežnik deluje samo lokalno. Zunanji URL, s katerim se webhook lahko poveže, še ne obstaja. Na usmerjevalniku bi lahko nastavili posredovanje vrat in uporabili samo zunanji naslov IP, vendar to v resnici ni preveč varno. Druga možnost je, da se odločim za NGROK.

5. korak: Z Ngrokom nastavite zunanji dostop

Nastavitev zunanjega dostopa z Ngrokom
Nastavitev zunanjega dostopa z Ngrokom
Nastavitev zunanjega dostopa z Ngrokom
Nastavitev zunanjega dostopa z Ngrokom

Ngrok vzpostavi varno povezavo z vašim omrežjem, ne da bi vam bilo treba izpostaviti zunanji IP ali nered s posredovanjem vrat. Ko se prijavite za brezplačen račun, vam podari žeton za avtorizacijo. Nato ga lahko na svojem Raspberry Pi prenesete, razpakirate, povežete žeton za preverjanje pristnosti in ga nato zaženete na vratih 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… unzip ngrok-stable-linux-arm./ngrok authtoken [tukaj vnesite žeton za avtenziranje]./ngrok http 5000

*** POMEMBNO *** Brezplačna različica Ngroka ne vsebuje statičnega naslova, zato vam bo vsakič, ko znova zaženete Ngrok, dal drug naslov. Če želite statični naslov, da vam ne bo treba znova urejati spletnega ključa, boste morali plačati za nadgrajen račun.

Brezplačna alternativa Ngroku, ki ponuja statične IP -je, se imenuje "Serveo" na www.serveo.net

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

Na prikazanem zaslonu vam posreduje naslov za posredovanje (https://random-string.ngrok.io), ki ga lahko uporabimo v našem programčku Webhook. Če se torej vrnete na "Če je to potem tisto", v polje URL vnesite svoj naslov za posredovanje Ngrok in ga pokažite na stran "seznam" na našem strežniku Flask. To bi moralo izgledati nekako tako

random_string.ngrok.io/list

Nato pojdite naprej in shranite spremembe.

Če ga želite preizkusiti, nadaljujte z izvajanjem programa Ngrok, odprite nov terminal in zaženite naš skript python. Ko sta oba elementa vklopljena, vprašajte Alexa, kaj je na vašem nakupovalnem seznamu. Po minuti ali dveh bi morali natisniti rezultate. Če želite, da se takoj natisne, pojdite v svoj programček na IFTTT in kliknite »Preveri zdaj«. Če bo vse v redu, mora tiskalnik potrdil natisniti tisto, kar je na vašem nakupovalnem seznamu! Zadnji del kode, ki ga moramo dodati, je način za samodejni zagon ngroka in našega strežnika za bučke ob vsakem zagonu Pi. To lahko preprosto naredimo tako, da naredimo naš skript Python izvedljiv:

chmod +x iot_print_server.py

Nato lahko uredimo datoteko /etc/rc.local tako, da bo videti tako:

## Ta skript privzeto ne naredi nič. # Natisnite naslov IP _IP = $ (ime gostitelja -I) || res, če ["$ _IP"]; nato printf "Moj naslov IP je %s / n" "$ _IP" fi #autostart ngrok in ga pokažite na datoteko za preverjanje pristnosti./home/pi/ngrok/ngrok http -config =/home/pi/.ngrok2/ngrok. yml 5000 #autozagon tiskalnika python script sudo python3 /home/pi/iot_receipt_printer.py & exit 0

6. korak: Dodajanje pi v tiskalnik

Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik
Dodajanje pi v tiskalnik

Tiskalnik računov, ki ga imam, ima v ohišju veliko praznega prostora. In ker je Raspberry Pi Zero tako majhen, se mi je zdelo kul, če ga skrijem v tiskalnik za potrdila, tako da izgleda kot ena naprava. Edina težava je, da tiskalnik Receipt deluje na 12v, Pi pa na 5v. Torej, če želimo le en napajalni kabel za napajanje obeh, bomo morali to 12 -voltno napajanje znižati na 5 V.

Z uporabo regulatorja napetosti 7805, 1uf kondenzatorja in 10uf kondenzatorja sem lahko ustvaril preprost 5v regulator, ki sem ga priključil na logično ploščo tiskalnika za potrdila. Spajal sem žico "-" na skupno ozemljitev, nato pa sem žico "+" spajkal na "vklopljeno" stran stikala za vklop, da se bo Pi vklopil in izklopil, ko je tiskalnik vklopljen in izklopljen. Z multimetrom sem preizkusil, da potrdim, da je izhod varen za Pi. Nato sem spajkal na mikro-USB kabel in ga priključil na Pi. Po priključitvi kabla v tiskalnik in obračanju stikala sta se tiskalnik in Pi vklopila!

Na koncu sem izvrtal luknjo za priključitev kabla USB od Pi do tiskalnika. Našel sem prostor za 5v regulator in Pi v ohišju tiskalnika, nato pa sem vse skupaj spet sestavil. Zdaj ima tiskalnik tudi lasten spletni strežnik!

7. korak: Nadaljevanje

Nadaljevanje
Nadaljevanje

Če ste si lahko ogledali "Če je to potem tisto", ste verjetno opazili, da ima na voljo številne različne spletne storitve. Če torej nimate Alexa ali ga ne želite uporabljati, lahko s tem projektom natisnete skoraj vse, na primer Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, itd. Mojo kodo za tiskanje tvitov najdete na moji strani Github. Zdaj pa pojdite in poglejte, kaj lahko izmislite!

IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

Prva nagrada v IoT Challenge

Priporočena: