Executar scripts Python via interface da Web

15

Já vi muitos projetos que pretendem controlar os pinos do GPIO, mas quero que algo um pouco diferente, por exemplo, consiga piscar um LED.

Existe um sistema por aí onde, por meio de uma interface da web, eu posso clicar e executar um script python, por exemplo "blink.py" no meu raspberry.

J.Zil
fonte

Respostas:

12

Você pode fazer isso acontecer de várias maneiras, usando CGI ou outro script do lado do servidor. Um problema serão as permissões para acessar os pinos GPIO. Não parece haver uma solução limpa . Atualmente, pode ser mais fácil exibir os arquivos gpio ao usuário que executa o servidor da Web, chamar um programa (suid) que pode acessar os pinos ou ter um daemon separado com acesso aos pinos para os quais você pode enviar mensagens (sinal, canal / socket, outro ipc ...).

Para "executar um script python através de uma interface web", que você pode querer olhar para web.py . É um pequeno módulo muito elegante que permite escrever um único "serviço da web" de arquivo único que pode fazer qualquer coisa. Muito útil para esse tipo de coisa IME. Requer efetivamente nenhuma configuração ou software especial (além da instalação comum do python e do próprio web.py). Basta escrever manipuladores para URLs em python, opcionalmente com modelos html e executar. Aponte um cliente (navegador, outro script, wget ..) para a porta correta e ele simplesmente funciona. :)

Edit: Um novo projeto manchado, serpint parece permitir balançando GPIO partir de uma tomada ou interface do dispositivo de char possivelmente falso.

XTL
fonte
4
O balão parece semelhante ao web.py. Há também o Django, que parece ter mais recursos - provavelmente um exagero para este projeto.
Frepa 6/11/12
Para acessar o GPIO, basta adicionar o usuário ao grupo gpio. Ou inicie o servidor como root, o que a maioria das pessoas faz para a porta 80 de qualquer maneira. Os exemplos de balão podem chamar scripts ou usar o tempo para adicionar suspensão entre alternâncias. O principal recurso é {{}} nos modelos dos quais suspeito que o OP não precisava.
Mckenzm 26/06/19
Obrigado pela atualização. Para o "erm", porém, essa resposta é de 2012, quando os GPIOs eram notoriamente apenas raiz. Vejo que agora há um grupo gpio, que é um progresso fantástico e uma maneira mais correta de acessar o hardware.
XTL
2

Se você está apenas começando com o desenvolvimento da web, dê uma olhada no Bottle . O Bottle é mais simples que o balão, no sentido de que é uma estrutura da Web completa em um único arquivo. Por outro lado, o Flask visa reutilizar o código de som de diferentes bibliotecas e, portanto, pode ser mais sólido, mas também mais complexo.

Aqui está o Olá Mundo com Garrafa:

from bottle import route, run, template

@route('/hello/:name')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Execute-o com:

python HelloBottle.py

E abra em um navegador: http://localhost:8080/hello/world


Para disponibilizar seu site em outros computadores, defina hostcomo 0.0.0.0no runmétodo A última linha do Hello World acima deve então ser:

run(host='0.0.0.0', port=8080)

Agora você deve conseguir acessar seu site através do endereço IP do Pi, desta forma: http://192.168.0.123:8080/hello/world

Consulte a documentação do frasco sobre a implantação para obter mais detalhes.

Bengt
fonte
No meu Raspberry Pi, se eu executar curl http://localhost:8080/hello/world, recebo os resultados esperados. No entanto, eu quero poder acessá-lo no meu computador comum pela LAN. Depois de usar ifconfigo meu endereço IP, a seguinte URL no meu computador normal é incapaz de estabelecer uma conexão: http://192.168.1.102:8080/hello/matthew. Consigo acessar outra página da Web que fiz em ` 192.168.1.102/home.php '. Você tem alguma idéia de como eu posso na minha página de garrafa?
Matthew Moisen
Seu home.php é implicitely acessado via porta 80 (http) tente executar garrafa nessa porta e se succedes, certifique-se não há firewalls entre ou em seu desktop e do pi bloqueando a porta 8080.
Bengt
Acontece que eu precisava mudar o meu IP, quer localhost ou 0.0.0.0
Matthew Moisen
1

Instale o iPython Notebook.

rpi#> sudo apt-get install ipython-notebook ipython3-notebook

Em seguida, execute-o:

rpi#> ipython notebook

Nota: Você também pode acessá-lo em um PC:
rpi #> ipython notebook --ip = 10.0.0.7
# here 10.0.0.7 é o meu IP RPi.
# de outro computador no navegador, estou digitando:
http://10.0.0.7:8888

insira a descrição da imagem aqui

Você verá isso:

insira a descrição da imagem aqui

Em seguida, crie um novo notebook e execute seu código lá:

insira a descrição da imagem aqui

Teste de método:

insira a descrição da imagem aqui

Bibliografia:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ usando-raspberry-pi-gpio-using-python /

Youtube: https://www.youtube.com/watch?v=cJuF4IDMuLY

Muito importante:

A música está sendo executada no RPi em segundo plano no programa linux screen sobre mps-youtube.

rpi#> sudo apt-get install python3-pip
rpi#> sudo pip3 install --upgrade mps-youtube  
rpi#> sudo pip3 install --upgrade https://github.com/mps-youtube/pafy/archive/develop.zip
rpi#> mpsyt # to start it
    # configure mpsyt to show video, player.
    mpsyt#> set show_video True
    mpsyt#> set player omxplayer
    mpsyt#> set search_music False
    mpsyt#> . lindsey stirling
    mpsyt#> 2 # to play song from a list.

Boa sorte!

Vitalie Ghelbert
fonte
Sua pergunta pode ser melhorada ... Por que instalar o notebook Python? o que exatamente isto faz? Certamente, deve comentar sobre possíveis problemas de segurança (como deixá-lo aberto para a Internet).
Jacobm001
@ Jacobm001, hoje não, agora não. Se necessário, siga a bibliografia na parte inferior.
Vitalie Ghelbert
0

Aqui está um tutorial de como isso pode ser alcançado: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

Joe
fonte
11
Resuma o tutorial na sua resposta, caso o link desapareça algum dia ou o contrato mude.
precisa saber é o seguinte
Estamos tentando uma nova política em relação às respostas somente para links sem informação aqui. Se esta postagem não for editada para conter informações que possam responder, mesmo que mínimas, em 48 horas, ela será convertida em Wiki da Comunidade para simplificar a correção pela comunidade.
9788 Steve Jobs # 1