Sommario:

Stampante Alexa - Stampante per ricevute riciclata: 7 passaggi (con immagini)
Stampante Alexa - Stampante per ricevute riciclata: 7 passaggi (con immagini)

Video: Stampante Alexa - Stampante per ricevute riciclata: 7 passaggi (con immagini)

Video: Stampante Alexa - Stampante per ricevute riciclata: 7 passaggi (con immagini)
Video: 4 SITI PAZZESCHI CHE NON DOVRESTI MAI VISITARE 2024, Dicembre
Anonim
Image
Image
Stampante Alexa | Stampante per ricevute riciclata
Stampante Alexa | Stampante per ricevute riciclata

Sono un fan del riciclaggio della vecchia tecnologia e del renderla di nuovo utile. Qualche tempo fa avevo acquistato una vecchia stampante termica per ricevute economica e volevo un modo utile per riutilizzarla. Poi, durante le vacanze, mi è stato regalato un Amazon Echo Dot e una delle funzionalità che ho usato di più è stata l'aggiunta di generi alimentari alla mia lista della spesa. Quindi ho pensato che sarebbe stato bello combinare i due e utilizzare la stampante per ricevute come stampante IOT per Alexa (o Google Home, o Siri, ecc.). Vediamo cosa ci vorrà per rendere questa idea una realtà.

Forniture

Ecco le parti che uso per questo progetto:

  1. Stampante termica generica per ricevute economica (deve supportare ESC-POS)
  2. Dispositivo Amazon Alexa (probabilmente funzioneranno anche altri dispositivi "assistente domestico")
  3. Raspberry Pi Zero Wireless
  4. 7805 Regolatore 5v
  5. Condensatore 10μf
  6. Condensatore da 1μf

Altre cose che uso per questo progetto sono:

  1. Se questo, allora quello (IFTTT.com)
  2. Attrezzatura per saldatura

Passaggio 1: configurazione del Raspberry Pi Zero W

Configurazione del Raspberry Pi Zero W
Configurazione del Raspberry Pi Zero W
Configurazione del Raspberry Pi Zero W
Configurazione del Raspberry Pi Zero W
Configurazione del Raspberry Pi Zero W
Configurazione del Raspberry Pi Zero W

Il primo passo è far stampare nuovamente la vecchia stampante per ricevute. Ho scelto di utilizzare il Raspberry Pi Zero W come controller a causa del suo prezzo economico e delle dimensioni ridotte. In realtà è abbastanza piccolo da stare all'interno della stessa custodia della stampante per ricevute, quindi non ci sono connessioni esterne! Il Pi Zero W ha anche il Wifi integrato, quindi tutto è fondamentalmente integrato nelle sue piccole dimensioni.

Per far funzionare il Pi, dobbiamo scaricare il sistema operativo Raspbian e masterizzarlo su una scheda microSD utilizzando un programma come Etcher. Inseriscilo nel Pi insieme a un cavo HDMI, tastiera, mouse e quindi alimentazione.

Quando il Pi si avvia e sei nell'interfaccia desktop, puoi connetterti al tuo wireless facendo clic sull'icona wireless in alto a destra e selezionando il nome della tua connessione wireless. Quindi, se fai clic con il pulsante destro del mouse sulla stessa icona wireless, puoi andare alle impostazioni di rete e impostare un indirizzo IP statico in modo che possiamo connetterci facilmente tramite la rete. Infine, fai clic sul menu principale e seleziona "Raspbian Configuration Editor" e nella scheda "Interfacce", assicurati che SSH sia abilitato. Quindi salvalo e riavvia il tuo Pi.

Passaggio 2: stampa dal PI

Stampa dal Pi
Stampa dal Pi
Stampa dal Pi
Stampa dal Pi

