Innholdsfortegnelse:

Alexa -skriver - Oppskrevet kvitteringsskriver: 7 trinn (med bilder)
Alexa -skriver - Oppskrevet kvitteringsskriver: 7 trinn (med bilder)

Video: Alexa -skriver - Oppskrevet kvitteringsskriver: 7 trinn (med bilder)

Video: Alexa -skriver - Oppskrevet kvitteringsskriver: 7 trinn (med bilder)
Video: Billy Joel - The Downeaster 'Alexa' (Official Video) 2024, November
Anonim
Image
Image
Alexa -skriver | Oppskrevet kvitteringsskriver
Alexa -skriver | Oppskrevet kvitteringsskriver

Jeg er fan av å resirkulere gammel teknologi og gjøre den nyttig igjen. For en stund siden kjøpte jeg en gammel, billig termisk kvitteringsskriver, og jeg ønsket en nyttig måte å bruke den på nytt. I løpet av ferien fikk jeg en Amazon Echo Dot, og en av funksjonene jeg brukte mest var å legge dagligvarer til handlelisten min. Så jeg tenkte at det ville være kult å kombinere de to og bruke kvitteringsskriveren som en IOT -skriver for Alexa (eller Google Home eller Siri, osv.). La oss se hva som skal til for å gjøre denne ideen til virkelighet.

Rekvisita

Her er delene jeg bruker til dette prosjektet:

  1. Billig generisk termisk kvitteringsskriver (må støtte ESC-POS)
  2. Amazon Alexa Device (andre "hjemmeassistent" -enheter vil sannsynligvis også fungere)
  3. Raspberry Pi Zero Wireless
  4. 7805 5v regulator
  5. 10μf kondensator
  6. 1μf kondensator

Andre ting jeg bruker til dette prosjektet er:

  1. If This Then That (IFTTT.com)
  2. Loddeutstyr

Trinn 1: Konfigurere Raspberry Pi Zero W

Sette opp Raspberry Pi Zero W
Sette opp Raspberry Pi Zero W
Sette opp Raspberry Pi Zero W
Sette opp Raspberry Pi Zero W
Sette opp Raspberry Pi Zero W
Sette opp Raspberry Pi Zero W

Det første trinnet er å få den gamle kvitteringsskriveren til å skrive ut igjen. Jeg valgte å bruke Raspberry Pi Zero W som kontrolleren på grunn av den billige prisen og den lille størrelsen. Den er faktisk liten nok til å passe inn i selve kvitteringsskriverhuset, så det er ingen eksterne tilkoblinger! Pi Zero W har også innebygd Wifi, så alt er i utgangspunktet integrert i den lille størrelsen.

For å få Pi i gang, må vi laste ned Raspbian OS og brenne den til et microSD -kort ved hjelp av et program som Etcher. Sett den inn i Pi sammen med en HDMI -kabel, tastatur, mus og deretter strøm.

Når Pi starter opp og du er på skrivebordet, kan du koble til den trådløse enheten ved å klikke på ikonet for trådløs øverst til høyre og velge navnet på den trådløse tilkoblingen. Hvis du høyreklikker på det samme trådløse ikonet, kan du gå til nettverksinnstillingene og angi en statisk IP -adresse slik at vi enkelt kan koble til det over nettverket. Til slutt vil du klikke på hovedmenyen og velge "Raspbian Configuration Editor" og under fanen "Grensesnitt" må du kontrollere at SSH er aktivert. Lagre den og start Pi -en på nytt.

Trinn 2: Skrive ut fra Pi

Skrive ut fra Pi
Skrive ut fra Pi
Skrive ut fra Pi
Skrive ut fra Pi

Når Raspbery Pi har blitt startet på nytt, bør den være koblet til det trådløse nettverket med en statisk IP og med SSH aktivert. Så nå bør vi kunne koble til den eksternt fra hvilken som helst annen datamaskin. For å gjøre det trenger du en SSH -klient. For Windows er en god klient Putty. Du kan koble til den ved hjelp av Pi's statiske IP -adresse som vi angav tidligere. Deretter kan du logge inn med "pi" som brukernavn og "bringebær" som passord.

