有没有办法将Python代码“编译”成Arduino(Uno)?

时间:2011-11-13 21:33:34

标签: python arduino pyserial

我有一个带有Arduino Uno的机器人类型项目,总而言之,我正在尝试一些AI算法。但是,我需要实现一些使用NumPy / SciPy非常简单的高级矩阵算法,但它们在C或C ++中是一个彻头彻尾的噩梦。即使有图书馆,这也很荒谬。

我有什么办法可以用Python做这个项目吗?我想我听到了Mega具有此功能的一些内容,但是我有一个Uno,并且在此时替换它不是一个选项(这会使项目恢复很多。)另外,我听到了一些关于使用Python通过USB与Arduino进行通信,但是在运行时我无法使用USB线。我需要能够上传程序并完成它。

那里有没有选择,或者我刚刚走到了死胡同?

4 个答案:

答案 0 :(得分:21)

有一篇关于今年使用Python和机器人技术的讨论PyConAU由Graeme Cross博士称为Ah! I see you have the machine that goes 'BING'!

他建议在微控制器板上使用Python的唯一选择是PyMite,我认为Python-On-A-Chip的名称也是pyMCU

它被移植到一系列电路板上 - 特别是他提到了Arduino Mega,你说它不是你的选择,但它可能在其他Arduino电路板上得到支持。

但是,因为它是一个“不包含电池”的Python版本,所以你很可能会遇到一个真正的问题,让numpy / scipy等启动并运行。

正如其他海报所暗示的那样,在C中实施可能是最不具有抵抗力的道路。

再次

更新:,不是专门针对Arduino,但是{{3}}看起来在芯片上提供python。作者表示,如果有足够的兴趣,他可能会考虑开发一个Arduino版本的pyMCU。

答案 1 :(得分:5)

我已经开始研究" Little Python" to C ++(称为Pyxie - Py CC-Pyc-C上的一个编译器)编译器,其特定目的是将一个合理的python子集编译为C ++,以便它可以在arduino上运行。

这在撰写本文时尚未完成(0.0.16),但它目前可以编译一小部分python - 足以满足arduino" blink"要运行的示例。为了支持这一点,它有一个编译配置文件 - 这实际上意味着"使用arduino工具链进行编译。"

它可以编译的程序如下所示:

led = 13

pinMode(led, OUTPUT)

while True:
  digitalWrite(led, HIGH)
  delay(1000)
  digitalWrite(led, LOW)
  delay(1000)

解析,执行分析(如类型推断等),编译成C ++,然后将其编译为hex文件,您可以将其加载到设备上。

有用之前还有很长的路要走,但它正在取得进展,并且确实有路线图等。

特别是与Micropython(和PyMite)的一个主要区别在于,它设计用于编译为太小而无法运行任何实现的设备。 (这也意味着它与ShedSkin之类的东西截然不同,而Python到C ++编译器的目标是更大的执行环境)

答案 2 :(得分:1)

要在Arduino uno上直接运行任何类型的Python脚本将非常困难,原因是它是一种解释语言,因此除了纯文本脚本之外,您还需要板载解释器。在arduino uno中可能没有足够的内存来存储所有这些内容。

您最能做的是找到一种将Python脚本编译为本地机器代码的方法(这是C / C ++的工作方式)。我见过周围的项目正在为其他平台做类似的事情,但据我所知,没有一个项目能成功地为Arduino做到这一点。

您可以访问http://www.toptechboy.com/using-python-with-arduino-lessons/了解更多信息。

希望这对您有帮助。 谢谢!

答案 3 :(得分:0)

这不是一个直接的解决方案,但在你的情况下,如果我是你,我会在我的电脑上编写 AI 程序,其余的在 Arduino 中编写。之后我会用我的人工智能程序编写一个烧瓶服务器。然后,端口从我的路由器转发到本地机器。最后,从 Arduino 向服务器发出请求。