Una volta riavviato il Raspbery Pi, dovrebbe essere connesso alla rete wireless con un IP statico e con SSH abilitato. Quindi ora dovremmo essere in grado di connetterci in remoto da qualsiasi altro computer. Per farlo, avrai bisogno di un client SSH. Per Windows, un buon client è Putty. Puoi connetterti ad esso utilizzando l'indirizzo IP statico del Pi che abbiamo impostato in precedenza. Quindi puoi accedere utilizzando "pi" come nome utente e "raspberry" come password.

Dopo un login riuscito, ora dovremmo essere nell'interfaccia del terminale di Pi. Qui possiamo digitare i comandi che verranno eseguiti sul Raspberry Pi. Ad esempio, una delle prime cose che vogliamo fare è assicurarci che il software sul Pi sia aggiornato. Quindi, nel terminale possiamo digitare:

sudo apt-get update

Questo comando aggiornerà i repository software sul Pi. Successivamente, possiamo installare il software della stampante ESC-POS e le librerie richieste.

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

Fatto ciò, ora possiamo collegare la stampante alla porta Micro-USB del Pi (usando un adattatore) e accenderla. Quindi nel nostro terminale possiamo creare un piccolo script python

nano ciao_mondo.py

E in esso possiamo aggiungere questo codice Python

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

Esci (CTRL-X), salvalo (CTRL-Y) ed eseguilo per testarlo

python3 ciao_mondo.py

Passaggio 3: connessione a Internet of Things (parte 1)

Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)
Connessione all'Internet delle cose (Parte 1)

A cosa servirebbe una stampante senza qualcosa da stampare? Volevo abilitare la funzionalità per stampare da diversi servizi Internet, come Alexa. Quindi come posso farlo? Un'opzione è quella di scegliere un servizio Internet specifico, rintracciare la loro documentazione API e scrivere un'applicazione basata sulla loro API. Ma scelgo di seguire la strada pigra…

C'è un ottimo sito web chiamato "If This Then That" che attiva azioni per diversi servizi Internet (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter, ecc.) In base a una serie di criteri. Ad esempio, "se" pubblico su Facebook (questo), "allora" inviami un'e-mail (quello).

Quindi, per la prima metà di questo, ho registrato un account gratuito, puoi iniziare a creare una nuova "applet" per i diversi servizi che desideri attivare. La parte "Questo" della mia applet sarà Alexa. Ci sono molti trigger di Alexa tra cui scegliere, ma selezionerò quello che dice "Chiedi cosa c'è nella tua lista della spesa". E alla fine vogliamo che attivi uno script Python sul Raspberry Pi, quindi per la parte "Quella" dello script, vogliamo scegliere Webhooks.

Nell'opzione Webhook, possiamo aggiungere un URL che punta al nostro Pi, su cui torneremo in seguito. Possiamo lasciare il campo Metodo come "Ottieni" e per il tipo di contenuto selezionare "Testo normale". Per il campo Corpo, fai clic su "Aggiungi ingrediente" e seleziona "Elenco intero". Questo invierà l'intera lista della spesa come una richiesta Get.

Passaggio 4: connessione a Internet of Things (parte 2)

Connessione all'Internet delle cose (parte 2)
Connessione all'Internet delle cose (parte 2)
Connessione all'Internet delle cose (parte 2)
Connessione all'Internet delle cose (parte 2)

Il passaggio precedente si occupa della parte "Internet", quindi ora lavoriamo sulla parte "cose" utilizzando il Raspberry Pi. Per comunicare con l'applet webhook "If This Then That", è necessario configurare un server Web sul Raspberry Pi. Esistono molti modi diversi per configurare un server Web, ma considerando che alla fine voglio eseguire uno script Python, ho deciso di utilizzare il server Flask di Python.

Il Pi ha tutte le librerie Flask preinstallate, quindi tutto ciò che dobbiamo fare è iniziare a scrivere uno script di test:

nano flask_test.py

E in esso, aggiungiamo del codice che serve una semplice pagina web.

#!flask/bin/python#IMPORTA LE LIBRERIE FLASK from flask import Flask, request #CREATE A FLASK VARIABLE app = Flask(_name_) #CREATE AN 'INDEX' PAGE @app.route('/') def index(): return 'Il tuo server Flask funziona!' #ESEGUI IL PROGRAMMA if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Ora salva il programma ed eseguilo usando questo comando:

