在开源硬件开发方面,Arduino一直是一个功能强大且易于使用的学习/开发平台。在当今的现代世界中,每种硬件都由高级通用编程语言提供支持,以使其更加有效和用户友好。一种这样的语言是Python。Python是一种解释型,面向对象的高级编程语言,具有动态语义和高级内置数据结构,结合了动态类型和动态绑定,使其对于快速应用程序开发非常有吸引力。
结合Arduino和Python的强大功能将打开许多可能性之门,因为python具有与openCV,Matlab等其他平台进行交互的能力,从而提高了生产率,因此在本教程中,我们将学习如何在计算机上安装python。以及如何与Arduino一起使用它来切换Arduino的板上LED。
所以,让我们开始吧…。
所需材料:
- Arduino Uno(或任何Arduino开发板)
- 可以上网的电脑
在计算机上安装Python:
显然,本教程的第一步是在我们的计算机上安装Python。以下提到的步骤仅适用于运行32位或64位OS的Windows用户。MAC和Linux的安装过程不同。
- 单击32位Python-2.7.9,这将在您的计算机上安装32位Python IDLE。不要下载64位版本或更新版本,因为它们不支持我们的Arduino库。即使您的计算机在64位上运行,您也可以使用32位Python本身。
- 打开下载的exe文件,然后按照说明进行操作。不要更改安装python的目录。默认情况下它将是C:\ Python27并保持原样。
- 在安装过程中,在这种情况下,您可能会收到防病毒软件(如果有)的警告,请单击“允许”。
就是这样!,python已成功安装在我们的计算机上。您可以通过在Windows搜索框中搜索“ Python IDLE”并将其打开来进行验证。
打开后,您将获得以下屏幕。此窗口称为Python Shell,从现在开始我们将其称为“ Python shell ”。
此屏幕称为Python Shell。您可以直接在此处进行编码,并在同一屏幕上获得输出,也可以在此处创建新文件并编写程序并在此处验证程序。稍后我们将详细介绍创建python程序的细节,现在让我们检查python是否正常工作。
为此,只需键入“ print(1 + 1) ”,然后按Enter。您应该看到结果被打印出来,如下所示。
在Python中获取PySerial:
下一步是安装pyserial。PySerial是一个Python API模块,用于读取和写入Arduino或任何其他微控制器的串行数据。
单击Pyserial Windows下载PySerial。最终的下载将是一个可以直接安装的exe文件。安装时请勿更改任何设置。将其保留到默认目录和默认设置。
现在,让我们检查PySerial是否已正确安装。为此,请再次打开Python Shell并输入
导入序列号 。如果该库已成功安装,则不会出现任何错误消息,如下图所示。如果您发现任何错误,请将其张贴在评论部分,我们将尝试解决它。
本教程假定您熟悉Arduino,并且具有将项目上传到Arduino的经验。因此,让我们直接跳入我们的Python程序。如果您是Arduino的初学者,请查看我们的Arduino项目,然后从Arduino的LED闪烁开始。
我们的第一个Arduino Python程序:
如前所述,我们将使用Python脚本控制内置的Arduino板LED。让我们从Arduino代码开始。
Arduino程式:
Arduino python教程的完整程序在本页面的结尾给出。进一步阅读以了解其工作原理。
在 设置 功能中,我们以9600的波特率初始化串行通信,并声明将使用内置的led作为输出,并在程序启动期间将其调低。我们还通过串行打印向python发送了一条欢迎消息,如下所示:
void setup(){Serial.begin(9600); //以9600波特率pinMode(LED_BUILTIN,OUTPUT)初始化串行COM; //将LED引脚(13)设为输出digitalWrite(LED_BUILTIN,LOW); Serial.println(“嗨!我是Arduino”); }
在 循环 函数内部,我们读取串行输入的所有数据,并将值分配给变量 “ data”。 现在,基于此变量的值(“数据”),如下图所示切换内置的led。
void loop(){while(Serial.available()){data = Serial.read(); } if(data =='1')digitalWrite(LED_BUILTIN,HIGH); 否则,如果(data =='0')digitalWrite(LED_BUILTIN,LOW); }
Python程式:
本教程的完整python程序在此页的末尾给出。进一步阅读以了解如何编写和使用它们。
- 打开您的Python Shell(Python IDLE),然后单击File-> New
- 这将打开一个新的文本文件,您可以在其中键入程序。
- 在键入任何内容之前,请先按Ctrl + S保存文件。输入任何名称,然后单击保存。这将自动将您的文件保存为“.py”扩展名。
- 现在,输入程序或粘贴此页面末尾给出的python代码。相同的解释在下面给出,最后运行程序。
在我们的程序中,第一步将是导入序列和时间库。如前所述,串行库将用于读取和写入串行数据,时间库将用于在程序中创建延迟。可以使用以下两行将这两个库导入我们的程序中:
导入串行#为串行通信导入时间导入的串行#需要使用延迟功能
下一步是使用我们的序列库初始化一个序列对象。在此程序中,我们将串行对象命名为 “ ArduinoSerial” 。在这一行中,我们必须提及Arduino连接到的COM端口的名称以及它以什么波特率运行,如下所示。
ArduinoSerial = serial.Serial('com18',9600)
注意:提及正确的COM端口名称非常重要。可以通过使用计算机上的设备管理器找到它。
一旦串行对象被初始化,我们应该将程序保持两秒钟以建立串行通信。这可以通过使用以下行来完成:
time.sleep(2)
现在我们可以从Arduino开发板读取或写入任何内容。
下一行将读取来自Arduino的所有内容并将其打印在shell窗口中
打印ArduinoSerial.readline()
您还可以将值分配给变量,并将其用于计算。
下一行将参数值写入Arduino板。
ArduinoSerial.write('1')
该行将向Arduino写'1'。您可以使用同一行从十进制数到字符串发送任何内容。
现在,回到我们的程序,在无限while循环内,我们有以下几行
var = raw_input()#从用户打印“您输入的内容”中获取输入,var#打印输入以进行确认,如果(var =='1'):#如果值是1 ArduinoSerial.write('1')#发送1打印(“ LED开启”时间)。sleep(1)if(var =='0'):#如果值是0 ArduinoSerial.write('0')#发送0打印(“ LED熄灭”)时间.sleep(1)
该生产线 VAR的raw_input = 将得到在shell脚本输入的任何值,并将该值赋给变量 VAR 。
以后,如果值为1,它将向Arduino串行打印'1',如果值为0,将向Arduino串行打印'0'。Arduino程序中的代码(如上所述),我们将根据接收到的值切换LED。
完整的程序完成后,您的脚本应如下所示
现在单击运行->运行模块或按F5,这可能会要求您保存程序,然后将其启动。
用Python和Arduino控制LED:
这个项目的工作非常简单。将程序上载到Arduino,并确认它已连接到python程序中提到的同一COM端口。然后如上所述启动Python程序。
这将启动一个python shell脚本,如下所示。左边的窗口是显示输出的Shell窗口,右边的窗口是显示程序的脚本。
如您所见,Python收到了在Arduino程序中输入的字符串 “ Hi !,我是Arduino” ,并显示在其Shell窗口中。
当shell窗口要求输入值时,我们可以输入0或1。如果我们发送1,则Arduino板上的LED将会亮起;如果我们发送0,则Arduino板上的LED将熄灭。显示我们的Arduino程序和Python之间的成功连接。
下面提供了两个程序,一个程序要从Arduino上传并运行,第二个程序要从Windows中的Python Shell运行。
希望您理解该项目并能够使其正常运行。如果没有,请在下面的评论中发布您的问题,我们很乐意为您提供帮助。在我们的下一个项目中,我们将通过深入研究其他python模块(例如Vpython,gamepython等),学习使用Python和Arduino可以完成的其他事情。在此之前,请继续关注…。