Índice:

Alexa Printer - Impressora de recibos reciclada: 7 etapas (com imagens)
Alexa Printer - Impressora de recibos reciclada: 7 etapas (com imagens)

Vídeo: Alexa Printer - Impressora de recibos reciclada: 7 etapas (com imagens)

Vídeo: Alexa Printer - Impressora de recibos reciclada: 7 etapas (com imagens)
Vídeo: High Density 2022 2024, Junho
Anonim
Image
Image
Alexa Printer | Impressora de recibos reciclada
Alexa Printer | Impressora de recibos reciclada

Sou fã de reciclar tecnologia antiga e torná-la útil novamente. Há algum tempo, adquiri uma impressora térmica de recibos velha e barata e queria uma forma útil de reformulá-la. Então, durante as férias, ganhei um Amazon Echo Dot, e um dos recursos que mais usei foi adicionar mantimentos à minha lista de compras. Então, achei que seria legal combinar as duas e usar a impressora de recibos como uma impressora IOT para Alexa (ou Google Home, ou Siri, etc). Vamos ver o que é necessário para tornar essa ideia uma realidade.

Suprimentos

Estas são as partes que utilizo neste projeto:

  1. Impressora de recibos térmica genérica barata (precisa ser compatível com ESC-POS)
  2. Dispositivo Amazon Alexa (outros dispositivos de "assistente doméstico" provavelmente também funcionarão)
  3. Raspberry Pi Zero Wireless
  4. Regulador 7805 5v
  5. Capacitor de 10μf
  6. Capacitor de 1μf

Outras coisas que uso neste projeto são:

  1. Se isto então aquilo (IFTTT.com)
  2. Equipamento de solda

Etapa 1: Configurando o Raspberry Pi Zero W

Configurando o Raspberry Pi Zero W
Configurando o Raspberry Pi Zero W
Configurando o Raspberry Pi Zero W
Configurando o Raspberry Pi Zero W
Configurando o Raspberry Pi Zero W
Configurando o Raspberry Pi Zero W

A primeira etapa é fazer com que a antiga impressora de recibos imprima novamente. Eu escolhi usar o Raspberry Pi Zero W como o controlador por causa de seu preço barato e tamanho pequeno. Na verdade, é pequeno o suficiente para caber na própria caixa da impressora de recibos, portanto, não há conexões externas! O Pi Zero W também possui Wifi integrado, então tudo está basicamente integrado em seu tamanho pequeno.

Para colocar o Pi em funcionamento, precisamos baixar o Raspbian OS e gravá-lo em um cartão microSD usando um programa como o Etcher. Insira-o no Pi junto com um cabo HDMI, teclado, mouse e, em seguida, alimentação.

Quando o Pi é inicializado e você está na interface da área de trabalho, pode se conectar ao seu wireless clicando no ícone wireless no canto superior direito e selecionando o nome de sua conexão wireless. Então, se você clicar com o botão direito no mesmo ícone sem fio, você pode ir para as configurações de rede e definir um endereço IP estático para que possamos facilmente conectar a ele pela rede. Finalmente, você deseja clicar no menu principal e selecionar o "Editor de configuração Raspbian" e, na guia "Interfaces", certifique-se de que o SSH esteja habilitado. Em seguida, salve-o e reinicie seu Pi.

Etapa 2: Imprimir do Pi

Imprimindo do Pi
Imprimindo do Pi
Imprimindo do Pi
Imprimindo do Pi

Assim que o Raspbery Pi for reiniciado, ele deve ser conectado à sua rede sem fio com um IP estático e com SSH habilitado. Portanto, agora devemos ser capazes de nos conectar a ele remotamente de qualquer outro computador. Para fazer isso, você precisará de um cliente SSH. Para Windows, um bom cliente é o Putty. Você pode se conectar a ele usando o endereço IP estático do Pi que definimos anteriormente. Em seguida, você pode fazer o login usando "pi" como nome de usuário e "raspberry" como senha.

Após um login bem-sucedido, devemos estar na interface do terminal do Pi. Aqui podemos digitar comandos que serão executados no Raspberry Pi. Por exemplo, uma das primeiras coisas que queremos fazer é ter certeza de que o software no Pi está atualizado. Então, no terminal podemos digitar:

sudo apt-get update

Este comando atualizará os repositórios de software no Pi. A seguir, podemos instalar o software da impressora ESC-POS e as bibliotecas necessárias.

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

Feito isso, podemos agora conectar a impressora à porta micro-USB do Pi (usando um adaptador) e ligá-la. Então, em nosso terminal, podemos criar um pequeno script python

nano hello_world.py

E nele podemos adicionar este código python

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

Saia (CTRL-X), salve (CTRL-Y) e execute-o para testá-lo

python3 hello_world.py

Etapa 3: Conectando-se à Internet das Coisas (Parte 1)

Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)
Conectando-se à Internet das Coisas (Parte 1)

De que adiantaria uma impressora sem algo para imprimir? Eu queria habilitar a funcionalidade de impressão de diferentes serviços da Internet, como o Alexa. Então, como posso fazer isso? Uma opção é escolher um serviço de Internet específico, rastrear sua documentação de API e escrever um aplicativo baseado em sua API. Mas eu escolho seguir o caminho da preguiça …

Existe um ótimo site chamado "If This Then That" que aciona ações para diferentes serviços de internet (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter, etc) com base em um conjunto de critérios. Por exemplo, "se" eu postar no Facebook (isso), "Então" me envie um e-mail (isso).

Então, na primeira metade disso, eu me inscrevi para uma conta gratuita, você pode começar a criar um novo "miniaplicativo" para os diferentes serviços que deseja acionar. A parte "Este" do meu miniaplicativo será Alexa. Existem vários gatilhos do Alexa para escolher, mas vou selecionar aquele que diz "Pergunte o que está na sua lista de compras". E, no final das contas, queremos que ele acione um script Python no Raspberry Pi, portanto, para a parte "Aquele" do script, queremos escolher Webhooks.

Na opção Webhooks, podemos adicionar um URL que aponta para o nosso Pi, ao qual voltaremos mais tarde. Podemos deixar o campo Método como "Obter" e para o tipo de conteúdo selecionar "Texto Simples". Para o campo Corpo, clique em "Adicionar Ingrediente" e selecione "Lista Inteira". Isso enviará toda a lista de compras como uma solicitação Get.

Etapa 4: Conectando-se à Internet das Coisas (Parte 2)

Conectando-se à Internet das Coisas (Parte 2)
Conectando-se à Internet das Coisas (Parte 2)
Conectando-se à Internet das Coisas (Parte 2)
Conectando-se à Internet das Coisas (Parte 2)

A etapa anterior cuida da parte da "Internet", então agora vamos trabalhar na parte das "coisas" usando o Raspberry Pi. Para nos comunicarmos com o miniaplicativo de webhooks "If This Then That", precisamos configurar um servidor web no Raspberry Pi. Existem muitas maneiras diferentes de configurar um servidor web, mas considerando que, no final das contas, quero executar um script Python, decidi usar o servidor Flask do Python.

O Pi tem todas as bibliotecas Flask pré-instaladas, então tudo o que precisamos fazer é começar a escrever um script de teste:

nano flask_test.py

E nele, vamos adicionar algum código que atenda a uma página da web simples.

#! flask / bin / python # IMPORTAR AS BIBLIOTECAS FLASK do flask importar Flask, solicitar #CREATE A FLASK VARIABLE app = Flask (_ name_) #CREATE AN 'INDEX' PAGE @ app.route ('/') def index (): return 'Seu servidor Flask está funcionando!' # EXECUTE O PROGRAMA if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Agora, basta salvar o programa e executá-lo usando este comando:

sudo python3 flask_test.py

Você verá pela resposta do comando que a porta padrão em que o Flask é executado é a porta 5000. Portanto, em um navegador da web, se você digitar o endereço IP do seu Pi: 5000, deverá ver o texto "Seu servidor Flask está funcionando!"

Temos nosso código Python de teste anterior que é impresso em nossa impressora de recibos e temos nosso servidor Flask de teste. Em seguida, precisamos combiná-los e incorporar algum código que extraia os dados de nosso miniaplicativo Webhook. Vamos criar um novo arquivo Python:

nano iot_print_server.py

E dentro dele, adicione o seguinte código:

#! flask / bin / python # IMPORTAR O FLASK E AS BIBLIOTECAS DA IMPRESSORA do flask import Flask, solicitar do escpos.printer import Usb #ASSIGN VARIABLES PARA A IMPRESSORA E O FLASK p = Usb (0x0416, 0x5011) app = Flask (_ name_) #CREATE 'INDEX' PAGE @ app.route ('/') def index (): return 'Seu servidor Flask está funcionando!' #CREATE "PAGE" CHAMADA "LIST" PARA IMPRIMIR LISTA DE COMPRAS DA ALEXA @ app.route ('/ list') def list (): #CAPTURE "GET" DADOS DE IFTTT WEBOOKS content = request.get_data () #CONVERT RAW DATA TO STRING str_content = str (conteúdo) #DIVIDE DADOS EM LINHAS SEPARADAS str_split = str_content.splitlines () # SEPARAR PALAVRAS POR Vírgula E ADICIONAR A UMA NOVA LISTA newlist = para palavra em str_split: word = word.split (',') newlist.extend (word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip ("b '") para s na nova lista] #PRINT HEADER #print ("Lista de compras / n") p.text ("Lista de compras: / n ") #ENUMERAR E IMPRIMIR CADA ITEM NA LISTA r = 1 para x em rmv_marks: #print (str (r) +". "+ X +" / n ") p.text (str (r) +". "+ x + "\ n") r + = 1 #RETURN RESULTS return 'x' # EXECUTE O PROGRAMA se _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

Você pode executá-lo para ver se ele retorna algum erro, mas ele ainda não funcionará com nosso webhook porque, a partir de agora, o servidor está rodando apenas localmente. Ainda não há um URL externo para o webhook se conectar. Poderíamos configurar o encaminhamento de porta em nosso roteador e apenas usar nosso endereço IP externo, mas isso não é muito seguro. Como alternativa, decido escolher o NGROK.

Etapa 5: Configurando o acesso externo com Ngrok

Configurando o acesso externo com Ngrok
Configurando o acesso externo com Ngrok
Configurando o acesso externo com Ngrok
Configurando o acesso externo com Ngrok

Ngrok configura uma conexão segura para sua rede sem ter que expor seu IP externo ou bagunçar com o encaminhamento de porta. Depois de se inscrever para uma conta gratuita, ele lhe dá um token de autorização. Em seguida, no seu Raspberry Pi, você pode baixá-lo, descompactá-lo, conectar seu token de autenticação e executá-lo na porta 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… descompacte ngrok-stable-linux-arm./ngrok authtoken [insira seu token de autenticação aqui]./ngrok http 5000

*** IMPORTANTE *** A versão gratuita do Ngrok não fornece um endereço estático, então toda vez que você executar o Ngrok novamente, ele fornecerá um endereço diferente. Se você deseja um endereço estático para não ter que reeditar seu Webhook, será necessário pagar por uma conta atualizada.

Uma alternativa gratuita ao Ngrok que oferece IPs estáticos é chamada de "Serveo" em www.serveo.net

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

Na tela resultante, ele fornece um endereço de encaminhamento (https://random-string.ngrok.io) que pode ser usado em nosso miniaplicativo Webhook. Então, voltando para "If This Then That", no campo URL, insira seu endereço de encaminhamento Ngrok e aponte-o para a página de "lista" em nosso servidor Flask. Deve ser parecido com isto

random_string.ngrok.io/list

Então vá em frente e salve as alterações.

Para testá-lo, mantenha o Ngrok em execução, abra um novo terminal e execute nosso script python. Com os dois itens em execução, pergunte a Alexa o que está em sua lista de compras. Depois de um ou dois minutos, os resultados devem ser impressos. Se você deseja imprimir imediatamente, basta ir ao seu miniaplicativo no IFTTT e clicar em "Verificar agora". Se tudo correr bem, a impressora de recibos deve imprimir o que está em sua lista de compras! O bit final de código que precisamos adicionar é uma maneira de iniciar automaticamente o ngrok e nosso servidor de frasco toda vez que o Pi é inicializado. Podemos fazer isso facilmente tornando nosso script Python executável:

chmod + x iot_print_server.py

Então, podemos editar nosso arquivo /etc/rc.local para que tenha a seguinte aparência:

## Por padrão, este script não faz nada. # Imprime o endereço IP _IP = $ (hostname -I) || verdadeiro se ["$ _IP"]; então printf "Meu endereço IP é% s / n" "$ _IP" fi #autostart ngrok e aponte-o para seu arquivo de autenticação./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

Etapa 6: Adicionando o Pi à impressora

Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora
Adicionando o Pi à impressora

A impressora de recibos que tenho tem muito espaço vazio dentro da caixa. E como o Raspberry Pi Zero é tão pequeno quanto é, achei que seria legal escondê-lo na impressora de recibos para que parecesse um único dispositivo. O único problema é que a impressora de recibos funciona em 12v e a Pi em 5v. Portanto, se quisermos apenas um cabo de alimentação para alimentar os dois, teremos que reduzir a fonte de alimentação de 12v para 5v.

Usando um regulador de tensão 7805, um capacitor de 1 uF e um capacitor de 10 uF, consegui criar um regulador de 5 V simples que conectei à placa lógica da impressora de recibos. Soldei o fio "-" ao aterramento comum e, em seguida, soldei o fio "+" ao lado "ligado" do botão liga / desliga para que o Pi ligasse e desligasse quando a impressora fosse ligada e desligada. Usando um multímetro, testei para confirmar se a saída era segura para o Pi. Então eu soldei um cabo micro-usb e o conectei ao Pi. Depois de conectar o cabo à impressora e girar o botão, a impressora e o Pi ligaram!

Por fim, fiz um furo para conectar o cabo USB do Pi à impressora. Encontrei um lugar para colocar o regulador de 5 V e o Pi dentro do estojo da impressora e, em seguida, coloquei tudo de volta no lugar. Portanto, agora a impressora também tem seu próprio servidor da Web independente!

Etapa 7: Indo além

Levando mais longe
Levando mais longe

Se você pudesse dar uma olhada em "If This Then That", provavelmente notou que ele tem vários serviços da web diferentes para se conectar. Então, se você não tem uma Alexa, ou não se importa em usar uma, você pode usar este projeto para imprimir de praticamente qualquer coisa, como Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, etc. Você pode encontrar meu código para imprimir Tweets na minha página do Github. Agora vá e veja o que você pode fazer!

Desafio IoT
Desafio IoT
Desafio IoT
Desafio IoT

Primeiro prêmio no Desafio IoT

Recomendado: