Inhoudsopgave:

Alexa-printer - Upcycled bonprinter - Ajarnpa
Alexa-printer - Upcycled bonprinter - Ajarnpa

Video: Alexa-printer - Upcycled bonprinter - Ajarnpa

Video: Alexa-printer - Upcycled bonprinter - Ajarnpa
Video: I got a receipt printer. 🖨️ Now what? 2024, November
Anonim
Image
Image
Alexa-printer | Upcycled bonprinter
Alexa-printer | Upcycled bonprinter

Ik ben een fan van het recyclen van oude technologie en het weer bruikbaar maken. Een tijdje geleden had ik een oude, goedkope thermische bonprinter aangeschaft en ik wilde een handige manier om hem opnieuw te gebruiken. Toen kreeg ik tijdens de vakantie een Amazon Echo Dot cadeau, en een van de functies die ik het meest gebruikte, was het toevoegen van boodschappen aan mijn boodschappenlijstje. Dus ik dacht dat het cool zou zijn om de twee te combineren en de bonprinter te gebruiken als een IOT-printer voor Alexa (of Google Home, of Siri, enz.). Laten we eens kijken wat er nodig is om dit idee werkelijkheid te laten worden.

Benodigdheden

Dit zijn de onderdelen die ik voor dit project gebruik:

  1. Goedkope generieke thermische bonprinter (moet ESC-POS ondersteunen)
  2. Amazon Alexa Device (andere "home assistant"-apparaten zullen waarschijnlijk ook werken)
  3. Raspberry Pi Nul Draadloos
  4. 7805 5v-regelaar
  5. 10μf condensator
  6. 1μf condensator

Andere dingen die ik gebruik voor dit project zijn:

  1. Als dit dan dat (IFTTT.com)
  2. Soldeerapparatuur

Stap 1: De Raspberry Pi Zero W. instellen

De Raspberry Pi Zero W. instellen
De Raspberry Pi Zero W. instellen
De Raspberry Pi Zero W. instellen
De Raspberry Pi Zero W. instellen
De Raspberry Pi Zero W. instellen
De Raspberry Pi Zero W. instellen

De eerste stap is om de oude bonprinter weer te laten afdrukken. Ik koos ervoor om de Raspberry Pi Zero W als controller te gebruiken vanwege de goedkope prijs en het kleine formaat. Het is eigenlijk klein genoeg om in de bonprinterbehuizing zelf te passen, dus er zijn geen externe verbindingen! De Pi Zero W heeft ook ingebouwde wifi, dus alles is in principe geïntegreerd in zijn kleine formaat.

Om de Pi aan de gang te krijgen, moeten we het Raspbian OS downloaden en het op een microSD-kaart branden met een programma zoals Etcher. Steek hem in de Pi samen met een HDMI-kabel, toetsenbord, muis en dan voeding.

Wanneer de Pi opstart en je bij de desktopinterface bent, kun je verbinding maken met je draadloze netwerk door op het draadloze pictogram in de rechterbovenhoek te klikken en de naam van je draadloze verbinding te selecteren. Als u vervolgens met de rechtermuisknop op datzelfde draadloze pictogram klikt, kunt u naar de netwerkinstellingen gaan en een statisch IP-adres instellen zodat we er gemakkelijk via het netwerk verbinding mee kunnen maken. Ten slotte wil je op het hoofdmenu klikken en de "Raspbian-configuratie-editor" selecteren en onder het tabblad "Interfaces" ervoor zorgen dat SSH is ingeschakeld. Sla het vervolgens op en start uw Pi opnieuw op.

Stap 2: Afdrukken vanaf de Pi

Afdrukken vanaf de Pi
Afdrukken vanaf de Pi
Afdrukken vanaf de Pi
Afdrukken vanaf de Pi

Nadat de Raspbery Pi opnieuw is opgestart, moet deze zijn verbonden met uw draadloze netwerk met een statisch IP-adres en met SSH ingeschakeld. Dus nu zouden we er vanaf elke andere computer op afstand verbinding mee moeten kunnen maken. Om dat te doen, heb je een SSH-client nodig. Voor Windows is Putty een goede client. Je kunt er verbinding mee maken via het statische IP-adres van de Pi dat we eerder hebben ingesteld. Vervolgens kunt u inloggen met "pi" als gebruikersnaam en "raspberry" als wachtwoord.