Etter en vellykket pålogging, bør vi nå være på Pi -terminalens grensesnitt. Her kan vi skrive inn kommandoer som skal utføres på Raspberry Pi. For eksempel er en av de første tingene vi ønsker å gjøre, at programvaren på Pi er oppdatert. Så i terminalen kan vi skrive:

sudo apt-get oppdatering

Denne kommandoen vil oppdatere programvarelagrene på Pi. Deretter kan vi installere ESC-POS-skriverprogramvaren og nødvendige biblioteker.

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

Når det er gjort, kan vi nå koble skriveren til Pi's Micro-USB-port (ved hjelp av en adapter) og slå den på. Så i terminalen vår kan vi lage et lite python -skript

nano hello_world.py

Og i den kan vi legge til denne pythonkoden

#!/usr/bin/python fra escpos.printer import Usb p = Usb (0x0416, 0x5011) p.text ("Mini IOT Printer / n") p.close ()

Avslutt den (CTRL-X), lagre den (CTRL-Y) og kjør den for å teste den

python3 hello_world.py

Trinn 3: Koble til tingenes internett (del 1)

Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)
Koble til tingenes internett (del 1)

Hva ville en skriver ha uten noe å skrive ut? Jeg ønsket å aktivere funksjonalitet for å skrive ut fra forskjellige internettjenester, for eksempel Alexa. Så hvordan kan jeg oppnå det? Ett alternativ er å velge en bestemt internettjeneste, spore API -dokumentasjonen og skrive en applikasjon basert på API -en. Men jeg velger å gå den late ruten …

Det er et flott nettsted kalt "If This Then That" som utløser handlinger for forskjellige internettjenester (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter, etc.) basert på et sett med kriterier. For eksempel, "hvis" jeg legger ut på Facebook (dette), "deretter" send meg en e-post (det).

Så for første halvdel av dette registrerte jeg meg for en gratis konto, du kan begynne å lage en ny "applet" for de forskjellige tjenestene du vil utløse. "Denne" delen av min applet vil være Alexa. Det er mange Alexa -utløsere å velge mellom, men jeg kommer til å velge den som sier "Spør hva som står på handlelisten din". Og vi vil til slutt at den skal utløse et Python -script på Raspberry Pi, så for "That" -delen av scriptet ønsker vi å velge Webhooks.

I Webhooks -alternativet kan vi legge til en URL som peker til Pi -en vår, som vi kommer tilbake til senere. Vi kan la Metode -feltet stå som "Hent", og for innholdstypen velge "Vanlig tekst". For Body -feltet klikker du på "Legg til ingrediens" og velger "Hele listen". Dette sender hele handlelisten som en Get -forespørsel.

Trinn 4: Koble til tingenes internett (del 2)

Koble til tingenes internett (del 2)
Koble til tingenes internett (del 2)
Koble til tingenes internett (del 2)
Koble til tingenes internett (del 2)

Det forrige trinnet tar seg av "Internett" -delen, så nå kan vi jobbe med "ting" -delen ved hjelp av Raspberry Pi. For å kunne kommunisere med "If This Then That" webhooks -appleten, må vi sette opp en webserver på Raspberry Pi. Det er mange forskjellige måter å sette opp en webserver på, men med tanke på at jeg til slutt vil kjøre et Python -skript, bestemte jeg meg for å bruke Pythons Flask -server.

Pi har alle Flask-bibliotekene forhåndsinstallert, så alt vi trenger å gjøre er å begynne å skrive et testskript:

nano flask_test.py

Og i den, la oss legge til noen kode som serverer en enkel webside.

