Programando um Arduino usando Python, em vez de C / C ++

36

Eu não sou muito habilidoso com a linguagem C e queria saber se existe uma maneira pela qual o python possa ser usado para programar um Arduino. Provavelmente, isso exigiria um IDE diferente para poder depurar os scripts eles mesmos.

JVarhol
fonte
2
Existem algumas alternativas para programar o Arduino, uma delas é o BitLash e existe um intérprete básico . Existem algumas opções quando você pesquisa na Internet, mas aprender C / C ++ será recompensado no final.
jippie
Obrigado, estou realmente ficando um pouco melhor em C, apenas não tão bom quanto em Python.
JVarhol
2
questão relacionada, mais geral: "Opções de programação do Arduino que não sejam C ++"
David Cary
Um PI de framboesa é uma opção?
Paul

Respostas:

26

Vai ser extremamente difícil fazer com que qualquer tipo de script Python seja executado diretamente no Arduino. O motivo é que é uma linguagem interpretada; portanto, você precisará do intérprete a bordo, além do script de texto sem formatação. Provavelmente não haverá memória suficiente para tudo isso.

Sua melhor aposta provavelmente seria encontrar uma maneira de compilar um script Python para código de máquina nativo (que é como o C / C ++ funciona). Acredito que existem projetos para fazer algo assim em outras plataformas, mas (até onde eu sei) nenhum que faça isso com sucesso no Arduino ainda.

Você pode encontrar informações mais úteis sobre esta questão no Stack Overflow: Existe uma maneira de "compilar" o código Python em um Arduino (Uno) .

Peter Bloomfield
fonte
15

Sim, é (um pouco) possível programar o Arduino usando Python. Um desses projetos no Github é a API de prototipagem do Python Arduino v2 . Ele fornece funcionalidades muito básicas, como E / S digital e E / S analógica.

Isso pode ser usado para projetos muito simples.


* Este projeto é um pouco complicado em "programar" a placa usando a conexão serial. Ele passa os comandos pela conexão serial para um esboço em execução no quadro que "executa" o comando Python.

asheeshr
fonte
Então a placa precisa estar conectada ao computador para executar o código?
JVarhol
@JVarhol Estranhamente, sim.
asheeshr
11
Bem, isso é muito ruim. Seria mais fácil usar um Raspberry Pi.
JVarhol
8

Há um projeto que traz uma máquina virtual Python para microcontroladores, incluindo o Arduino Mega .

Aqui está uma citação do Ardunio Mega README , que dá uma idéia de como isso poderia ser (no entanto, eu não testei isso!):

A seguir, é apresentada uma sessão de exemplo usando ipm ::

ipm> import avr, sys
ipm> avr.ddrA(0xff)
ipm> avr.portA(0)       # Pins 22-29 all at 0 V
ipm> avr.portA(0xa5)
ipm> sys.heap()
(2622, 7424)
Matthew G.
fonte
3

Eu usei pyserial com grande sucesso no controle dos pinos no arduino. Sua estação de trabalho (laptop, etc) executa um script python que se comunica em tempo real com o arduino.

Não é o mesmo que executar o script diretamente no arduino, mas eu estava fazendo um pouco mais do que eu pensava que o arduino poderia suportar (algumas análises de música, bater em uma API REST, etc.).

aceno com a cabeça
fonte
3

Outra opção a considerar é o Arduino Yun . Além do chip AVR que a maioria dos Arduinos possui, ele também inclui um chip MIPS executando Linux. Como é linux, você pode executar facilmente o código python, e qualquer pacote python puro pode ser facilmente instalado.

No entanto, toda a interessante capacidade de entrada / saída está no chip AVR, não no chip MIPS. Projetos como Autobahn e LininoIO resolvem esse problema executando um programa especial no chip AVR que executa operações de E / S sob instruções do chip MIPS.

DaveP
fonte
0

Sabemos que esse é um problema em aberto na programação do Arduino e no mundo incorporado em geral. Existem várias soluções disponíveis no mercado, como o MicroPython, mas a maioria delas é dedicada a placas específicas e não permite manter o sistema em tempo real. Estamos trabalhando em uma solução! O VIPER é uma máquina virtual Python para Arduino DUE e todas as arquiteturas ARM de 32 bits que são executadas em cima de um sistema operacional em tempo real. Isso significa que você pode desenvolver scripts Python que podem ser executados pelo Arduino DUE, UDOO, Spark (todas as placas) e também nas novas placas do núcleo ST. Além disso, se você precisar de alto desempenho e tiver experiência em C, poderá desenvolver módulos em tempo real para VIPER que podem ser chamados e gerenciados pelos scripts Python.

Você pode ver o VIPER em ação aqui http://bit.ly/kickviper

Daniele Mazzei
fonte
Não é uma questão em aberto. python é uma linguagem de indentação horrível.
user2497
0

Você pode aprender com C (AVR) como os sensores funcionam, mas isso requer muito mais tempo. O código IDE do Arduino e o código Python para Arduino usam as funções do código C para simplificar as coisas. O Python e o Arduino IDE, se usam o Firmata, usam a comunicação serial e você pensa que codifica a si próprio.

xrhstos
fonte
-1

Sim. O Python pode ser usado para programar um Arduino, simplesmente importando pyfirmata, que pode fazer a interface do arduino com o Python.

estou com sorte
fonte
Verdade. Mas não é isso que o OP está pedindo.
Sempaiscuba
-8

Receio que o IDE do Arduino não use a linguagem C / C ++. É derivado do Processing IDE e possui uma sintaxe bastante semelhante a C / Java.

Andrzej Marczak
fonte
9
O Arduino IDE é C ++: ele realiza um pré-processamento mínimo (precede "#include <Arduino.h>" e declarações para a função que você definiu) e depois chama um compilador C ++ regular (GNU g ++).
Edgar Bonet
É o próprio IDE, e não a linguagem de programação derivada do Processing.
Peter Bloomfield
Praticamente ninguém se importa em implementar o IDE no Arduino. O objetivo é ser capaz de escrever Python, que é executado com eficiência no Arduino.
wallyk