Aplicação web em Python e Bottle – parte 2

bottle-2_abertura

Na primeira parte foi criado um esqueleto bem simples de uma aplicação (e também servidor) web com a ideia de rodá-lo em um Intel Edison (o cara aí da foto). Mas sendo ainda um esqueleto ele faz pouca coisa prática, ou seja, mostra uma mensagem quando você acessa o documento raiz (“/”) e avisa quando o recurso solicitado não existe (o tal erro 404).

Nesta parte o programa “aprenderá” a interagir com a porta GPIO do Edison. 🙂

Usando a GPIO

Vou dispensar tanto parte de montagem e configuração do Edison quanto a também da instalação da XDK. Porém, vou me inspirar justamente em dos projetos de exemplo dela, o blinkTest Onboard LED Blink, para montar um pequeno programa que faz piscar o led¹ conectado na porta 13 da GPIO.

O código é simples e tudo o que faz é “contar” até 100 e enquanto acende o led, caso esteja apagado, e o apaga, caso esteja aceso. A ideia é apenas demonstrar como você faz para ler e modificar o estado de uma porta (que no caso tem um led conectado) usando a MRAA.

A MRAA (que não tem um significado) é uma biblioteca para Linux que permite o acesso fácil às portas de E/S de equipamentos como Edison, Galileo, Raspberry Pi etc.

(¹) Na verdade o led se encontra conectado à “placa para Arduino” onde o Edison foi instalado.

Adaptando o servidor

Agora tanto sabemos como montar um servidor HTTP (usado o Bottle) como também acender e apagar um led (via MRAA) em Python. Então basta juntar as duas coisas:

Já que só tenho um led — pois é, preciso comprar mais alguns para tornar este exemplo mais interessante — cortei a parte de selecionar qual deles deve-se acender mas o exemplo é expansível.

Como precisarei acessar a aplicação pelo lado de fora valor de host em bottle.run() foi mudado para “0.0.0.0”.

E também acrescentei alguns “\n” no final das strings mas isto é só enquanto o servidor não retorna as requisições feitas a ele em HTML ou JSON. 🙂

Acendendo e apagando via HTTP

Então é colocar a aplicação para rodar no Edison:

root@edison:/app# ./server.py
Bottle v0.12.10 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.

Para verificar como ela se comporta, acessando:

$ curl http://192.168.0.17:8080/led/0
led desligado

Apagará o led, enquanto que para acendê-lo acesse:

$ curl http://192.168.0.17:8080/led/1
led ligado

Ao acessando a URL com valores diferentes de zero ou um o resultado será uma mensagem de erro:

$ curl http://192.168.0.17:8080/led/9
ação inválida

Neste ponto já é possível brincar de fazer o led do Edison piscar remotamente:

Abstraia por um momento que há algo mais sofisticado que um simples led na outra ponta e já é possível ter algumas ideias interessantes. 🙂

Fechando por aqui…

Claro, por enquanto só é possível alterar o status do led. Então é interessante poder conhecer qual o status dele naquele momento — por que acendê-lo (ou apagá-lo) se ele já está aceso (ou apagado)? — assim como transformar as saídas do servidor em algo que seja mais prático para as linguagens de programação (JSON) e os navegadores (HTML) tratarem.

Mas isto (tudo) deixarei para a próxima parte… Até!

Anúncios

Um comentário sobre “Aplicação web em Python e Bottle – parte 2

  1. Pingback: Aplicação web em Python e Bottle – parte 3 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s