Na een succesvolle login zouden we nu bij de terminalinterface van de Pi moeten zijn. Hier kunnen we opdrachten typen die op de Raspberry Pi worden uitgevoerd. Een van de eerste dingen die we bijvoorbeeld willen doen, is ervoor zorgen dat de software op de Pi up-to-date is. Dus in de terminal kunnen we typen:

sudo apt-get update

Met deze opdracht worden de softwarebronnen op de Pi bijgewerkt. Vervolgens kunnen we de ESC-POS-printersoftware en de vereiste bibliotheken installeren.

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

Als dat klaar is, kunnen we de printer nu aansluiten op de Micro-USB-poort van de Pi (met behulp van een adapter) en hem inschakelen. Dan kunnen we in onze terminal een klein python-script maken

nano hallo_world.py

En daarin kunnen we deze python-code toevoegen

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

Sluit het af (CTRL-X), sla het op (CTRL-Y) en voer het uit om het uit te testen

python3 hallo_world.py

Stap 3: Verbinding maken met het internet der dingen (deel 1)

Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)
Verbinding maken met het internet der dingen (deel 1)

Wat heb je aan een printer zonder iets om af te drukken? Ik wilde functionaliteit inschakelen om te printen vanaf verschillende internetdiensten, zoals Alexa. Dus hoe kan ik dat bereiken? Een optie is om een specifieke internetdienst te kiezen, hun API-documentatie op te sporen en een applicatie te schrijven op basis van hun API. Maar ik kies ervoor om de luie route te gaan…

Er is een geweldige website genaamd "If This Then That" die acties activeert voor verschillende internetdiensten (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter, enz.) op basis van een reeks criteria. Bijvoorbeeld, "als" ik op Facebook post (this), "Then" stuur me dan een e-mail (dat).

Dus voor de eerste helft hiervan heb ik me aangemeld voor een gratis account, je kunt beginnen met het maken van een nieuwe "applet" voor de verschillende services die je wilt activeren. Het "Dit" deel van mijn applet zal Alexa zijn. Er zijn veel Alexa-triggers om uit te kiezen, maar ik ga degene selecteren die zegt: "Vraag wat er op je boodschappenlijstje staat". En we willen uiteindelijk dat het een Python-script activeert op de Raspberry Pi, dus voor het "Dat" gedeelte van het script willen we Webhooks kiezen.

In de optie Webhooks kunnen we een URL toevoegen die naar onze Pi verwijst, waar we later op terugkomen. We kunnen het veld Methode laten staan op "Get", en voor het inhoudstype "Plain Text" selecteren. Klik voor het veld Body op "Ingrediënt toevoegen" en selecteer "Volledige lijst". Hiermee wordt de hele boodschappenlijst als een Get-verzoek verzonden.

Stap 4: Verbinding maken met het internet der dingen (deel 2)

Verbinding maken met het internet der dingen (deel 2)
Verbinding maken met het internet der dingen (deel 2)
Verbinding maken met het internet der dingen (deel 2)
Verbinding maken met het internet der dingen (deel 2)

De vorige stap zorgt voor het "internet"-gedeelte, dus laten we nu aan het "dingen"-gedeelte werken met behulp van de Raspberry Pi. Om te communiceren met de "If This Then That" webhooks-applet, moeten we een webserver opzetten op de Raspberry Pi. Er zijn veel verschillende manieren om een webserver op te zetten, maar aangezien ik uiteindelijk een Python-script wil draaien, besloot ik de Flask-server van Python te gebruiken.

De Pi heeft alle Flask-bibliotheken vooraf geïnstalleerd, dus we hoeven alleen maar een testscript te schrijven:

nanoflask_test.py

En laten we daarin wat code toevoegen die een eenvoudige webpagina bedient.

#!flask/bin/python#IMPORT DE FLASK BIBLIOTHEKEN van Flask import Flask, verzoek #CREATE A FLASK VARIABLE app = Flask(_name_) #CREATE AN 'INDEX' PAGE @app.route('/') def index(): return 'Uw Flask-server werkt!' #VOER HET PROGRAMMA UIT als _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Sla nu het programma op en voer het uit met deze opdracht:

sudo python3 flask_test.py

U zult aan het commando-antwoord zien dat de standaardpoort waarop Flask draait, poort 5000 is. Dus als u in een webbrowser het IP-adres van uw Pi: 5000 typt, zou u de tekst "Your Flask-server werkt!"

We hebben onze test Python-code van eerder die naar onze bonprinter wordt afgedrukt, en we hebben onze test Flask-server. Dus vervolgens moeten we ze combineren en wat code opnemen die de gegevens uit onze Webhook-applet haalt. Laten we een nieuw Python-bestand maken:

nano iot_print_server.py

En voeg daarin de volgende code toe:

#!flask/bin/python#IMPORT DE FLASK EN PRINTER BIBLIOTHEKEN van flask import Flask, verzoek van escpos.printer import Usb #ASSIGN VARIABELEN VOOR DE PRINTER EN FLASK p = Usb(0x0416, 0x5011) app = Flask(_name_) #CREATE 'INDEX' PAGINA @app.route('/') def index(): return 'Uw Flask-server werkt!' #CREATE "PAGINA" GENOEMD "LIST" VOOR HET AFDRUKKEN VAN ALEXA SHOPPING LIST @app.route('/list') def list(): #CAPTURE "GET" DATA FROM IFTTT WEBOOKS content = request.get_data() #CONVERT RAW DATA TO STRING str_content = str(content) #DIVIDE DATA IN APARTE LIJNEN str_split = str_content.splitlines() #SCHEIDEN WOORDEN DOOR KOMMA EN TOEVOEGEN AAN EEN NIEUWE LIJST newlist = voor woord in str_split: word = word.split(', ') newlist.extend(word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip("b'") voor s in nieuwe lijst] #PRINT HEADER #print("Boodschappenlijst\n") p.text("Boodschappenlijst:\n ") #ENUMERATE EN PRINT ELK ITEM IN LIJST r = 1 voor x in rmv_marks: #print(str(r) + ". " + x + "\n") p.text(str(r) + ". " + x + "\n") r += 1 #RETURN RESULTATEN return 'x' #VOER HET PROGRAMMA UIT if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Je kunt het uitvoeren om te zien of het fouten retourneert, maar het werkt nog niet met onze webhook omdat de server op dit moment alleen lokaal draait. Er is nog geen externe URL waarmee de webhook verbinding kan maken. We kunnen port forwarding op onze router instellen en gewoon ons externe IP-adres gebruiken, maar dat is niet echt te veilig. Als alternatief besluit ik voor NGROK te gaan.

Stap 5: Externe toegang instellen met Ngrok

Externe toegang instellen met Ngrok
Externe toegang instellen met Ngrok
Externe toegang instellen met Ngrok
Externe toegang instellen met Ngrok

Ngrok zet een veilige verbinding met uw netwerk op zonder uw externe IP bloot te leggen of te knoeien met port forwarding. Nadat u zich heeft aangemeld voor een gratis account, krijgt u een autorisatietoken. Vervolgens kun je het op je Raspberry Pi downloaden, uitpakken, je auth-token aansluiten en het vervolgens uitvoeren op poort 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… unzip ngrok-stable-linux-arm./ngrok authtoken [vul hier uw auth-token in]./ngrok http 5000

***BELANGRIJK***De gratis versie van Ngrok geeft je geen statisch adres, dus elke keer dat je Ngrok opnieuw opstart, krijg je een ander adres. Als u een statisch adres wilt, zodat u uw webhook niet steeds opnieuw hoeft te bewerken, dan moet u betalen voor een geüpgraded account.

Een gratis alternatief voor Ngrok dat statische IP's biedt, heet "Serveo" op www.serveo.net

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

