Spisu treści:

Drukarka Alexa - Upcycled drukarka pokwitowań: 7 kroków (ze zdjęciami)
Drukarka Alexa - Upcycled drukarka pokwitowań: 7 kroków (ze zdjęciami)

Wideo: Drukarka Alexa - Upcycled drukarka pokwitowań: 7 kroków (ze zdjęciami)

Wideo: Drukarka Alexa - Upcycled drukarka pokwitowań: 7 kroków (ze zdjęciami)
Wideo: Портативный мини-принтер с AliExpress/ НАХОДКИ С ALIEXPRESS 2024, Czerwiec
Anonim
Image
Image
Drukarka Alexa | Upcycled drukarka pokwitowań
Drukarka Alexa | Upcycled drukarka pokwitowań

Jestem fanem recyklingu starej technologii i przywracania jej użyteczności. Jakiś czas temu nabyłem starą, tanią termiczną drukarkę paragonów i chciałem wykorzystać ją w użyteczny sposób. Potem, w czasie wakacji, dostałem kropkę Amazon Echo Dot, a jedną z funkcji, z których najczęściej korzystałem, było dodawanie artykułów spożywczych do mojej listy zakupów. Pomyślałem więc, że fajnie byłoby połączyć te dwa i użyć drukarki paragonów jako drukarki IOT dla Alexy (lub Google Home lub Siri itp.). Zobaczmy, co trzeba zrobić, aby ten pomysł stał się rzeczywistością.

Kieszonkowe dzieci

Oto części, których używam w tym projekcie:

  1. Tania generyczna termiczna drukarka paragonów (musi obsługiwać ESC-POS)
  2. Urządzenie Amazon Alexa (inne urządzenia „asystenta domowego” prawdopodobnie również będą działać)
  3. Raspberry Pi Zero Wireless
  4. 7805 Regulator 5v
  5. Kondensator 10μf
  6. Kondensator 1μf

Inne rzeczy, których używam w tym projekcie to:

  1. Jeśli to, to tamto (IFTTT.com)
  2. Sprzęt lutowniczy

Krok 1: Konfiguracja Raspberry Pi Zero W

Konfiguracja Raspberry Pi Zero W
Konfiguracja Raspberry Pi Zero W
Konfiguracja Raspberry Pi Zero W
Konfiguracja Raspberry Pi Zero W
Konfiguracja Raspberry Pi Zero W
Konfiguracja Raspberry Pi Zero W

Pierwszym krokiem jest ponowne wydrukowanie starej drukarki paragonów. Wybrałem Raspberry Pi Zero W jako kontrolera ze względu na jego niską cenę i mały rozmiar. W rzeczywistości jest wystarczająco mały, aby zmieścić się w samej obudowie drukarki paragonów, więc nie ma połączeń zewnętrznych! Pi Zero W ma również wbudowane Wi-Fi, więc wszystko jest w zasadzie zintegrowane z jego niewielkimi rozmiarami.

Aby uruchomić i uruchomić Pi, musimy pobrać system operacyjny Raspbian i nagrać go na kartę microSD za pomocą programu takiego jak Etcher. Włóż go do Pi wraz z kablem HDMI, klawiaturą, myszą, a następnie zasilaniem.

Gdy Pi uruchamia się i jesteś w interfejsie pulpitu, możesz połączyć się z siecią bezprzewodową, klikając ikonę sieci bezprzewodowej w prawym górnym rogu i wybierając nazwę połączenia bezprzewodowego. Następnie, jeśli klikniesz prawym przyciskiem myszy tę samą ikonę sieci bezprzewodowej, możesz przejść do ustawień sieci i ustawić statyczny adres IP, abyśmy mogli łatwo połączyć się z nim przez sieć. Na koniec chcesz kliknąć menu główne i wybrać „Raspbian Configuration Editor” i na karcie „Interfaces” upewnić się, że SSH jest włączone. Następnie zapisz go i zrestartuj swoje Pi.

Krok 2: Drukowanie z Pi

Drukowanie z Pi
Drukowanie z Pi
Drukowanie z Pi
Drukowanie z Pi

Po ponownym uruchomieniu Raspbery Pi powinno być połączone z siecią bezprzewodową ze statycznym adresem IP i włączonym SSH. Więc teraz powinniśmy być w stanie połączyć się z nim zdalnie z dowolnego innego komputera. Aby to zrobić, potrzebujesz klienta SSH. W przypadku systemu Windows dobrym klientem jest Putty. Możesz połączyć się z nim za pomocą statycznego adresu IP Pi, który ustawiliśmy wcześniej. Następnie możesz zalogować się, używając "pi" jako nazwy użytkownika i "raspberry" jako hasła.

Po pomyślnym zalogowaniu powinniśmy być teraz w interfejsie terminala Pi. Tutaj możemy wpisać polecenia, które zostaną wykonane na Raspberry Pi. Na przykład jedną z pierwszych rzeczy, które chcemy zrobić, jest upewnienie się, że oprogramowanie na Pi jest aktualne. Czyli w terminalu możemy wpisać:

aktualizacja sudo apt-get

To polecenie zaktualizuje repozytoria oprogramowania na Pi. Następnie możemy zainstalować oprogramowanie drukarki ESC-POS oraz wymagane biblioteki.

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

Po wykonaniu tej czynności możemy teraz podłączyć drukarkę do portu Micro-USB Pi (za pomocą przejściówki) i włączyć ją. Następnie w naszym terminalu możemy stworzyć mały skrypt Pythona

nano hello_world.py

A w nim możemy dodać ten kod Pythona

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

Wyjdź (CTRL-X), zapisz (CTRL-Y) i uruchom, aby przetestować

python3 hello_world.py

Krok 3: Łączenie się z Internetem Rzeczy (Część 1)

Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)
Łączenie się z Internetem Rzeczy (Część 1)

Czym byłaby drukarka bez czegoś do wydrukowania? Chciałem włączyć funkcjonalność drukowania z różnych usług internetowych, takich jak Alexa. Jak więc mogę to osiągnąć? Jedną z opcji jest wybranie konkretnej usługi internetowej, prześledzenie dokumentacji API i napisanie aplikacji opartej na ich API. Ale wybieram leniwą trasę…

Istnieje świetna strona internetowa o nazwie „If This Then That”, która uruchamia działania dla różnych usług internetowych (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter itp.) w oparciu o zestaw kryteriów. Na przykład „jeśli” opublikuję na Facebooku (to), „Wtedy” wyślij mi e-mail (tamto).

Więc w pierwszej połowie założyłem darmowe konto, możesz zacząć tworzyć nowy "aplet" dla różnych usług, które chcesz uruchomić. „Ta” część mojego apletu to Alexa. Istnieje wiele wyzwalaczy Alexa do wyboru, ale wybiorę ten, który mówi „Zapytaj, co jest na twojej liście zakupów”. I ostatecznie chcemy, aby uruchamiał skrypt Pythona na Raspberry Pi, więc dla części skryptu „That” chcemy wybrać webhooki.

W opcji Webhooks możemy dodać adres URL wskazujący na nasze Pi, do którego wrócimy później. Możemy pozostawić pole Method jako "Get", a jako typ treści wybrać "Plain Text". W polu Treść kliknij „Dodaj składnik” i wybierz „Cała lista”. Spowoduje to wysłanie całej listy zakupów jako żądanie Get.

Krok 4: Łączenie się z Internetem Rzeczy (Część 2)

Łączenie się z Internetem Rzeczy (część 2)
Łączenie się z Internetem Rzeczy (część 2)
Łączenie się z Internetem Rzeczy (część 2)
Łączenie się z Internetem Rzeczy (część 2)

Poprzedni krok zajmuje się częścią „Internet”, więc teraz możemy popracować nad częścią „rzeczy” za pomocą Raspberry Pi. Aby komunikować się z apletem webhooków „If This Then That”, musimy skonfigurować serwer WWW na Raspberry Pi. Istnieje wiele różnych sposobów na skonfigurowanie serwera WWW, ale biorąc pod uwagę, że ostatecznie chcę uruchomić skrypt Pythona, zdecydowałem się użyć serwera Flask w Pythonie.

Pi ma wstępnie zainstalowane wszystkie biblioteki Flask, więc wszystko, co musimy zrobić, to zacząć pisać skrypt testowy:

nano flask_test.py

A w nim dodajmy kod, który obsługuje prostą stronę internetową.

#!flask/bin/python#IMPORTUJ BIBLIOTEKI FLASK z flask import Flask, żądanie #CREATE A FLASK VARIABLE app = Flask(_name_) #UTWÓRZ STRONĘ 'INDEKSU' @app.route('/') def index(): return 'Twój serwer Flask działa!' #URUCHOM PROGRAM if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Teraz po prostu zapisz program i uruchom go za pomocą tego polecenia:

sudo python3 flask_test.py

W odpowiedzi na polecenie zobaczysz, że domyślny port, na którym działa Flask, to port 5000. Tak więc w przeglądarce internetowej, jeśli wpiszesz adres IP swojego Pi: 5000, powinieneś zobaczyć tekst „Twój serwer Flask działa!”

Mamy nasz testowy kod Pythona z wcześniejszych wersji, który jest drukowany na naszej drukarce paragonów i mamy nasz testowy serwer Flask. Następnie musimy je połączyć i włączyć jakiś kod, który pobiera dane z naszego apletu Webhook. Stwórzmy nowy plik Pythona:

nano iot_print_server.py

A w nim dodaj następujący kod:

#!flask/bin/python#IMPORT BIBLIOTEK KOLEK I DRUKAREK z flask import Flask, żądanie z escpos.printer import Usb #PRZYPISZ ZMIENNE DLA DRUKARKI I KOLBY p = Usb(0x0416, 0x5011) app = Flask(_name_) #CREATE STRONA 'INDEX' @app.route('/') def index(): return 'Twój serwer Flask działa!' #UTWÓRZ „STRONĘ” NAZWĘ „LISTĄ” DO WYDRUKOWANIA LISTY ZAKUPÓW ALEXA @app.route('/list') def list(): #PRZECHWYCIĆ „POBIERZ” DANE Z INTERNETOWYCH IFTTT content = request.get_data() #KONWERTUJ SUROWE DANE DO STRING str_content = str(content) #PODZIEL DANE NA ODDZIELNE WIERSZE str_split = str_content.splitlines() #ODDZIEL SŁOWA PRZECINKIEM I DODAJ DO NOWEJ LISTY newlist = for word w str_split: word = word.split(', ') newlist.extend(word) #USUŃ ZNAKI FORMATOWANIA rmv_marks = [s.strip("b'") for s in newlist] #DRUKUJ NAGŁÓWEK #print("Lista zakupów\n") p.text("Lista zakupów:\n ") #WYLICZUJ I WYDRUKUJ KAŻDY ELEMENT Z LISTY r = 1 for x in rmv_marks: #print(str(r) + ". " + x + "\n") p.text(str(r) + ". " + x + "\n") r += 1 #POWRÓT WYNIKI return 'x' #URUCHOM PROGRAM if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Możesz go uruchomić, aby sprawdzić, czy zwraca jakieś błędy, ale nie będzie on jeszcze działał z naszym webhookiem, ponieważ od tej chwili serwer działa tylko lokalnie. Nie ma jeszcze zewnętrznego adresu URL, z którym webhook mógłby się połączyć. Moglibyśmy skonfigurować przekierowanie portów na naszym routerze i po prostu użyć naszego zewnętrznego adresu IP, ale to nie jest zbyt bezpieczne. Alternatywnie decyduję się na NGROK.

Krok 5: Konfigurowanie dostępu zewnętrznego za pomocą Ngrok

Konfigurowanie dostępu zewnętrznego za pomocą Ngrok
Konfigurowanie dostępu zewnętrznego za pomocą Ngrok
Konfigurowanie dostępu zewnętrznego za pomocą Ngrok
Konfigurowanie dostępu zewnętrznego za pomocą Ngrok

Ngrok ustanawia bezpieczne połączenie z siecią bez konieczności ujawniania zewnętrznego adresu IP lub bałaganu dzięki przekierowaniu portów. Po założeniu darmowego konta daje token autoryzacyjny. Następnie na swoim Raspberry Pi możesz go pobrać, rozpakować, podłączyć token uwierzytelniania, a następnie uruchomić na porcie 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… unzip ngrok-stable-linux-arm./ngrok authtoken [tu wstaw swój token uwierzytelniania]./ngrok http 5000

***WAŻNE***Bezpłatna wersja Ngrok nie daje statycznego adresu, więc za każdym razem, gdy ponownie uruchomisz Ngrok, otrzymasz inny adres. Jeśli potrzebujesz adresu statycznego, aby nie trzeba było ponownie edytować swojego webhooka, musisz zapłacić za uaktualnione konto.

Bezpłatna alternatywa dla Ngrok, która oferuje statyczne adresy IP, nazywa się „Serveo” na www.serveo.net

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

Na wyświetlonym ekranie wyświetla adres przekierowania (https://random-string.ngrok.io), którego możemy użyć w naszym aplecie Webhook. Wracając więc do „Jeśli to, to tam”, w polu adresu URL wprowadź swój adres przekierowania Ngrok i wskaż stronę „lista” na naszym serwerze Flask. Powinno to wyglądać mniej więcej tak

losowy_ciąg.ngrok.io/list

Następnie idź dalej i zapisz zmiany.

Aby to przetestować, pozostaw uruchomiony Ngrok, otwórz nowy terminal i uruchom nasz skrypt Pythona. Gdy oba przedmioty są uruchomione, zapytaj Alexę, co jest na twojej liście zakupów. Po minucie lub dwóch powinien wydrukować wyniki. Jeśli chcesz, aby został wydrukowany natychmiast, po prostu przejdź do swojego apletu na IFTTT i kliknij „Sprawdź teraz”. Jeśli wszystko pójdzie dobrze, drukarka paragonów powinna wydrukować to, co znajduje się na twojej liście zakupów! Ostatni fragment kodu, który musimy dodać, to sposób na automatyczne uruchomienie ngrok i naszego serwera butelek przy każdym uruchomieniu Pi. Możemy to łatwo zrobić, czyniąc nasz skrypt w Pythonie wykonywalnym:

chmod +x iot_print_server.py

Następnie możemy edytować nasz plik /etc/rc.local tak, aby wyglądał tak:

## Domyślnie ten skrypt nic nie robi. # Wydrukuj adres IP _IP=$(nazwa hosta -I) || prawda, jeśli ["$_IP"]; then printf "Mój adres IP to %s\n" "$_IP" fi #autostart ngrok i wskaż swój plik auth./home/pi/ngrok/ngrok http -config=/home/pi/.ngrok2/ngrok. yml 5000 # autostart drukarki skrypt python sudo python3 /home/pi/iot_receipt_printer.py i wyjście 0

Krok 6: Dodawanie Pi do drukarki

Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki
Dodawanie Pi do drukarki

Posiadana przeze mnie drukarka paragonów ma dużo pustej przestrzeni wewnątrz obudowy. A skoro Raspberry Pi Zero jest tak małe, pomyślałem, że fajnie byłoby schować go w drukarce paragonów, aby wyglądał jak jedno urządzenie. Jedynym problemem jest to, że drukarka paragonów działa na 12V, a Pi na 5V. Więc jeśli chcemy tylko jednego kabla zasilającego do zasilania obu z nich, będziemy musieli zmniejszyć zasilanie 12V do 5V.

Używając regulatora napięcia 7805, kondensatora 1uf i kondensatora 10uf, udało mi się stworzyć prosty regulator 5V, który podłączyłem do tablicy logicznej drukarki paragonów. Przylutowałem przewód „-” do wspólnej masy, a następnie przylutowałem przewód „+” do strony „on” włącznika zasilania, aby Pi włączało się i wyłączało, gdy drukarka była włączana i wyłączana. Za pomocą multimetru przetestowałem, aby potwierdzić, że wyjście było bezpieczne dla Pi. Następnie przylutowałem na kablu micro-usb i podłączyłem go do Pi. Po podłączeniu kabla do drukarki i przełączeniu przełącznika, zarówno drukarka, jak i Pi włączyły się!

Na koniec wywierciłem otwór do podłączenia kabla USB z Pi do drukarki. Znalazłem miejsce na umieszczenie regulatora 5v i Pi w obudowie drukarki, a następnie złożyłem wszystko z powrotem. Więc teraz drukarka ma również własny niezależny serwer sieciowy!

Krok 7: Idź dalej

Idąc dalej
Idąc dalej

Jeśli byłeś w stanie rzucić okiem na „Jeśli to, to wtedy”, prawdopodobnie zauważyłeś, że ma mnóstwo różnych usług internetowych, z którymi możesz się połączyć. Więc jeśli nie masz Alexy lub nie chcesz jej używać, możesz użyć tego projektu do drukowania z czegokolwiek, takiego jak Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, itp. Możesz znaleźć mój kod do drukowania tweetów na mojej stronie Github. A teraz idź i zobacz, co możesz wymyślić!

Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT

Pierwsza nagroda w IoT Challenge

Zalecana: