Съдържание:

Принтер Alexa - Принтер за рециклирани касови бележки: 7 стъпки (със снимки)
Принтер Alexa - Принтер за рециклирани касови бележки: 7 стъпки (със снимки)

Видео: Принтер Alexa - Принтер за рециклирани касови бележки: 7 стъпки (със снимки)

Видео: Принтер Alexa - Принтер за рециклирани касови бележки: 7 стъпки (със снимки)
Видео: CS50 2013 - Week 9, continued 2024, Юни
Anonim
Image
Image
Принтер Alexa | Принтер за рециклирани касови бележки
Принтер Alexa | Принтер за рециклирани касови бележки

Аз съм фен на рециклирането на стари технологии и да ги направя отново полезни. Преди време бях закупил стар, евтин термопринтер и исках полезен начин да го преназнача. След това през празниците ми беше подарена Amazon Echo Dot и една от функциите, които използвах най -много, беше добавянето на хранителни стоки към списъка ми за пазаруване. Затова реших, че би било готино да комбинирам двете и да използвам принтера за разписки като IOT принтер за Alexa (или Google Home, или Siri и т.н.). Нека да видим какво ще е необходимо, за да превърнем тази идея в реалност.

Консумативи

Ето частите, които използвам за този проект:

  1. Евтин универсален термопринтер (трябва да поддържа ESC-POS)
  2. Amazon Alexa Device (други устройства за „домашен помощник“вероятно също ще работят)
  3. Raspberry Pi Zero Wireless
  4. 7805 5v регулатор
  5. 10μf кондензатор
  6. 1μf кондензатор

Други неща, които използвам за този проект, са:

  1. Ако това, тогава онова (IFTTT.com)
  2. Оборудване за запояване

Стъпка 1: Настройка на Raspberry Pi Zero W

Настройка на Raspberry Pi Zero W
Настройка на Raspberry Pi Zero W
Настройка на Raspberry Pi Zero W
Настройка на Raspberry Pi Zero W
Настройка на Raspberry Pi Zero W
Настройка на Raspberry Pi Zero W

Първата стъпка е отново да отпечатате стария принтер за касови бележки. Избрах да използвам Raspberry Pi Zero W като контролер поради ниската цена и малкия размер. Всъщност е достатъчно малък, за да се побере в самия калъф на принтера, така че няма външни връзки! Pi Zero W също има вграден Wi -Fi, така че всичко е основно интегрирано в неговия малък размер.

За да стартираме Pi, трябва да изтеглим Raspbian OS и да го запишем на microSD карта с помощта на програма като Etcher. Поставете го в Pi заедно с HDMI кабел, клавиатура, мишка и след това захранване.

Когато Pi се зареди и сте на интерфейса на работния плот, можете да се свържете с вашата безжична връзка, като щракнете върху иконата за безжична връзка в горния десен ъгъл и изберете името на вашата безжична връзка. След това, ако щракнете с десния бутон върху същата икона на безжична връзка, можете да отидете в мрежовите настройки и да зададете статичен IP адрес, така че да можем лесно да се свържем с него през мрежата. И накрая, искате да кликнете върху главното меню и да изберете „Редактор на конфигурацията на Raspbian“и в раздела „Интерфейси“да се уверите, че SSH е активиран. След това го запазете и рестартирайте Pi.

Стъпка 2: Отпечатване от Pi

Печат от Pi
Печат от Pi
Печат от Pi
Печат от Pi

След като Raspbery Pi бъде рестартиран, той трябва да бъде свързан към вашата безжична мрежа със статичен IP и с активиран SSH. Така че сега би трябвало да можем да се свържем с него от разстояние от всеки друг компютър. За да направите това, ще ви е необходим SSH клиент. За Windows добър клиент е Putty. Можете да се свържете с него, като използвате статичния IP адрес на Pi, който зададохме по -рано. След това можете да влезете, като използвате "pi" като потребителско име и "raspberry" като парола.

След успешно влизане, сега трябва да сме в терминалния интерфейс на Pi. Тук можем да въведем команди, които ще се изпълняват на Raspberry Pi. Например, едно от първите неща, които искаме да направим, е да се уверим, че софтуерът на Pi е актуален. Така че в терминала можем да напишем:

sudo apt-get update

Тази команда ще актуализира софтуерните хранилища на Pi. След това можем да инсталираме софтуера за принтер ESC-POS и необходимите библиотеки.

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

След това можем да свържем принтера към Micro-USB порта на Pi (с помощта на адаптер) и да го включим. След това в нашия терминал можем да създадем малък скрипт на python

nano hello_world.py

И в него можем да добавим този код на python

#!/usr/bin/pythonот escpos.printer импортиране Usb p = Usb (0x0416, 0x5011) p.text ("Мини IOT принтер / n") p.close ()

Излезте от него (CTRL-X), запазете го (CTRL-Y) и го стартирайте, за да го тествате

python3 hello_world.py

Стъпка 3: Свързване към Интернет на нещата (част 1)

Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)
Свързване към Интернет на нещата (част 1)