#! kolbe/beholder/pyton #IMPORTER FLASKBibliotekene fra kolbeimportkolbe, be om #LAG EN FLASKVARIABLE app = Kolbe (_ navn_) #OPPRETT EN 'INDEKS' SIDE @app.route ('/') def indeks (): return 'Din kolbe -server fungerer!' #KJØR PROGRAMMET hvis _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Bare lagre programmet og kjør det med denne kommandoen:

sudo python3 flask_test.py

Du vil se ved kommandosvaret at standardporten som Flask kjører på er port 5000. Så i en nettleser, hvis du skriver inn Pi -IP -adressen din: 5000, bør du se teksten "Din kolbe -server fungerer!"

Vi har vår test Python -kode fra tidligere som skrives ut til kvitteringsskriveren, og vi har vår testflaskeserver. Så neste må vi kombinere dem og innlemme noen kode som henter dataene fra vår Webhook -applet. La oss lage en ny Python -fil:

nano iot_print_server.py

Og i den, legg til følgende kode:

#! kolbe/beholder/pyton #IMPORTER FLASKEN OG SKRIVERBibliotekene fra kolbeimportflaske, forespørsel fra escpos.printer import Usb #ASSIGN VARIABLES FOR SKRIVEREN OG FLASKEN p = Usb (0x0416, 0x5011) app = Kolbe (_ navn_) #OPRETT 'INDEX' PAGE @app.route ('/') def index (): return 'Din kolbe -server fungerer!' #OPPRETT "SIDE" KALLT "LISTE" FOR UTSKRIFT AV ALEXA SHOPPING LIST @app.route ('/list') def list (): #CAPTURE "GET" DATA FRA IFTTT WEBOOKS content = request.get_data () #CONVERT RAW DATA TO STRING str_content = str (innhold) #DIVIDE DATA INNE SEPERATE LINES str_split = str_content.splitlines () #SEPERATE WORDS BY COMMA AND ADD TO A NEW LIST newlist = for word in str_split: word = word.split (',') newlist.extend (word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip ("b '") for s in newlist] #PRINT HEADER #print ("Shopping List / n") p.text ("Shopping List: / n ") #ENUMERATE AND PRINT HVER ELEMENT I LISTE r = 1 for x i rmv_marks: #print (str (r) +". " + X +" / n ") p.text (str (r) +". " + x + "\ n") r + = 1 #RETURN RESULTATER returnerer 'x' #KJØR PROGRAMMET hvis _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Du kan kjøre den for å se om den returnerer noen feil, men den vil ikke fungere med webhooken vår enda, for nå kjører serveren bare lokalt. Det er ingen ekstern URL for webhook å koble til ennå. Vi kan sette opp portvideresending på ruteren vår og bare bruke vår eksterne IP -adresse, men det er egentlig ikke så sikkert. Som et alternativ bestemmer jeg meg for å gå med NGROK.

Trinn 5: Konfigurere ekstern tilgang med Ngrok

Sette opp ekstern tilgang med Ngrok
Sette opp ekstern tilgang med Ngrok
Sette opp ekstern tilgang med Ngrok
Sette opp ekstern tilgang med Ngrok

Ngrok oppretter en sikker tilkobling til nettverket ditt uten å måtte avsløre din eksterne IP eller rote med portvideresending. Etter at du har registrert deg for en gratis konto, gir den deg et autorisasjonstoken. Deretter kan du laste den ned på Raspberry Pi, pakke den ut, koble til ditt autorisasjonstoken og deretter kjøre den på port 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… pakke ut ngrok-stable-linux-arm./ngrok authtoken [sett inn ditt autent-token her]./ngrok http 5000

*** VIKTIG *** Gratisversjonen av Ngrok gir deg ikke en statisk adresse, så hver gang du kjører Ngrok på nytt, vil den gi deg en annen adresse. Hvis du vil ha en statisk adresse slik at du ikke trenger å fortsette å redigere Webhook, må du betale for en oppgradert konto.

Et gratis alternativ til Ngrok som tilbyr statiske IP -er kalles "Serveo" på www.serveo.net

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

På den resulterende skjermen gir den deg en videresendingsadresse (https://random-string.ngrok.io) som du kan bruke i vår Webhook-applet. Så gå tilbake til "If This Then That", i URL -feltet, skriv inn Ngrok -videresendingsadressen og pek den på "listen" -siden på vår Flask -server. Det skal se slik ut

random_string.ngrok.io/list

Så fortsett og lagre endringene.

For å teste det, hold Ngrok i gang, åpne en ny terminal og kjør python -skriptet vårt. Når begge elementene kjører, spør Alexa hva som står på handlelisten din. Etter et minutt eller to skal det skrive ut resultatene. Hvis du vil at den skal skrives ut umiddelbart, går du til Applet på IFTTT og klikker på "Sjekk nå". Hvis alt går bra, bør kvitteringsskriveren skrive ut det som står på handlelisten din! Den siste koden vi må legge til er en måte å autostarte ngrok og vår kolbe -server hver gang Pi starter. Vi kan enkelt gjøre det ved å gjøre Python -skriptet kjørbart:

chmod +x iot_print_server.py

Deretter kan vi redigere vår /etc/rc.local -fil slik at den ser slik ut:

## Som standard gjør dette skriptet ingenting. # Skriv ut IP -adressen _IP = $ (vertsnavn -I) || true if ["$ _IP"]; deretter printf "Min IP -adresse er %s / n" "$ _IP" fi #autostart ngrok og pek den på din authent file./home/pi/ngrok/ngrok http -config =/home/pi/.ngrok2/ngrok. yml 5000 #autostart skriverens python -skript sudo python3 /home/pi/iot_receipt_printer.py og avslutt 0

Trinn 6: Legge til Pi i skriveren

Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren
Legge til Pi i skriveren

Kvitteringsskriveren jeg har har mye tom plass inne i kabinettet. Og med at Raspberry Pi Zero er så liten som den, tenkte jeg at det ville være kult bare å gjemme den i kvitteringsskriveren slik at den ser ut som en enhet. Det eneste problemet er at kvitteringsskriveren kjører på 12v og Pi kjører på 5v. Så hvis vi bare vil at én strømkabel skal drive begge to, må vi trappe ned den 12 V strømforsyningen til 5 V.

Ved hjelp av en 7805 spenningsregulator, en 1uf kondensator og en 10uf kondensator, klarte jeg å lage en enkel 5v regulator som jeg koblet til logikkortet til kvitteringsskriveren. Jeg loddet "-" ledningen til felles bakken, og deretter loddet jeg "+" ledningen til "på" siden av strømbryteren slik at Pi skulle slås på og av når skriveren ble slått på og av. Ved hjelp av en multimeter testet jeg for å bekrefte at utgangen var trygg for Pi. Deretter loddet jeg på en mikro-usb-kabel og koblet den til Pi. Etter å ha koblet kabelen til skriveren og snu bryteren, slo både skriveren og Pi på!

Til slutt boret jeg et hull for å koble USB -kabelen fra Pi til skriveren. Jeg fant et sted å sette 5v -regulatoren og Pi inne i skriverkassen, og så satte jeg alt sammen igjen. Så nå har skriveren sin egen, selvstendige webserver også!

Trinn 7: Ta det videre

Tar det videre
Tar det videre

Hvis du var i stand til å se på "If This Then That", har du sannsynligvis lagt merke til at den har tonnevis med forskjellige webtjenester å koble til. Så hvis du ikke har en Alexa, eller ikke bryr deg om å bruke en, kan du bruke dette prosjektet til å skrive ut omtrent alt, for eksempel Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, etc. Du finner koden min for utskrift av tweets på min Github -side. Gå nå og se hva du kan finne på!

IoT -utfordring
IoT -utfordring
IoT -utfordring
IoT -utfordring

Førstepremie i IoT Challenge

Anbefalt: