Inhaltsverzeichnis:

Alexa-Drucker - Upcycled Bondrucker - Gunook
Alexa-Drucker - Upcycled Bondrucker - Gunook

Video: Alexa-Drucker - Upcycled Bondrucker - Gunook

Video: Alexa-Drucker - Upcycled Bondrucker - Gunook
Video: IKEA Alex Hack! DIY Faux Apothecary Cabinet. Home Office Update! 2024, Juni
Anonim
Image
Image
Alexa-Drucker | Upcycled Bondrucker
Alexa-Drucker | Upcycled Bondrucker

Ich bin ein Fan davon, alte Technik zu recyceln und wieder nützlich zu machen. Vor einiger Zeit hatte ich einen alten, billigen Thermo-Belegdrucker erworben und suchte nach einer nützlichen Möglichkeit, ihn wiederzuverwenden. Dann, über die Feiertage, wurde mir ein Amazon Echo Dot geschenkt, und eine der Funktionen, die ich am häufigsten verwendet habe, war das Hinzufügen von Lebensmitteln zu meiner Einkaufsliste. Also dachte ich mir, es wäre cool, die beiden zu kombinieren und den Quittungsdrucker als IOT-Drucker für Alexa (oder Google Home oder Siri usw.) zu verwenden. Mal sehen, was es braucht, um diese Idee Wirklichkeit werden zu lassen.

Lieferungen

Hier sind die Teile, die ich für dieses Projekt verwende:

  1. Günstiger generischer Thermobondrucker (muss ESC-POS unterstützen)
  2. Amazon Alexa Device (andere "Home Assistant" -Geräte werden wahrscheinlich auch funktionieren)
  3. Raspberry Pi Zero Wireless
  4. 7805 5V-Regler
  5. 10μf Kondensator
  6. 1μf Kondensator

Andere Dinge, die ich für dieses Projekt verwende, sind:

  1. Wenn dies dann das (IFTTT.com)
  2. Lötgeräte

Schritt 1: Einrichten des Raspberry Pi Zero W

Einrichten des Raspberry Pi Zero W
Einrichten des Raspberry Pi Zero W
Einrichten des Raspberry Pi Zero W
Einrichten des Raspberry Pi Zero W
Einrichten des Raspberry Pi Zero W
Einrichten des Raspberry Pi Zero W

Der erste Schritt besteht darin, den alten Bondrucker erneut drucken zu lassen. Ich habe mich wegen des günstigen Preises und der geringen Größe für den Raspberry Pi Zero W als Controller entschieden. Es ist tatsächlich klein genug, um in das Quittungsdruckergehäuse selbst zu passen, es gibt also keine externen Anschlüsse! Der Pi Zero W hat auch Wifi eingebaut, so dass im Grunde alles in seine geringe Größe integriert ist.

Um den Pi zum Laufen zu bringen, müssen wir das Raspbian OS herunterladen und mit einem Programm wie Etcher auf eine microSD-Karte brennen. Stecken Sie es zusammen mit einem HDMI-Kabel, einer Tastatur, einer Maus und einer Stromversorgung in den Pi ein.

Wenn der Pi hochfährt und Sie sich auf der Desktop-Oberfläche befinden, können Sie eine Verbindung zu Ihrem WLAN herstellen, indem Sie oben rechts auf das WLAN-Symbol klicken und den Namen Ihrer WLAN-Verbindung auswählen. Wenn Sie dann mit der rechten Maustaste auf dasselbe WLAN-Symbol klicken, können Sie zu den Netzwerkeinstellungen gehen und eine statische IP-Adresse festlegen, damit wir uns einfach über das Netzwerk damit verbinden können. Schließlich möchten Sie auf das Hauptmenü klicken und den "Raspbian-Konfigurationseditor" auswählen und unter der Registerkarte "Schnittstellen" sicherstellen, dass SSH aktiviert ist. Speichern Sie es dann und starten Sie Ihren Pi neu.

Schritt 2: Drucken vom Pi

Drucken vom Pi
Drucken vom Pi
Drucken vom Pi
Drucken vom Pi

Sobald der Raspbery Pi neu gestartet wurde, sollte er mit einer statischen IP und mit aktiviertem SSH mit Ihrem drahtlosen Netzwerk verbunden sein. Jetzt sollten wir in der Lage sein, von jedem anderen Computer aus eine Remote-Verbindung herzustellen. Dazu benötigen Sie einen SSH-Client. Für Windows ist Putty ein guter Client. Sie können eine Verbindung mit der statischen IP-Adresse des Pi herstellen, die wir zuvor festgelegt haben. Dann können Sie sich mit "pi" als Benutzernamen und "raspberry" als Passwort anmelden.

Nach einem erfolgreichen Login sollten wir nun an der Terminalschnittstelle des Pi sein. Hier können wir Befehle eingeben, die auf dem Raspberry Pi ausgeführt werden. Als erstes möchten wir beispielsweise sicherstellen, dass die Software auf dem Pi auf dem neuesten Stand ist. Im Terminal können wir also Folgendes eingeben:

sudo apt-get update

Dieser Befehl aktualisiert die Software-Repositorys auf dem Pi. Als nächstes können wir die ESC-POS-Druckersoftware und die erforderlichen Bibliotheken installieren.

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

Damit können wir den Drucker nun (mithilfe eines Adapters) an den Micro-USB-Anschluss des Pi anschließen und einschalten. Dann können wir in unserem Terminal ein kleines Python-Skript erstellen

nano hello_world.py

Und darin können wir diesen Python-Code hinzufügen

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

Beenden Sie es (STRG-X), speichern Sie es (STRG-Y) und führen Sie es aus, um es zu testen

python3 hello_world.py

Schritt 3: Herstellen einer Verbindung mit dem Internet der Dinge (Teil 1)

Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)
Verbindung mit dem Internet der Dinge (Teil 1)

Was nützt ein Drucker ohne etwas zu drucken? Ich wollte Funktionen zum Drucken von verschiedenen Internetdiensten wie Alexa aktivieren. Wie kann ich das erreichen? Eine Möglichkeit besteht darin, einen bestimmten Internetdienst auszuwählen, seine API-Dokumentation aufzuspüren und eine Anwendung basierend auf seiner API zu schreiben. Aber ich entscheide mich für den faulen Weg…

Es gibt eine großartige Website namens "If This Then That", die Aktionen für verschiedene Internetdienste (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter usw.) basierend auf einer Reihe von Kriterien auslöst. Zum Beispiel "wenn" ich auf Facebook poste (dies), "Dann" schicke mir eine E-Mail (das).

In der ersten Hälfte habe ich mich also für ein kostenloses Konto angemeldet. Sie können damit beginnen, ein neues "Applet" für die verschiedenen Dienste zu erstellen, die Sie auslösen möchten. Der "This"-Teil meines Applets wird Alexa sein. Es gibt viele Alexa-Trigger zur Auswahl, aber ich werde den auswählen, der sagt "Fragen Sie, was auf Ihrer Einkaufsliste steht". Und wir wollen letztendlich, dass es ein Python-Skript auf dem Raspberry Pi auslöst, also möchten wir für den "Das"-Teil des Skripts Webhooks auswählen.

In der Option Webhooks können wir eine URL hinzufügen, die auf unseren Pi verweist, worauf wir später zurückkommen. Wir können das Feld Methode bei "Get" belassen und als Inhaltstyp "Plain Text" auswählen. Klicken Sie für das Feld Körper auf "Zutat hinzufügen" und wählen Sie "Gesamte Liste". Dadurch wird die gesamte Einkaufsliste als Get-Anfrage gesendet.

Schritt 4: Herstellen einer Verbindung mit dem Internet der Dinge (Teil 2)

Verbindung mit dem Internet der Dinge (Teil 2)
Verbindung mit dem Internet der Dinge (Teil 2)
Verbindung mit dem Internet der Dinge (Teil 2)
Verbindung mit dem Internet der Dinge (Teil 2)

Der vorherige Schritt kümmert sich um den "Internet"-Teil, also können wir jetzt mit dem Raspberry Pi am "Dinge"-Teil arbeiten. Um mit dem "If This Then That"-Webhooks-Applet zu kommunizieren, müssen wir einen Webserver auf dem Raspberry Pi einrichten. Es gibt viele verschiedene Möglichkeiten, einen Webserver einzurichten, aber da ich letztendlich ein Python-Skript ausführen möchte, habe ich mich für den Flask-Server von Python entschieden.

Auf dem Pi sind alle Flask-Bibliotheken vorinstalliert, wir müssen also nur mit dem Schreiben eines Testskripts beginnen:

Nano-Flasche_test.py

Und darin fügen wir Code hinzu, der eine einfache Webseite bedient.

#!flask/bin/python#IMPORT THE FLASK LIBRARIES from Flask import Flask, request #CREATE A FLASK VARIABLE app = Flask(_name_) #CREATE AN 'INDEX' PAGE @app.route('/') def index(): return 'Ihr Flask-Server funktioniert!' #FÜHREN SIE DAS PROGRAMM AUS, wenn _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Speichern Sie nun einfach das Programm und führen Sie es mit diesem Befehl aus:

sudo python3 kolben_test.py

Sie sehen an der Befehlsantwort, dass der Standardport, auf dem Flask läuft, Port 5000 ist. Wenn Sie also in einem Webbrowser die IP-Adresse Ihres Pi eingeben: 5000, sollten Sie den Text "Ihr Flask-Server funktioniert!"

Wir haben unseren Test-Python-Code von früher, der auf unserem Quittungsdrucker gedruckt wird, und wir haben unseren Test-Flask-Server. Als nächstes müssen wir sie also kombinieren und Code integrieren, der die Daten aus unserem Webhook-Applet abruft. Lassen Sie uns eine neue Python-Datei erstellen:

nano iot_print_server.py

Fügen Sie darin den folgenden Code hinzu:

#!flask/bin/python#IMPORT DER FLASK- UND DRUCKERBIBLIOTHEK von Flask Import Flask, Anforderung von escpos.printer import Usb #ASSIGN VARIABLES FOR DRUCKER UND FLASK p = Usb(0x0416, 0x5011) app = Flask(_name_) #CREATE 'INDEX' SEITE @app.route('/') def index(): return 'Ihr Flask-Server funktioniert!' #CREATE "SEITE" GENANNT "LIST" ZUM DRUCKEN DER ALEXA-EINKAUFSLISTE @app.route('/list') def list(): #CAPTURE "GET" DATEN VON IFTTT WEBOOKS content = request.get_data() #CONVERT RAW DATA TO STRING str_content = str(content) #DIVIDE DATA IN TO SEPERATE LINES str_split = str_content.splitlines() #TRENNEN WÖRTER DURCH KOMMA UND HINZUFÜGEN ZU EINER NEUEN LISTE newlist = für Wort in str_split: word = word.split(', ') newlist.extend(word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip("b'") für s in newlist] #PRINT HEADER #print("Einkaufsliste\n") p.text("Einkaufsliste:\n ") #AUFZEICHNEN UND JEDES EINZELTEIL IN DER LISTE DRUCKEN r = 1 für x in rmv_marks: #print(str(r) + ". " + x + "\n") p.text(str(r) + ". " + x + "\n") r += 1 #RETURN RESULTS return 'x' #RUN THE PROGRAM if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Sie können es ausführen, um zu sehen, ob Fehler zurückgegeben werden, aber es funktioniert noch nicht mit unserem Webhook, da der Server derzeit nur lokal ausgeführt wird. Es gibt noch keine externe URL, mit der der Webhook eine Verbindung herstellen kann. Wir könnten auf unserem Router eine Portweiterleitung einrichten und einfach unsere nach außen gerichtete IP-Adresse verwenden, aber das ist nicht wirklich sicher. Als Alternative entscheide ich mich für NGROK.

Schritt 5: Einrichten des externen Zugriffs mit Ngrok

Externen Zugriff mit Ngrok. einrichten
Externen Zugriff mit Ngrok. einrichten
Externen Zugriff mit Ngrok. einrichten
Externen Zugriff mit Ngrok. einrichten

Ngrok stellt eine sichere Verbindung zu Ihrem Netzwerk her, ohne dass Sie Ihre externe IP preisgeben oder mit der Portweiterleitung herumspielen müssen. Nachdem Sie sich für ein kostenloses Konto angemeldet haben, erhalten Sie ein Autorisierungstoken. Dann können Sie es auf Ihrem Raspberry Pi herunterladen, entpacken, Ihr Authentifizierungstoken verbinden und es dann auf Port 5000 ausführen:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… entpacken ngrok-stable-linux-arm./ngrok authtoken [fügen Sie hier Ihren Auth-Token ein]./ngrok http 5000

***WICHTIG***Die kostenlose Version von Ngrok gibt Ihnen keine statische Adresse, daher wird Ihnen jedes Mal, wenn Sie Ngrok erneut ausführen, eine andere Adresse zugewiesen. Wenn Sie eine statische Adresse wünschen, damit Sie Ihren Webhook nicht ständig neu bearbeiten müssen, müssen Sie für ein aktualisiertes Konto bezahlen.

Eine kostenlose Alternative zu Ngrok, die statische IPs anbietet, heißt "Serveo" auf www.serveo.net

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