Каква полза би имал един принтер без нещо за печат? Исках да активирам функционалността за печат от различни интернет услуги, като Alexa. И така, как мога да постигна това? Една от опциите е да изберете конкретна интернет услуга, да проследите тяхната API документация и да напишете приложение въз основа на техния API. Но аз избирам да тръгна по мързеливия път …

Има страхотен уебсайт, наречен „If This Then That“, който задейства действия за различни интернет услуги (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter и т.н.) въз основа на набор от критерии. Например „ако“публикувам във Facebook (това), „Тогава“ми изпратете имейл (това).

Така че за първата половина на това, когато се регистрирах за безплатен акаунт, можете да започнете да създавате нов „аплет“за различните услуги, които искате да задействате. „Тази“част от моя аплет ще бъде Alexa. Има много тригери на Alexa, от които да избирате, но аз ще избера този, който казва „Попитайте какво има в списъка ви за пазаруване“. И в крайна сметка искаме той да задейства скрипт на Python на Raspberry Pi, така че за частта „Този“от скрипта искаме да изберем Webhooks.

В опцията Webhooks можем да добавим URL, който сочи към нашия Pi, към който ще се върнем по -късно. Можем да оставим полето Method като „Get“, а за типа съдържание изберете „Plain Text“. За полето Body кликнете върху „Add Ingredient“и изберете „Entire List“. Това ще изпрати целия списък за пазаруване като заявка за получаване.

Стъпка 4: Свързване към Интернет на нещата (част 2)

Свързване към Интернет на нещата (част 2)
Свързване към Интернет на нещата (част 2)
Свързване към Интернет на нещата (част 2)
Свързване към Интернет на нещата (част 2)

Предишната стъпка се грижи за частта „Интернет“, така че сега позволява да се работи върху частта „неща“с помощта на Raspberry Pi. За да комуникираме с аплета за уеб куки „Ако това е следното“, трябва да настроим уеб сървър на Raspberry Pi. Има много различни начини за настройка на уеб сървър, но като се има предвид, че в крайна сметка искам да стартирам скрипт на Python, реших да използвам сървъра на Python Flask.

Pi има предварително инсталирани всички библиотеки на Flask, така че всичко, което трябва да направим, е да започнем да пишем тестов скрипт:

nano flask_test.py

И в него нека добавим код, който обслужва обикновена уеб страница.

#! flask/bin/python #ИМПОРТИРАНЕ НА ФЛАСКИТЕ БИБЛИОТЕКИ от колба за импортиране на колба, заявка #CREATE A FLASK VARIABLE app = Flask (_ name_) #CREATE AN 'INDEX' PAGE @app.route ('/') def index (): return "Вашият Flask сървър работи!" #РАБОТЕТЕ ПРОГРАМАТА, ако _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Сега просто запишете програмата и я стартирайте с помощта на тази команда:

sudo python3 flask_test.py

От отговора на командата ще видите, че портът по подразбиране, на който Flask работи, е порт 5000. Така че в уеб браузър, ако въведете IP адреса на вашия Pi: 5000, трябва да видите текста "Вашият Flask сървър работи!"

Имаме нашия тестов Python код от по -рано, който се отпечатва на нашия принтер за касови бележки, и имаме нашия тестов Flask сървър. Така че следва да ги комбинираме и да включим някакъв код, който извлича данните от нашия аплет Webhook. Нека създадем нов Python файл:

nano iot_print_server.py

И в него добавете следния код:

#! flask/bin/python #ИМПОРТИРАЙ ФЛАШКАТА И БИБЛИОТЕКИТЕ НА ПРИНТЕРА от колба за импортиране на колба, заявка от escpos.printer импортиране Usb #НАЗНАЧИТЕ ПРОМЕНИМИ ЗА ПРИНТЕРА И ФЛАСКАТА p = Usb (0x0416, 0x5011) app = Flask (_ name_) #CREATE 'INDEX' PAGE @app.route ('/') def index (): връща 'Вашият Flask сървър работи!' #CREATE "PAGE" CALLED "LIST" FOR PRINTING ALEXA SHOPPING LIST @app.route ('/list') def list (): #CAPTURE "GET" DATROM OF IFTTT WEBOOKS content = request.get_data () #CONVERT RAW DATA TO STRING str_content = str (content) #DIVIDE DATA IN SEPERATE LINES str_split = str_content.splitlines () #SEPERATE WORDS COMMA И ДОБАВЯНЕ НА НОВ СПИСЪК newlist = за дума в str_split: word = word.split (',') newlist.extend (word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip ("b '") за s в нов списък] #PRINT HEADER #print ("Списък за пазаруване / n") p.text ("Списък за пазаруване: / n ") #ENUMERATE И ИЗПЕЧАТЕ ВСЕКИ ЕЛЕМЕНТ В СПИСЪК r = 1 за x в rmv_marks: #print (str (r) +". " + X +" / n ") p.text (str (r) +". " + x + "\ n") r + = 1 #РЕЗУЛТАТИ ЗА ВРЪЩАНЕ връщане 'x' #РАБОТА НА ПРОГРАМАТА, ако _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Можете да го стартирате, за да видите дали връща грешки, но все още няма да работи с нашия webhook, тъй като в момента сървърът работи само локално. Все още няма външен URL адрес, към който уебхукът да се свърже. Можем да настроим пренасочване на портове на нашия рутер и просто да използваме външния IP адрес, но това не е твърде сигурно. Като алтернатива решавам да отида с NGROK.

Стъпка 5: Настройване на външен достъп с Ngrok

Настройване на външен достъп с Ngrok
Настройване на външен достъп с Ngrok
Настройване на външен достъп с Ngrok
Настройване на външен достъп с Ngrok

Ngrok създава защитена връзка с вашата мрежа, без да се налага да излагате външния си IP или да бъркате с пренасочване на портове. След като се регистрирате за безплатен акаунт, той ви дава маркер за оторизация. След това на вашия Raspberry Pi можете да го изтеглите, разархивирате, свържете своя маркер за удостоверяване и след това го стартирате на порт 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… разархивирайте ngrok-stable-linux-arm./ngrok authtoken [поставете своя маркер за удостоверяване тук]./ngrok http 5000

*** ВАЖНО *** Безплатната версия на Ngrok не ви дава статичен адрес, така че всеки път, когато стартирате отново Ngrok, тя ще ви даде различен адрес. Ако искате статичен адрес, така че да не се налага да продължите да редактирате своя Webhook, тогава ще трябва да платите за надграден акаунт.

Безплатна алтернатива на Ngrok, която предлага статични IP адреси, се нарича "Serveo" на www.serveo.net

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

На получения екран той ви дава адрес за препращане (https://random-string.ngrok.io), който можете да използвате в нашия аплет Webhook. Така че, връщайки се към „Ако това след това“, в полето URL въведете вашия адрес за препращане на Ngrok и го насочете към страницата „списък“на нашия Flask сървър. Трябва да изглежда така

random_string.ngrok.io/list

След това продължете и запазете промените.

За да го тествате, поддържайте Ngrok работещ, отворете нов терминал и стартирайте нашия скрипт на python. Когато и двата елемента са изпълнени, попитайте Alexa какво има в списъка ви за пазаруване. След минута или две трябва да отпечата резултатите. Ако искате да се отпечата незабавно, просто отидете на вашия аплет на IFTTT и кликнете върху „Провери сега“. Ако всичко върви добре, принтерът на касовите бележки трябва да отпечата това, което е в списъка ви за пазаруване! Последният бит код, който трябва да добавим, е начин за автоматично стартиране на ngrok и нашия сървър за колби при всяко стартиране на Pi. Лесно можем да направим това, като направим нашия скрипт на Python изпълним:

chmod +x iot_print_server.py

След това можем да редактираме нашия /etc/rc.local файл, така че да изглежда така:

## По подразбиране този скрипт не прави нищо. # Отпечатайте IP адреса _IP = $ (име на хост -I) || вярно, ако ["$ _IP"]; след това printf "Моят IP адрес е %s / n" "$ _IP" fi #autostart ngrok и го насочете към вашия файл за удостоверяване./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

Стъпка 6: Добавяне на Pi към принтера

Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера
Добавяне на Pi към принтера

Принтерът за касови бележки, който имам, има много празно място вътре в корпуса. И тъй като Raspberry Pi Zero беше толкова малък, реших, че би било готино просто да го скрия в принтера за касови бележки, така че да изглежда като едно устройство. Единственият проблем е, че принтерът на разписката работи на 12v, а Pi работи на 5v. Така че, ако искаме само един захранващ кабел да захранва и двете, ще трябва да намалим това 12v захранване до 5v.

Използвайки регулатор на напрежението 7805, 1uf кондензатор и 10uf кондензатор, успях да създам прост 5v регулатор, който свързах към логическата платка на принтера за касови бележки. Запоявах проводника "-" към общата земя и след това запоявах проводника "+" към страната "on" на превключвателя за захранване, така че Pi да се включва и изключва, когато принтерът се включва и изключва. Използвайки мултиметър, тествах, за да потвърдя, че изходът е безопасен за Pi. След това запоявах на micro-usb кабел и го свързах към Pi. След като включите кабела в принтера и завъртите превключвателя, принтерът и Pi се включиха!

Накрая пробих дупка за свързване на USB кабела от Pi към принтера. Намерих място, където да сложа 5v регулатора и Pi вътре в кутията на принтера, след което събрах всичко отново. Така че сега принтерът има и собствен автономен уеб сървър!

Стъпка 7: По -нататък

Вземайки го по -нататък
Вземайки го по -нататък

Ако можете да разгледате „Ако това е тогава онова“, вероятно сте забелязали, че има много различни уеб услуги, с които да се свържете. Така че, ако нямате Alexa или не искате да използвате такава, можете да използвате този проект, за да печатате от почти всичко, като Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, и т.н. Можете да намерите моя код за разпечатване на туитове на моята страница в Github. Сега отидете и вижте какво можете да измислите!

IoT Challenge
IoT Challenge
IoT Challenge
IoT Challenge

Първа награда в IoT Challenge

Препоръчано: