Python em sistemas embarcados?

268 views
Skip to first unread message

erk 7020

unread,
Dec 10, 2015, 5:36:22 PM12/10/15
to Python Brasil
Alguém trabalha com python em embarcados? Gostaria de ver alguns projetos com exito usando a linguagem, e se possível pq escolheram python frente a c ou c++ mesmo sabendo da relatividade da questão. VLW

Cleiton Bueno

unread,
Dec 10, 2015, 7:29:24 PM12/10/15
to Python Brasil
Olá Erk, não sei se sou a melhor pessoa mas tenho bastante contato com Python e trabalho a tempos com Linux e Linux em Sistemas Embarcados.

Python ganhou minha atenção a alguns anos principalmente por ser "batteries included", rapaz isso me cativou quando conheci a linguagem.
Hoje desenvolvo soluções em firmware bare-metal (Microcontroladores AVR, NXP e Microprocessadores ARM Cortex-Mx(x send 0+, 3 e 4)) além de ARM1176, ARM Cortex-A9 e Cortex-A8 com Linux Embedded.

Minha primeira solução com Python no mundo embarcado foi no meu TCC, quando desenvolvi em Linux Embarcado em uma Raspberry PI B um sistema de monitoramente de servidores Linux com SNMP para SO e Serviços, Monitorar Temperatura/Umidade de um CPD e usando um Arduino(Microcontrolador ATMega328P) via UDP coletando informações de Temperatura, Umidade, Tensão, Corrente de um dado equipamento além de outras "firulas".

E o 'banco de dados' disso no TCC para facilitar ficava na Raspberry PI B, e ela que fazia aquisição dos dados, processamento, gerava alertas e outras coisas, e o daemon que fazia aquisição dos dados via SNMP e via UDP, fazia o insert no database, enviava e-mail, sms e alerta via XMPP e também executava a aplicação web era 90% em Python.

Só não foi 100% porque precisei implementar umas rotinas I2C na Raspberry PI e não tinha o know-how de hoje em Python e escrevi em C.

A uns tempos atras na empresa precisávamos implementar uma ferramentas para atualizar N equipamentos em campo, esta aplicação iria rodar em um servidor para realizar update mas os equipamentos são embarcados em locais diferentes e com internet muitas vezes precária, então toda parte de comunicação, checksum, manipulação dos pacotes e tudo em Python e foi algo bem bacana.

Hoje não desenvolvo em muitas linguagens sou bem restrito em C, Python, Qt5 e Shell Script e acho que esta de bom tamanho, o que faz eu pensar em um embarcados se faço em C ou Python?

* A tal aplicação deve ser critica quanto a tempo de processamento?
* Stream de Texto !?! (Comparado a C e Perl, esquece ;/)


Teve um serviço ano passado que realizei free-lancer que tive que implementar em C, porque? Porque o intervalo de tempo para aquisição dos dados que era em 4 canais no GPIO era muito baixo e tive que fazer a aplicação em user-space "conversar" com um modulo do kernel que rodava em kernel-space, alias, não tive sucesso no GPIO e tive que aplicação o RTLinux para isso, enfim...

Mas já adotei Python para muita coisa e consegui ganhar credibilidade com isso, algumas coisas como:

* Comunicação I2C
* Comunicação SPI
* Comunicação Serial 
* Comunicação com modem GSM (Comandos AT)
* Manipulação com MMAP com endereços de GPIO
* Comunicação TCP, UDP, SNMP, SMTP entre outras
* Sinais e IPC em Linux
* Comunicação CAN
* GUI com PySide e TKinter
* Escrever parte de aplicação em CPython
* Acessar lib compartilhada do Linux em Python
* PyPy, Cython e outras 'filuras' para melhor desempenho
* Profiling em cima de aplicações

E outras coisas que de cabeça agora não me recordo.


Uma conclusão minha, "não dá" para enfiar um Python dentro de um Arduino UNO, ou querer fazer magica, mas em Python em tenho tudo em um só que em pouco tempo consigo prototipar e em pouco tempo colocar a solução para funcionar e ae ir refatorando e hardening na aplicação.

Mas como desenvolvedor você tem que ter bom senso e colocar em uma balança, e pensar em varias coisas como tempo de desenvolvimento, equipe, manutenção de código, em Python você pode alterar direto no target, em C muitas vezes tera que fazer cross-compiling e transferir o novo binario.

Ficou muito extenso mas tentei resumir minha vivencia com Python ;)


PS: Digi e Telit já usam Python em suas soluções embedded, olha só! Eu estou em um projeto de um cliente mexendo com Telit.

  

Abraço.



Att,
Cleiton Bueno


Blog | Linkedin | Portal Embarcados 

Ronaldo Tomazeli Duarte

unread,
Dec 11, 2015, 6:41:44 AM12/11/15
to python...@googlegroups.com
+1 para o motivo do Cleiton, "batteries included".

Recentemente entrei em um projeto com aquisição de dados via UDP e alguns serviços em TCP.

Minha experiência anterior com isso foi em um ARM7. Foi bem trabalhoso, com porte de RTOS, desenvolvimento de driver para o MAC para integração com o stack TCP/IP disponível, e muita coisa da camada de aplicação escrita no braço, em C.

Neste novo projeto, o budget pro hardware subiu. Deu pra pensar em Linux, assim parti pro Python. Não me arrependi até agora! Só nas bibliotecas padrão já consegui processamento assíncrono, logs, envios de email e um cliente FTP. A produtividade foi fantástica.

Citando o Cleiton novamente, é claro que é preciso saber quais são seus requisitos. GPIO mega-rápido fica difícil.

Ronaldo

Em 10 de dezembro de 2015 20:36, erk 7020 <emp...@gmail.com> escreveu:
Alguém trabalha com python em embarcados? Gostaria de ver alguns projetos com exito usando a linguagem, e se possível pq escolheram python frente a c ou c++ mesmo sabendo da relatividade da questão. VLW

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

André Prado

unread,
Dec 11, 2015, 6:48:39 AM12/11/15
to python...@googlegroups.com
A microbit da BBC vem com o micropython e eles tem varios exemplos bacanas no repo:

bem legal
--
Atenciosamente/Regards
André Castelan Prado

Victor Augusto Furtado Leite

unread,
Dec 11, 2015, 8:28:58 AM12/11/15
to python...@googlegroups.com
Fala Erk, beleza?

Trabalho com sistemas embarcados também e a uns 2 anos e meio começei a aprender e usar python no meu dia-a-dia por conta da praticidade e produtividade que ele propicia. Trabalho principalmente com firmware bare-metal e participei de poucos projetos que usassem algum SO embarcado (tirando RTOS).

Hoje uso bastante para testes, injeção de comandos e automatização de jigas de teste. Mas já cheguei a desenvolver algumas aplicações para rodar no embarcado.

Concordo com opinião do Cleiton de que "não dá" pra sair usando python em todo sistema embarcado, apesar de existirem alguns ports para hardwares com baixa capacidade de processamento. Você sempre precisará analisar seus requisitos e constraints para decidir qual ferramenta irá usar. E acho que isso sempre deve ser feito junto com o planejamento do projeto.

Já vi coisas que são o contrário do exemplo do Cleiton de não usar python, por exemplo. Certa vez, vi um sistema que tinha capacidade de processamento e memória suficientes pra rodar umas 3 aplicações python juntas, mas foi feito um sistema razoavelmente complexo, com dezenas de arquivos e algumas centenas de linhas de código, sendo que o tal sistema não tinha requisito nenhum de tempo ou footprint de memória e poderia ser feito em menos de 100 linhas (provavelmente) de python ou alguma outra linguagem de mais alto nível.

Um problema (do meu ponto de vista) que vejo muito, principalmente no Brasil onde essa área não é muito ampla, é que as empresas/desenvolvedores as vezes tem medo ou receio de usar outra coisa que não seja C ou Assembly em sistema embarcados. Há alguns anos atrás não havia muita opção mesmo, mas hoje com a capacidade dos hardwares e ferramentas disponíveis esses sistemas precisam ser avaliados de acordo com os requisitos do projeto.

Enfim, na minha opinião a escolha de uma linguagem sempre vai depender do projeto e do seu objetivo (ou da empresa) com o produto/serviço.


Aah, o Cleiton escreve para o site do embarcados.com.br, e tem bons artigos lá mostrando o uso de python em sistemas embarcados.


[]s


2015-12-10 20:36 GMT-02:00 erk 7020 <emp...@gmail.com>:
Alguém trabalha com python em embarcados? Gostaria de ver alguns projetos com exito usando a linguagem, e se possível pq escolheram python frente a c ou c++ mesmo sabendo da relatividade da questão. VLW

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Victor

Marcelo MD

unread,
Dec 11, 2015, 11:18:55 AM12/11/15
to Python-brasil
Eu vejo a questão em dois eixos ortogonais: complexidade do problema e capacidade do hardware.

É legal fazer algumas perguntas bem cedo no projeto:

- O hw suporta Linux? 
  Não acredito em python em baremetal. Se é pra usar Python eu quero todas as libs disponíveis =);

- Precisamos de um hardware tão potente?
  O problema que eu quero resolver pede tudo isso? Acrescenta valor pra solução e pro usuário?

- Temos RAM, ROM e CPU suficiente?
  Não vai ficar esguelado? Vai faltar recurso pra outras partes?

- Vamos conseguir performance com Python? Podemos fazer um módulo em C e o resto em Py?
  É bom lembrar que um processador embarcado não é, necessariamente, otimizado pra performance computacional, multithread, etc. A diferença entre C e Python pode ser maior no target que no computador de trabalho.
  Dito isso. Eu gosto da idéia de fazer a lógica e interface em Python e o miolo do negócio em C;

- Precisamos de baterias ou precisamos nos preocupar com consumo?
  Python é menos eficiente em termos de uso de recursos. Como isso afeta o consumo de energia?
  Temos alguma limitação no fornecimento de energia? Duração de bateria?

- Quanto vamos ganhar em produtividade vs gastar em hardware?


Relendo pode dar a impressão que eu sou contra Python embarcado. Não sou, hehehe. Na verdade a minha experiência é bem dividida.
Já vi projetos onde já existia um sistema que comportava Python e que se beneficiaria muito do ganho de produtividade no desenvolvimento. O pessoal tinha problemas graves de entrega e bugs porque "C é mais performático".
Já vi um projeto onde começaram usando Python pelo ganho de produtividade. Feito o MVP, validado e investido, faltou recurso e tiveram que trocar de linguagem.
No meu último projeto pessoal usei uma Raspberry Pi. Comecei com Python e ficou meio pesado. Acabei trocando por Go. Do lado do servidor usei Python.



Marcelo Mallmann Dias

André Prado

unread,
Dec 11, 2015, 11:21:26 AM12/11/15
to python...@googlegroups.com
Marcelo o uPython (micro python) parece atender essa parte do Python ser soh uma logica de cola entre as partes em C.

Eu trabalhei num projeto com Lua em um telefone ip em que toda logica do telefone estava em Lua e basicamente chamavamos os devices implementados em C para fazer o trabalho sujo.

Ficou muito legal.
Atenciosamente/Regards
André Castelan Prado

Cleiton Bueno

unread,
Dec 12, 2015, 8:42:37 AM12/12/15
to Python Brasil
@Erk deu pra ver que envolve vários fatores não? Apesar do microPython ser algo bem "revolucionário" em termos Python x Embarcados não creio que ganhe força, porque vejo mais interesse do Node.js e pelo que vi em listas esta apresentando melhores resultados, mas enfim...

Agora com Linux Embedded tirando alguns casos, e o quanto de desempenho/performance tu precise, Python irá atender.

Em 2013 tive que fazer uma aplicação em C para receber um JSON e processar, e era requisito ser em C, levei creio que 10x mais o tempo que levaria em Python e nem era questão de critico a solução em si.

Já fiz compilação-cruzada de Python para MIPS, sei que funcionou muito bem, mas não participei da programação apenas do port e subir com suporte ao wsgi.


Abraço.

Att,
Cleiton Bueno


Blog | Linkedin | Portal Embarcados


Em quinta-feira, 10 de dezembro de 2015 20:36:22 UTC-2, erk 7020 escreveu:

Marcelo MD

unread,
Dec 14, 2015, 5:40:32 AM12/14/15
to Python-brasil
@andre,

Não sei se deveria dizer isso aqui, mas acho Lua + C mais legal pra uma classe de sistemas embarcados hehehe

Na real tem toda a discussão do que ẽ um sistema embarcado. Qual a diferença de uma máquina de estados em lógica discreta e um PC de dimensões reduziddas? Tem livros e livros a respeito e ninguém chega a uma resposta final.

Eu sempre fui da linha que sistema embarcado é um sistema que faz uma coisa só. Propósito específico e nada mais. Agora pega uma Raspberry Pi. É um computador de uso geral, pode rodar programas arbitários e tudo. Capaz até de compilar o próprio sistema operacional. Muito doido =)

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Marcelo Mallmann Dias
Reply all
Reply to author
Forward
0 new messages