sudo python3 flask_test.py

Vedrai dalla risposta al comando che la porta predefinita su cui viene eseguito Flask è la porta 5000. Quindi in un browser Web, se digiti l'indirizzo IP del tuo Pi: 5000, dovresti vedere il testo "Il tuo server Flask funziona!"

Abbiamo il nostro codice Python di prova di prima che viene stampato sulla nostra stampante per ricevute e abbiamo il nostro server Flask di prova. Quindi dobbiamo combinarli e incorporare del codice che estrae i dati dalla nostra applet Webhook. Creiamo un nuovo file Python:

nano iot_print_server.py

E al suo interno, aggiungi il seguente codice:

#!flask/bin/python#IMPORTA LE LIBRERIE FLASK E STAMPANTI from flask import Flask, richiesta da escpos.printer import Usb #ASSEGNA VARIABILI PER LA STAMPANTE E FLASK p = Usb(0x0416, 0x5011) app = Flask(_name_) #CREATE 'INDEX' PAGE @app.route('/') def index(): return 'Il tuo server Flask funziona!' #CREATE "PAGINA" CHIAMATA "LISTA" PER LA STAMPA DELLA LISTA DELLA SPESA ALEXA @app.route('/list') def list(): #CAPTURE "OTTIENI" DATI DAI WEBOOK IFTTT content = request.get_data() #CONVERTI DATI RAW IN STRINGA str_content = str(content) #DIVIDI I DATI IN RIGHE SEPARATE str_split = str_content.splitlines() #SEPARA LE PAROLE PER VIRGOLA E AGGIUNGI A UN NUOVO ELENCO 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("Lista della spesa\n") p.text("Lista della spesa:\n ") #ENUMERATE E STAMPA OGNI ELEMENTO DELLA LISTA r = 1 for x in rmv_marks: #print(str(r) + ". " + x + "\n") p.text(str(r) + ". " + x + "\n") r += 1 #RETURN RESULTS return 'x' #ESEGUI IL PROGRAMMA if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Puoi eseguirlo per vedere se restituisce errori, ma non funzionerà ancora con il nostro webhook perché al momento il server è in esecuzione solo localmente. Non esiste ancora un URL esterno a cui connettersi il webhook. Potremmo impostare il port forwarding sul nostro router e utilizzare semplicemente il nostro indirizzo IP esterno, ma non è molto sicuro. In alternativa, decido di andare con NGROK.

Passaggio 5: configurazione dell'accesso esterno con Ngrok

Configurazione dell'accesso esterno con Ngrok
Configurazione dell'accesso esterno con Ngrok
Configurazione dell'accesso esterno con Ngrok
Configurazione dell'accesso esterno con Ngrok

Ngrok configura una connessione sicura alla tua rete senza dover esporre il tuo IP esterno o fare confusione con il port forwarding. Dopo esserti registrato per un account gratuito, ti dà un token di autorizzazione. Quindi sul tuo Raspberry Pi, puoi scaricarlo, decomprimerlo, connettere il tuo token di autenticazione e quindi eseguirlo sulla porta 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… unzip ngrok-stable-linux-arm./ngrok authtoken [inserisci qui il tuo token di autenticazione]./ngrok http 5000

***IMPORTANTE*** La versione gratuita di Ngrok non ti dà un indirizzo statico, quindi ogni volta che riesegui Ngrok, ti darà un indirizzo diverso. Se desideri un indirizzo statico in modo da non dover continuare a modificare nuovamente il tuo Webhook, dovrai pagare per un account aggiornato.

Un'alternativa gratuita a Ngrok che offre IP statici si chiama "Serveo" su www.serveo.net

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

Nella schermata risultante, ti dà un indirizzo di inoltro (https://random-string.ngrok.io) che possiamo usare nella nostra applet Webhook. Quindi tornando a "If This Then That", nel campo URL, inserisci il tuo indirizzo di inoltro Ngrok e puntalo alla pagina "elenco" sul nostro server Flask. Dovrebbe assomigliare a qualcosa di simile a questo

random_string.ngrok.io/list

Quindi vai avanti e salva le modifiche.

Per provarlo, mantieni Ngrok in esecuzione, apri un nuovo terminale ed esegui il nostro script python. Con entrambi gli articoli in esecuzione, chiedi ad Alexa cosa c'è nella tua lista della spesa. Dopo un minuto o due, dovrebbe stampare i risultati. Se vuoi che venga stampato immediatamente, vai all'applet su IFTTT e fai clic su "Verifica ora". Se tutto va bene, la stampante per ricevute dovrebbe stampare cosa c'è nella tua lista della spesa! L'ultimo pezzo di codice che dobbiamo aggiungere è un modo per avviare automaticamente ngrok e il nostro server flask ogni volta che il Pi si avvia. Possiamo farlo facilmente rendendo eseguibile il nostro script Python:

chmod +x iot_print_server.py

Quindi possiamo modificare il nostro file /etc/rc.local in modo che assomigli a questo:

## Di default questo script non fa nulla. # Stampa l'indirizzo IP _IP=$(hostname -I) || vero se ["$_IP"]; quindi printf "Il mio indirizzo IP è %s\n" "$_IP" fi #autostart ngrok e puntalo al tuo file di autenticazione./home/pi/ngrok/ngrok http -config=/home/pi/.ngrok2/ngrok. yml 5000 #autostart lo script python della stampante sudo python3 /home/pi/iot_receipt_printer.py & exit 0

Passaggio 6: aggiunta del Pi alla stampante

Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante
Aggiunta del Pi alla stampante

La stampante per ricevute che ho ha molto spazio vuoto all'interno dell'involucro. E dato che il Raspberry Pi Zero è così piccolo, ho pensato che sarebbe stato bello nasconderlo nella stampante per ricevute in modo che assomigli a un unico dispositivo. L'unico problema è che la stampante per ricevute funziona a 12v e il Pi funziona a 5v. Quindi, se vogliamo solo un cavo di alimentazione per alimentare entrambi, dovremo ridurre l'alimentazione da 12 V a 5 V.

Utilizzando un regolatore di tensione 7805, un condensatore da 1 uf e un condensatore da 10 uf, sono riuscito a creare un semplice regolatore da 5 V che ho collegato alla scheda logica della stampante di ricevute. Ho saldato il filo "-" alla massa comune, quindi ho saldato il filo "+" al lato "on" dell'interruttore di alimentazione in modo che il Pi si accendesse e si spegnesse quando la stampante veniva accesa e spenta. Usando un multimetro, ho testato per confermare che l'uscita era sicura per il Pi. Quindi ho saldato un cavo micro-usb e l'ho collegato al Pi. Dopo aver collegato il cavo alla stampante e aver attivato l'interruttore, sia la stampante che il Pi si sono accesi!

Infine, ho praticato un foro per collegare il cavo USB dal Pi alla stampante. Ho trovato un posto dove mettere il regolatore 5v e Pi all'interno della custodia della stampante, e poi ho rimontato tutto. Quindi ora la stampante ha anche il proprio server web autonomo!

Passaggio 7: andare oltre

Prenderlo più lontano
Prenderlo più lontano

Se sei stato in grado di dare un'occhiata a "If This Then That", probabilmente hai notato che ha tonnellate di servizi Web diversi a cui connettersi. Quindi, se non hai un Alexa, o non ti interessa usarne uno, puoi usare questo progetto per stampare da qualsiasi cosa, come Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, ecc. Puoi trovare il mio codice per stampare i Tweet sulla mia pagina Github. Ora vai a vedere cosa riesci a inventare!

Sfida IoT
Sfida IoT
Sfida IoT
Sfida IoT

Primo Premio nella IoT Challenge

Consigliato: