Skocz do zawartości

Udostępnianie drukarki USB w usłudze Google Cloud Print przy użyciu Raspberry Pi


Kamil2118

Pomocna odpowiedź

Współczesne drukarki mają w standardzie komunikację poprzez sieć Wi-Fi, stanowi to dużą korzyść dla użytkownika, ilość przewodów w pomieszczeniu ograniczona jest do minimum, ale również swoboda ulokowania sprzętu drukującego niezależnie od położenia routera czy komputera wnosi dozę komfortu.  Coraz częściej spotykane są nawet możliwości instalacji na smartfony wtyczek drukarek danych producentów i zdolność mobilnego drukowania. Co w przypadku kiedy nasza drukarka nie narodziła się w drugiej dekadzie XXI wieku i nie posiada takich dogodności komunikacyjnych? Tym właśnie chciałbym się zająć w moim projekcie. Przy pomocy Raspberry Pi udostępnić drukarkę w usłudze Google Cloud Print zyskując możliwość wydruku z dowolnego miejsca na świecie, a stosując przekaźnik włączyć ją automatycznie kiedy ma zadanie do wydrukowania, wyłączyć zaś po określonym czasie, po wykonaniu tego zadania.

Czym jest usługa Google Print?

„Google Cloud Print (GCP) to usługa umożliwiająca drukowanie z dowolnego urządzenia połączonego z siecią. Przekazuje ona zadania drukowania z komputera, smartfona lub tabletu do drukarki połączonej z internetem. Ułatwia też użytkownikom wykrywanie drukarek i drukowanie z własnych urządzeń bez konieczności przeprowadzania skomplikowanej konfiguracji i instalowania sterowników.” Czytamy na stronie producenta.

Jak to działa?

  1. Osoba drukująca loguje się na stronie Google Cloud Print / wybiera Google Cloud Print w usługach wydruku (system Android).
    Wydruk poprzez przeglądarkę internetowąWydruk poprzez system AndroidUsługa Google Cloud Print jako klasyczna drukarka w systemie Windows
  2. Wybranie elementu do wydruku.
  3. Ustawienie parametrów wydruku (rozmiar, jakość itp.).
  4. Wybór drukarki z listy dostępnych oraz przesyłanie zadania.
  5. Drukarka otrzymuje zadanie i dodaje je do bufora wydruku.
  6. Skrypt ustawia stan wysoki na pinie przekaźnika (drukarka zostaje uruchomiona).
  7. Następuje wydruk.
  8. Skrypt wyłącza dopływ prądu do drukarki po określonym czasie.

Potrzebne elementy

Starałem się ograniczyć ilość użytych elementów do minimum, zależało mi na stworzeniu niedużego dodatku do drukarki, który ma poszerzyć jej funkcjonalność przy niewielkich rozmiarach.
Wykorzystane elementy:

  • Raspberry Pi Zero
  • Karta Wi-Fi USB
  • Ładowarka po starym telefonie 5V/0,7A
  • Karta pamięci 8GB
  • Hub USB 4 posty
  • Przejściówka USB <-> micro USB
  • Przekaźnik SSR 5V, może być dowolny inny przekaźnik załączany stanem wysokim
  • Puszka natynkowa 60 x 30 x 60 mm
  • Puszka natynkowa 290 x 25 x 80 mm
  • Śruba 3mm wraz z nakrętką
  • Przewody
  • Wtyczka elektryczna
  • Gniazdo elektryczne

W projekcie użyto Raspberry Pi Zero bez wbudowanej komunikacji Wi-Fi, w przypadku użycia wersji Zero W tego urządzenia przestaje być konieczne posiadanie dodatkowej karty sieciowej oraz huba USB.

IMG_20190117_112956.thumb.jpg.8df3025a4648dea334651ef9c1ed76fe.jpg

Do Raspberry Pi podłączone jest zasilanie, hub USB poprzez przejściówkę USB <-> micro USB, przewody do przekaźnika SSR (sterowanie poprzez GPIO4), całość zamknięta jest w puszcze elektrycznej z wyciętą uprzednio listwą zaciskową. Do huba wpięta jest karta sieciowa i przewód od drukarki. Przekaźnik ukryty w mniejszej puszcze natynkowej (przykręconej śrubą do puszki zawierającej Raspberry Pi) posiada wpięte kable sieci elektrycznej zakończone wtyczką elektryczną oraz gniazdkiem elektrycznym (do niego podłączony zostaje kabel zasilający drukarkę). Całość przymocowana została do obudowy drukarki taśmą dwustronną.

IaaMG_20190117_122403.thumb.jpg.e44aae5c1088f9aa39d673822821972d.jpgIMG_20190117_124620.thumb.jpg.8638a6bf0305f4b0292b6ef0bb347c10.jpg

 

Instrukcja instalacji

  1. Przygotowanie Raspberry Pi.
    1. Wgrywam czysty system „Raspbian Stretch Lite” pobrany z oficjalnej strony. Użyłem wersji z 2018-11-13.
    2. Wprowadzam ustawienia pozwalające na komunikację UART oraz SSH z maliną (na partycji „boot” dodanie w pliku „config.txt” linijki „enable_uart=1”; utworzenie na partycji pliku „ssh” bez rozszerzeń).
    3. Podłączam Raspberry do komputera przy pomocy programatora.
      GND <-> GND
      TX <-> RX
      RX <-> TX
    4. Podłączam zasilanie, hub USB oraz kartę sieciową.
  2. Instalacja sterowników karty sieciowej.
    1. Jako, iż system Raspbian nie posiadał wbudowanych sterowników mojej karty musiałem je ręcznie doinstalować.
    2. Loguję się do systemu.
    3. Wykonujemy polecenie
      lsusb
      w wyniku czego otrzymujemy listę urządzeń podłączonych do portu USB Raspberry Pi.
    4. Jako, że malina nie jest podłączona do Internetu pakiet ze sterownikiem muszę pobrać sam na komputerze. Przechodzę na stronę pakietów Debian i wyszukuję paczkę, w moim przypadku ZD1211. Wybieram stabilny pakiet i pobieram klikając przycisk „all” poniżej strony.
    5. Wyłączam Rasberry Pi, wyciągam kartę pamięci i podłączam ją do komputera. Na dostępną partycję „boot” przenoszą pobraną paczkę z rozszerzeniem ".deb", dla dalszej wygody zmieniam nazwę pliku „firmware-zd1211_1.5-4_all.deb” na „wifi.deb”.
    6. Instalacja pakietów debian odbywa się przy pomocy polecenia „ dpkg -i” oraz podania ścieżki do pliku. Dane przesłane na partycję „Boot” są dostępne w Raspberry Pi w katalogu „boot”. Wykonuję polecenie
      sudo dpkg -i /boot/wifi.deb

       

    7. Po zainstalowaniu pakiet usuwam poleceniem 
      sudo rm /boot/wifi.deb
      oraz wykonuje restart urządzenia
      sudo reboot

       

  3. Konfiguracja dostępu do sieci

    1. Po uruchomieniu przechodzę do konfiguracji połączenia WiFi polecenie

      sudo raspi-config

      następnie wybór „Network Options” > „Wi-fi”.

    2. Wybieram z listy kraj na terenie którego będziemy korzystać z sieci > wprowadzam dokładną nazwę swojej sieci domowej „SSID” > wprowadzamy hasło.

  4. Instalacja programu CUPS

    1. Wydaję polecenie

      sudo apt-get install cups

      nastąpi pobranie i zainstalowanie programu CUPS.

    2. Dodaję użytkownika „pi” do grupy administratorów, aby mógł zarządzać funkcjami CUPS

      sudo usermod -aG lpadmin pi

       

    3. Daję zgodę na dostęp do usługi wszystkim w sieci lokalnej

      sudo cupsctl --remote-any

       

    4. Restartuję usługę CUPS

      sudo /etc/init.d/cups restart

      Jeśli wszystko wykonało się poprawnie po wpisaniu w przeglądarkę [adres IP Raspberry Pi]:631 (przykładowo 192.168.0.2:631; adres IP można sprawdzić poleceniem „ifconfig”, jest on widoczny w sekcji „wlan0”) powinien być widoczny panel administracyjny aplikacji zajmującej się obsługą drukarek podpiętych do maliny (CUPS).

  5. Instalacja i konfiguracja drukarki w programie CUPS.

    1. Podłączam uruchomioną drukarkę do portu USB Raspberry Pi, następnie uruchamiam malinę. Otwieram w przeglądarce stronę CUPS, przechodzę do zakładki „Administration” a następnie wybieram „Add Printer”. W moim przypadku w tym momencie wyskoczył problem z zabezpieczeniem strony, nie udało mi się go rozwiązać dla CUPS, więc po skonfigurowaniu drukarki wystarczy tylko, dla bezpieczeństwa, zmienić hasło użytkownika uprawnionego do konfiguracji (w moim przypadku „pi”).
      Aby obejść problem (dla przeglądarki Mozilla FireFox) wybieram „Zaawansowane” > „Dodaj wyjątek” > „Potwierdź wyjątek bezpieczeństwa”.

    2. Pojawia się okno logowania, podaje dane takie jak dla użytkownika dodanego podczas konfiguracji usługi CUPS.

    3. Z listę możliwy do podłączenia drukarek. Wybieram „Local Printers” i przechodzę dalej.

    4. Pojawia się okno edycji opisu wybranej drukarki. Można zmienić jej oznaczenie, opis, czy określić lokalizację. Uzupełniam dane względem potrzeb i przechodzę dalej.

    5. Wyświetlone zostaje okno wyboru sterowników. Jako, iż na rynku dostępnych jest bardzo wiele modeli, a nie wszystkie są domyślnie wbudowane w serwis, może się zdarzyć, że na liście po prostu zabraknie jakiegoś modelu, jak w moim przypadku. W takim przypadku mogę spróbować wybrać z listy drukarkę podobną. Wyszukać w Internecie lub na płycie dołączonej do drukarki pliku PPD dla swojego modelu lub zainstalować w Raspberry Pi sterowniki dla większości modeli danej marki. Wybrałem ostatnią możliwość.

    6. Loguję się do terminala maliny i wykonuję polecenie zależne od producenta drukarki.
      splix – Samsung
      gutenprint - Canon, Epson, Lexmark, Sony, Olympus
      hplip – HP
      Moja drukarka to Samsung, więc wykonuję
       

      sudo apt-get install -y printer-driver-splix

       

    7. Po pomyślnym zakończeniu instalacji wracam do strony konfiguracyjnej, przechodzę do „Administration” > „Add Printer” > wybieramy drukarkę > uzupełniamy ewentualny opis i przechodzę dalej. Sterownik mojej drukarki znajdował się w zainstalowanym pakiecie i został wyświetlony na liście. Zaznaczam go i dodaję drukarkę.
      863569433_cupspanel.thumb.JPG.4c379d2f7f8975f2e940447f398c2b23.JPG

    8. Ostatnim etapem są ustawienia preferencji drukowania, rozmiar papieru, wybór zasobnika papieru, rozdzielczość wydruku itp.

    9. Po poprawnym dodaniu drukarka powinna znaleźć w zakładce „Printers”
      1631067714_cupsdrukarki.thumb.JPG.3729525c9b42f1d581c52f9825e936db.JPG

    10. Po wybraniu drukarki z listy istnieje możliwość między innymi jej ponownej edycji, czy sprawdzenia działania drukując stronę testową.

  6. Instalacja usługi Google Cloud Print

    1. Instaluję niezbędne pakiety
       

      sudo apt-get install -y build-essential python-dev libcups2-dev libavahi-client-dev
      sudo apt-get install -y python-setuptools
      sudo easy_install pip
      sudo pip install pycups
      sudo pip install cloudprint
      sudo pip install cloudprint[daemon]
      sudo apt-get update

       

    2. Wykonuję polecenie.

      sudo cloudprint

      Zostanie wyświetlony adres pod który należy wejść w przeglądarce.
      link.thumb.jpg.8b8e2f14e6db9b65f1f76e9b727cad3a.jpg

    3. Loguję się do swojego konta Google i wybieram „zarejestruj”.

    4. Jeżeli wszystko zostało wykonane poprawnie w terminalu powinien widnieć taki komunikat
      1448708943_gppok.thumb.JPG.6eb64a445c062617f65805986f3f1989.JPG

      Przerywam działanie usługi skrótem Ctrl+C.

  7. Skrypt sterujący przekaźnikiem.

    1. Skrypt najwygodniej zapisać w lokalizacji uwzględnionej w zmiennej PATH, ja wybrałem katalog „bin”. Otwieram edytor w lokalizacji „bin” oraz nadaję nazwę plikowi ze skryptem ( „printerPower”).

      sudo pico /bin/printerPower

       

    2. Umieszczam w nim skrypt.
       

      #!/bin/sh
      $(sudo echo 4 > /sys/class/gpio/export)
      $(sudo echo out > /sys/class/gpio/gpio4/direction)
      $(sudo echo 0 > /sys/class/gpio/gpio4/value)
      powerOffTime=0
      waitTime=5
      status="off"
      echo "status: $status"
      while [ true ]
      do
              if [ `lpstat -o | wc -l` != 0 ]
              then
                      echo on
                      status="on"
                      $(sudo echo 1 > /sys/class/gpio/gpio4/value)
                      powerOffTime=$(( $(date +%s)+$waitTime*60 ))
              fi
      
              if [ "$status" = "on" -a $(date +%s) -ge $powerOffTime ]
              then
                      echo off
                      $(sudo echo 0 > /sys/class/gpio/gpio4/value)
                      status="off";
              fi
              sleep 20
      done

      Na początku skryptu wykonywane są czynności konieczne do obsługi GPIO do którego podłączony zostanie przekaźnik (w tym przypadku pin 4). Deklaruje go, ustawiam na wyjściowy oraz przypisuje stan niski. Następnie deklarujemy zmienną czasu która przechowuje godzinę wyłączenia drukarki („powerOffTime”). Zmienna „waitTime” przechowuje czas w minutach po jakim nastąpi wyłączenie drukarki po ostatnim drukowaniu. W nieskończonej pętli while występują dwie pętle warunkowe. Pierwsza pętla sprawdza czy kolejka drukowania jest różna od 0. Jeżeli tak następuje zmiana stanu pinu 4 na wysoki oraz przypisanie do zmiennej „powerOffTime” obecnego czasu w sekundach powiększonego o zmienną „waitTime” zamienioną na sekundy. Druga pętla warunkowa sprawdza obecny status przekaźnika i porównuje czas obecny z czasem określonym na. Jeżeli status jest równy „on”, a obecna godzina większa, bądź równa godzinie wyłączenia warunek zostanie spełniony, nastąpi ustawienie stanu niskiego na pinie 4 oraz zmiana statusu na „off”. Na końcu każdego cyklu pętli while następuje uśpienie na okres 20 sekund.

    3. Zapisuję skrypt kombinacją Ctrl+o i zatwierdzam przyciskiem enter (wychodzę z edytora kombinacją Ctrl+x, uprzednio zatwierdzając zmiany „y”).

    4. Ustawiamy plik skryptu na typ wykonywalny.

      sudo chmod +x /bin/printerPower

       

  8. Dodaję usługę cloudprint oraz skrypt do autostartu.

    1. Otwieram i edytuję plik autostartu.

      sudo pico /etc/rc.local

       

    2. Dodaję przed linią „exit 0” polecenia wykonania skryptu „printerPower” bezpośrednio po nazwie dodając znak & [ampersand] (umożliwi to uruchomienie skryptu w tle). W następnej linijce dodaję polecenie uruchomienia usługi „cloudprint”. Mogę je wykonać z argumentem -d

      sudo cloudprint -d

      usługa uruchomiona zostanie w trybie daemon, umożliwi to swobodne korzystanie z urządzenia podczas pracy desktopowej (nie poprzez terminal), ale zaobserwowałem, że czas jej uruchomienia po restarcie maliny jest dłuższy, a stabilność połączenia z serwerem Google bywa różna. Natomiast uruchomienie usługi bez argumentu -d pozwoli na swobodną pracę z Raspbianem tylko poprzez dostęp terminalowy, za to stabilność połączenia z Google Cloud Print jest większa.  

      sudo printerPower&
      sudo cloudprint

      Ctrl+x > zatwierdzamy zmiany „y” > zatwierdzamy enterem.

    3. Restartuję urządzenie
       

      sudo reboot now

       

Edytowano przez Kamil2118
  • Lubię! 2
Link do komentarza
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

@Kamil2118, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
Dnia 19.01.2019 o 02:39, Kamil2118 napisał:

Współczesne drukarki mają w standardzie komunikację poprzez sieć Wi-Fi, stanowi to dużą korzyść dla użytkownika, ilość przewodów w pomieszczeniu ograniczona jest do minimum, ale również swoboda ulokowania sprzętu drukującego niezależnie od położenia routera czy komputera wnosi dozę komfortu [...]

Właśnie zaakceptowałem opis. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum 😉

Link do komentarza
Share on other sites

Świetnie opisany projekt. Sam kiedyś działałem trochę z RPi i CUPS – w planach było wpięcie drukarni bez WiFi do sieci lokalnej. Niestety akurat ta drukarka nie była obsługiwana, ale w 99% przypadków jest to faktycznie dobre rozwiązanie.

Link do komentarza
Share on other sites

Początkowo chciałem udostępnić drukarkę tylko lokalnie, zacząłem bezskuteczną zabawę z Samba i uznałem, że ostatecznie lepiej doinstalować usługi Google i mieć więcej opcji wydruku oraz brak zabawy sterownikami na każdym sprzęcie.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.