Оглавление:
- Запасы
- Шаг 1. Настройка Raspberry Pi Zero W
- Шаг 2: печать с Pi
- Шаг 3. Подключение к Интернету вещей (часть 1)
- Шаг 4. Подключение к Интернету вещей (часть 2)
- Шаг 5: Настройка внешнего доступа с помощью Ngrok
- Шаг 6: добавление Pi к принтеру
- Шаг 7. Дальнейшее развитие
Видео: Принтер Alexa - Обновленный чековый принтер: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Я фанат того, чтобы переработать старые технологии и снова сделать их полезными. Некоторое время назад я приобрел старый дешевый термопринтер для чеков и хотел найти полезный способ изменить его назначение. Затем, на праздниках, мне подарили Amazon Echo Dot, и одной из функций, которые я использовал чаще всего, было добавление продуктов в свой список покупок. Поэтому я подумал, что было бы круто объединить их и использовать принтер чеков в качестве IOT-принтера для Alexa (или Google Home, или Siri и т. Д.). Посмотрим, что нужно сделать, чтобы воплотить эту идею в жизнь.
Запасы
Вот части, которые я использую в этом проекте:
- Дешевый стандартный термопринтер для чеков (требуется поддержка ESC-POS)
- Устройство Amazon Alexa (другие устройства "домашнего помощника", вероятно, также будут работать)
- Raspberry Pi Zero Wireless
- Регулятор 7805 5v
- Конденсатор 10 мкФ
- Конденсатор 1 мкФ
Другие вещи, которые я использую в этом проекте:
- Если это, то это (IFTTT.com)
- Паяльное оборудование
Шаг 1. Настройка Raspberry Pi Zero W
Первый шаг - снова запустить печать на старом принтере чеков. Я решил использовать Raspberry Pi Zero W в качестве контроллера из-за его низкой цены и небольшого размера. На самом деле он достаточно мал, чтобы поместиться внутри самого корпуса чекового принтера, поэтому нет никаких внешних подключений! Pi Zero W также имеет встроенный Wi-Fi, поэтому все в основном интегрировано в его небольшой размер.
Чтобы запустить Pi, нам нужно загрузить ОС Raspbian и записать ее на карту microSD с помощью такой программы, как Etcher. Вставьте его в Pi вместе с кабелем HDMI, клавиатурой, мышью и затем включите питание.
Когда Pi загружается и вы находитесь в интерфейсе рабочего стола, вы можете подключиться к беспроводной сети, щелкнув значок беспроводной сети в правом верхнем углу и выбрав имя своего беспроводного подключения. Затем, если вы щелкните правой кнопкой мыши тот же значок беспроводной сети, вы можете перейти к настройкам сети и установить статический IP-адрес, чтобы мы могли легко подключиться к нему по сети. Наконец, вы хотите щелкнуть в главном меню и выбрать «Редактор конфигурации Raspbian» и на вкладке «Интерфейсы» убедиться, что SSH включен. Затем сохраните его и перезагрузите Pi.
Шаг 2: печать с Pi
После перезагрузки Raspbery Pi должен быть подключен к вашей беспроводной сети со статическим IP-адресом и с включенным SSH. Итак, теперь мы можем подключиться к нему удаленно с любого другого компьютера. Для этого вам понадобится SSH-клиент. Для Windows хороший клиент - Putty. Вы можете подключиться к нему, используя статический IP-адрес Pi, который мы установили ранее. Затем вы можете войти в систему, используя «пи» в качестве имени пользователя и «малину» в качестве пароля.
После успешного входа в систему мы должны оказаться в терминальном интерфейсе 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
нано hello_world.py
И в него мы можем добавить этот код Python
#! / usr / bin / pythonfrom escpos.printer import Usb p = Usb (0x0416, 0x5011) p.text ("Mini IOT Printer / n") p.close ()
Выйдите из него (CTRL-X), сохраните (CTRL-Y) и запустите, чтобы проверить его.
python3 hello_world.py
Шаг 3. Подключение к Интернету вещей (часть 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, к которому мы вернемся позже. Мы можем оставить поле «Метод» как «Получить», а для типа содержимого выбрать «Обычный текст». В поле «Тело» нажмите «Добавить ингредиент» и выберите «Весь список». Будет отправлен весь список покупок в виде запроса Get.
Шаг 4. Подключение к Интернету вещей (часть 2)
Предыдущий шаг касается части «Интернет», поэтому теперь давайте поработаем над частью «вещи», используя Raspberry Pi. Чтобы взаимодействовать с апплетом веб-перехватчиков «If This Then That», нам необходимо настроить веб-сервер на Raspberry Pi. Есть много разных способов настроить веб-сервер, но, учитывая, что я в конечном итоге хочу запустить скрипт Python, я решил использовать сервер Python Flask.
В Pi предустановлены все библиотеки Flask, поэтому все, что нам нужно сделать, это начать писать тестовый скрипт:
нано flask_test.py
И в него давайте добавим код, который обслуживает простую веб-страницу.
#! flask / bin / python # ИМПОРТИРОВАТЬ БИБЛИОТЕКИ FLASK из flask import Flask, запрос # СОЗДАТЬ ПЕРЕМЕННУЮ ФЛАКУ app = Flask (_ name_) # СОЗДАТЬ СТРАНИЦУ 'ИНДЕКС' @ app.route ('/') def index (): return 'Ваш сервер Flask работает!' # ЗАПУСКАТЬ ПРОГРАММУ if _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:
нано iot_print_server.py
И в него добавьте следующий код:
#! flask / bin / python # ИМПОРТИРУЙТЕ БИБЛИОТЕКИ ФЛАГИ И ПРИНТЕРА из флакона import Flask, запрос из escpos.printer import Usb # НАЗНАЧЕНИЕ ПЕРЕМЕННЫХ ДЛЯ ПРИНТЕРА И ФЛЯЖКИ p = Usb (0x0416, 0x5011) app = Flask (_ name_) # CREATE 'INDEX' PAGE @ app.route ('/') def index (): return 'Ваш сервер Flask работает!' # СОЗДАТЬ "СТРАНИЦУ" ВЫЗВАННЫЙ "СПИСОК" ДЛЯ ПЕЧАТИ ТОРГОВОГО СПИСКА ALEXA @ app.route ('/ list') def list (): #CAPTURE "GET" DATA FROM IFTTT WEBOOKS content = request.get_data () #CONVERT RAW DATA TO СТРОКА str_content = str (content) # РАЗДЕЛЕНИЕ ДАННЫХ НА ОТДЕЛЬНЫЕ СТРОКИ str_split = str_content.splitlines () # РАЗДЕЛИТЬ СЛОВА ЗАПЯТКОЙ И ДОБАВИТЬ В НОВЫЙ СПИСОК newlist = для слова в str_split: word = word.split (',') newlist.extend (word) # УДАЛИТЬ ФОРМАТИРУЮЩИЕ ЗНАКИ rmv_marks = [s.strip ("b '") for s в новом списке] #PRINT HEADER #print ("Список покупок / n") p.text ("Список покупок: / n ") # ПЕРЕЧИСЛЕНИЕ И ПЕЧАТЬ КАЖДОГО ПУНКТА В СПИСКЕ r = 1 для x в rmv_marks: #print (str (r) +". "+ X +" / n ") p.text (str (r) +". "+ x + "\ n") r + = 1 # ВОЗВРАТ РЕЗУЛЬТАТОВ return 'x' # ЗАПУСК ПРОГРАММЫ if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')
Вы можете запустить его, чтобы увидеть, возвращает ли он какие-либо ошибки, но он пока не будет работать с нашим веб-перехватчиком, потому что на данный момент сервер работает только локально. У веб-перехватчика пока нет внешнего URL-адреса. Мы могли бы настроить переадресацию портов на нашем маршрутизаторе и просто использовать наш внешний IP-адрес, но это не совсем безопасно. В качестве альтернативы я решаю использовать NGROK.
Шаг 5: Настройка внешнего доступа с помощью 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. Итак, возвращаясь к «If This Then That», в поле URL введите свой адрес пересылки Ngrok и укажите его на странице «list» на нашем сервере Flask. Это должно выглядеть примерно так
random_string.ngrok.io/list
Затем продолжайте и сохраните изменения.
Чтобы проверить это, оставьте Ngrok запущенным, откройте новый терминал и запустите наш скрипт python. Когда оба элемента запущены, спросите Алексу, что у вас в списке покупок. Через минуту или две он должен распечатать результаты. Если вы хотите, чтобы он распечатался немедленно, просто зайдите в свой апплет на IFTTT и нажмите «Проверить сейчас». Если все пойдет хорошо, принтер чеков должен распечатать то, что находится в вашем списке покупок! Последний кусок кода, который нам нужно добавить, - это способ автозапуска ngrok и нашего фляжного сервера при каждом запуске Pi. Мы можем легко сделать это, сделав наш скрипт Python исполняемым:
chmod + x iot_print_server.py
Затем мы можем отредактировать наш файл /etc/rc.local так, чтобы он выглядел так:
## По умолчанию этот скрипт ничего не делает. # Вывести IP-адрес _IP = $ (hostname -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 к принтеру
У меня в чековом принтере много пустого места внутри корпуса. И поскольку Raspberry Pi Zero такой маленький, я подумал, что было бы круто просто спрятать его в принтере чеков, чтобы он выглядел как одно устройство. Единственная проблема заключается в том, что чековый принтер работает от 12 В, а Pi работает от 5 В. Так что, если нам нужен только один кабель питания для питания их обоих, нам придется понизить этот источник питания с 12 В до 5 В.
Используя стабилизатор напряжения 7805, конденсатор 1 мкФ и конденсатор 10 мкФ, я смог создать простой стабилизатор 5 В, который я подключил к материнской плате чекового принтера. Я припаял «-» провод к общему заземлению, а затем я припаял «+» провод к «включенной» стороне переключателя питания, чтобы Pi мог включаться и выключаться при включении и выключении принтера. Используя мультиметр, я проверил, что выход безопасен для Pi. Затем я припаял кабель micro-usb и подключил его к Pi. После подключения кабеля к принтеру и щелчка переключателя и принтер, и Pi включились!
Наконец, я просверлил отверстие для подключения USB-кабеля от Pi к принтеру. Я нашел место, чтобы поместить регулятор 5 В и Pi внутри корпуса принтера, а затем собрал все вместе. Итак, теперь у принтера есть собственный автономный веб-сервер!
Шаг 7. Дальнейшее развитие
Если вы смогли взглянуть на «If This Then That», вы, вероятно, заметили, что в нем есть множество различных веб-сервисов, к которым можно подключиться. Поэтому, если у вас нет Alexa или вы не хотите его использовать, вы можете использовать этот проект для печати практически из чего угодно, например из Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, и т.д. Вы можете найти мой код для печати твитов на моей странице Github. А теперь пойдите и посмотрите, что вы можете придумать!
Первый приз в конкурсе IoT Challenge
Рекомендуемые:
3D-принтер LEGO с использованием Gcode: 6 шагов
3D-принтер LEGO с использованием Gcode: вы хотите создать собственный 3D-принтер, который сможет печатать каждый 3D-файл? Используйте эту страницу или мой сайт для получения инструкций! Более подробные инструкции: Сайт: https://www.lego3dprinter.carrd.co
Многоцветный точечный принтер: 6 шагов
Многоцветный точечный принтер: Всем привет. Это руководство по проектированию и производству многоцветного точечного принтера. В основном это было основано на аналогичной работе, которая уже была опубликована здесь в виде инструкций. Работа, о которой я говорю, называется «Dotter: Huge Arduino based Dot Matrix Pr
Dotter - огромный матричный принтер на базе Arduino: 13 шагов (с изображениями)
Dotter - огромный матричный принтер на базе Arduino: Привет, добро пожаловать в это руководство :) Я Никодем Бартник, 18-летний производитель. За 4 года работы я сделал много вещей, роботов, устройств. Но этот проект, наверное, самый крупный по размеру. Я думаю, он также очень хорошо спроектирован
Как легко добавить любые типы светодиодов на ваш 3D-принтер: 8 шагов (с изображениями)
Как легко добавить любые типы светодиодов к вашему 3D-принтеру: есть ли у вас запасные светодиоды, собирающие пыль в вашем подвале? Вы устали от того, что не можете видеть то, что печатает ваш принтер? Что ж, не смотрите дальше, это руководство научит вас, как добавить светодиодную полосу поверх вашего принтера, чтобы
3D-цветной принтер: 7 шагов (с изображениями)
3D Crayon Printer: я очень хочу 3D-принтер, но у меня нет денег. Мне тоже 13, и я не могу устроиться на работу, что мне делать? Я построил одну из лего. К сожалению, у меня нет Lego Mindstorms (350 долларов), так что пришлось довольствоваться. Это не должно быть точным или точным