Auf dem resultierenden Bildschirm erhalten Sie eine Weiterleitungsadresse (https://random-string.ngrok.io), die wir in unserem Webhook-Applet verwenden können. Gehen Sie also zurück zu "If This Then That", geben Sie im URL-Feld Ihre Ngrok-Weiterleitungsadresse ein und verweisen Sie sie auf die Seite "Liste" auf unserem Flask-Server. So sollte es aussehen

random_string.ngrok.io/list

Fahren Sie dann fort und speichern Sie die Änderungen.

Um es zu testen, lassen Sie Ngrok laufen, öffnen Sie ein neues Terminal und führen Sie unser Python-Skript aus. Fragen Sie Alexa, während beide Elemente ausgeführt werden, was auf Ihrer Einkaufsliste steht. Nach ein oder zwei Minuten sollten die Ergebnisse ausgedruckt werden. Wenn Sie es sofort drucken möchten, gehen Sie einfach zu Ihrem Applet auf IFTTT und klicken Sie auf "Jetzt prüfen". Wenn alles gut geht, sollte der Quittungsdrucker ausdrucken, was auf Ihrer Einkaufsliste steht! Der letzte Code, den wir hinzufügen müssen, ist eine Möglichkeit, ngrok und unseren Flaschenserver bei jedem Start des Pi automatisch zu starten. Das können wir ganz einfach tun, indem wir unser Python-Skript ausführbar machen:

chmod +x iot_print_server.py

Dann können wir unsere Datei /etc/rc.local so bearbeiten, dass sie wie folgt aussieht:

## Standardmäßig macht dieses Skript nichts. # IP-Adresse ausgeben _IP=$(hostname -I) || true if ["$_IP"]; dann printf "Meine IP-Adresse ist %s\n" "$_IP" fi #autostart ngrok und zeigen Sie auf Ihre Authentifizierungsdatei./home/pi/ngrok/ngrok http -config=/home/pi/.ngrok2/ngrok. yml 5000 #autostart des Drucker-Python-Skripts sudo python3 /home/pi/iot_receipt_printer.py & beenden 0

Schritt 6: Hinzufügen des Pi zum Drucker

Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker
Hinzufügen des Pi zum Drucker

Der Bondrucker, den ich habe, hat viel Platz im Inneren des Gehäuses. Und da der Raspberry Pi Zero so klein ist, dachte ich, es wäre cool, ihn einfach im Bondrucker zu verstecken, damit er wie ein Gerät aussieht. Das einzige Problem ist, dass der Quittungsdrucker mit 12V und der Pi mit 5V läuft. Wenn wir also nur ein Stromkabel wollen, um beide mit Strom zu versorgen, müssen wir das 12-V-Netzteil auf 5 V reduzieren.

Mit einem 7805-Spannungsregler, einem 1uf-Kondensator und einem 10uf-Kondensator konnte ich einen einfachen 5-V-Regler erstellen, den ich an die Logikplatine des Bondruckers schloss. Ich lötete das "-" -Kabel an die gemeinsame Masse und dann das "+" -Kabel an die "Ein" -Seite des Netzschalters, damit der Pi ein- und ausschaltete, wenn der Drucker ein- und ausgeschaltet wurde. Mit einem Multimeter habe ich getestet, um zu bestätigen, dass die Ausgabe für den Pi sicher ist. Dann habe ich ein Micro-USB-Kabel angelötet und mit dem Pi verbunden. Nach dem Einstecken des Kabels in den Drucker und dem Umlegen des Schalters schalteten sich sowohl der Drucker als auch der Pi ein!

Schließlich bohrte ich ein Loch, um das USB-Kabel vom Pi mit dem Drucker zu verbinden. Ich habe einen Platz gefunden, um den 5V-Regler und das Pi in das Druckergehäuse zu legen, und dann habe ich alles wieder zusammengebaut. Jetzt hat der Drucker also auch einen eigenen, eigenständigen Webserver!

Schritt 7: Weitermachen

Weiter gehen
Weiter gehen

Wenn Sie sich "If This Then That" ansehen konnten, haben Sie wahrscheinlich bemerkt, dass es unzählige verschiedene Webdienste gibt, mit denen Sie sich verbinden können. Wenn Sie also keine Alexa haben oder keine verwenden möchten, können Sie dieses Projekt verwenden, um von fast allem zu drucken, wie Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, etc. Meinen Code zum Ausdrucken von Tweets findet ihr auf meiner Github-Seite. Gehen Sie jetzt und sehen Sie, was Sie sich einfallen lassen können!

IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung

Erster Preis bei der IoT Challenge

Empfohlen: