有没有办法将Python代码“编译”到Arduino(Uno)上?
我有一个机器人项目,使用的是Arduino Uno,简单来说,我在尝试一些人工智能算法。不过,我需要实现一些高级的矩阵算法,如果用NumPy或SciPy来做,这些算法会简单很多,但用C或C++来实现就非常麻烦。即使有一些库可用,情况还是让人觉得很无奈。
我能不能用Python来做这个项目?我好像听说过Mega板子有这个能力,但我现在用的是Uno,换板子不太现实(那样会让项目进度大大延误)。另外,我听说过用Python通过USB与Arduino通信,但我不能在设备运行时插着USB线。我需要能够上传程序后就完成。
有没有什么解决方案,还是我已经走到了死胡同?
4 个回答
在Arduino Uno上直接运行Python脚本会比较困难。原因是Python是一种解释型语言,这意味着你需要一个解释器来运行它,而这个解释器需要占用额外的内存。不过,Arduino Uno的内存可能不够用来放这些东西。
最好的办法是找到一种方法,把Python脚本编译成机器代码(这就像C/C++语言的工作方式)。我见过一些项目尝试在其他平台上做到这一点,但(据我所知)还没有成功在Arduino Uno上实现。
你可以访问http://www.toptechboy.com/using-python-with-arduino-lessons/了解更多信息。
希望这些信息对你有帮助。谢谢!
我开始着手开发一个叫做 Pyxie 的工具,它是一个将“小型Python”转换成C++的编译器。这个项目的目标是把一部分简单的Python代码编译成C++,这样就能在Arduino上运行。
目前这个项目还没有完成(版本是0.0.16),但它已经能够编译一小部分Python代码,足够让Arduino上的“闪烁”示例运行。为了支持这个功能,它有一个编译配置文件,简单来说就是“使用Arduino的工具链进行编译”。
可以编译的程序大概是这样的:
led = 13
pinMode(led, OUTPUT)
while True:
digitalWrite(led, HIGH)
delay(1000)
digitalWrite(led, LOW)
delay(1000)
这个过程会解析代码,进行分析(比如推断数据类型等),然后编译成C++,接着再生成一个十六进制文件,这个文件可以加载到你的设备上。
虽然距离真正有用还有很长的路要走,但它正在不断进展,并且有一个发展路线图等。
特别要提的是,与Micropython(和PyMite)最大的不同在于,它是为了编译到那些太小而无法运行这两种实现的设备上而设计的。(这也意味着它和像ShedSkin这样的工具很不一样,后者虽然是Python到C++的编译器,但目标是更大的执行环境)
今年的PyConAU上,有一个关于用Python做机器人技术的演讲,演讲者是Graeme Cross博士,演讲的名字叫做啊!我看到你有那个会“叮”的机器!
他推荐的唯一可以在微控制器板上使用Python的选项是PyMite,我觉得它也被称为Python-On-A-Chip。
这个工具已经被移植到多种开发板上,特别是他提到的Arduino Mega,虽然你说这个对你来说不合适,但可能其他Arduino板也支持。
不过,由于这是一个“没有附带电池”的Python版本,你可能会遇到很大的困难,无法顺利运行像numpy、scipy这样的库。
正如其他人所建议的,使用C语言来实现可能是最简单的选择。
更新:虽然这不是专门为Arduino设计的,但pyMCU看起来可以在芯片上运行Python。作者表示,如果有足够的兴趣,他可能会考虑开发一个Arduino版本的pyMCU。