Op het resulterende scherm krijgt u een doorstuuradres (https://random-string.ngrok.io) dat u kunt gebruiken in onze Webhook-applet. Dus ga terug naar "Als dit dan dat", in het URL-veld, voer uw Ngrok-doorstuuradres in en wijs het naar de "lijst" -pagina op onze Flask-server. Het zou er ongeveer zo uit moeten zien

random_string.ngrok.io/list

Ga je gang en sla de wijzigingen op.

Om het uit te testen, laat u Ngrok draaien, opent u een nieuwe terminal en voert u ons python-script uit. Terwijl beide items actief zijn, vraag je Alexa wat er op je boodschappenlijstje staat. Na een minuut of twee zou het de resultaten moeten afdrukken. Als u wilt dat het onmiddellijk wordt afgedrukt, gaat u gewoon naar uw Applet op IFTTT en klikt u op "Nu controleren". Als alles goed gaat, zou de bonprinter moeten afdrukken wat er op je boodschappenlijstje staat! Het laatste stukje code dat we moeten toevoegen, is een manier om ngrok en onze kolfserver automatisch te starten elke keer dat de Pi opstart. We kunnen dat eenvoudig doen door ons Python-script uitvoerbaar te maken:

chmod +x iot_print_server.py

Dan kunnen we ons bestand /etc/rc.local bewerken zodat het er als volgt uitziet:

## Standaard doet dit script niets. # Druk het IP-adres af _IP=$(hostnaam -I) || waar als ["$_IP"]; dan printf "Mijn IP-adres is %s\n" "$_IP" fi #autostart ngrok en verwijs het naar uw auth-bestand./home/pi/ngrok/ngrok http -config=/home/pi/.ngrok2/ngrok. yml 5000 #autostart the printer python script sudo python3 /home/pi/iot_receipt_printer.py & exit 0

Stap 6: De Pi toevoegen aan de printer

De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen
De Pi aan de printer toevoegen

De bonprinter die ik heb heeft veel lege ruimte in de behuizing. En aangezien de Raspberry Pi Zero zo klein is als hij is, dacht ik dat het cool zou zijn om hem gewoon in de bonprinter te verbergen, zodat hij eruitziet als één apparaat. Het enige probleem is dat de Bonprinter op 12v werkt en de Pi op 5v. Dus als we maar één voedingskabel willen om ze allebei van stroom te voorzien, moeten we die 12v-voeding terugbrengen naar 5v.

Met behulp van een 7805-spanningsregelaar, een 1uf-condensator en een 10uf-condensator, kon ik een eenvoudige 5v-regelaar maken die ik op de printplaat van de bonprinter verbond. Ik heb de "-" draad aan de gemeenschappelijke aarde gesoldeerd, en toen heb ik de "+" draad aan de "aan" kant van de aan/uit-schakelaar gesoldeerd, zodat de Pi zou in- en uitschakelen wanneer de printer werd in- en uitgeschakeld. Met behulp van een multimeter heb ik getest om te bevestigen dat de uitvoer veilig was voor de Pi. Daarna heb ik een micro-usb-kabel gesoldeerd en op de Pi aangesloten. Nadat de kabel in de printer was gestoken en de schakelaar was omgedraaid, gingen zowel de printer als de Pi aan!

Ten slotte heb ik een gat geboord om de USB-kabel van de Pi op de printer aan te sluiten. Ik vond een plek om de 5v-regelaar en Pi in de printerbehuizing te plaatsen, en toen heb ik alles weer in elkaar gezet. Dus nu heeft de printer ook zijn eigen onafhankelijke webserver!

Stap 7: Verder gaan

Verder gaan
Verder gaan

Als je "If This Then That" hebt kunnen bekijken, heb je waarschijnlijk gemerkt dat het talloze verschillende webservices heeft om verbinding mee te maken. Dus als je geen Alexa hebt, of er geen wilt gebruiken, kun je dit project gebruiken om van zo ongeveer alles af te drukken, zoals Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, enz. Je kunt mijn code voor het afdrukken van Tweets vinden op mijn Github-pagina. Ga nu kijken wat je kunt bedenken!

IoT-uitdaging
IoT-uitdaging
IoT-uitdaging
IoT-uitdaging

Eerste prijs in de IoT Challenge

Aanbevolen: