通过python在Arduino开发板上实现blink---Arduino学习笔记1

首先感谢我的朋友----黄昊文先生.黄先生给我提供了一块Arduino开发板,以及很多传感器帮助我学习,没有他,就没有今天的这篇博客.

使用Arduino一般都是用它自带的开发环境IDE,好处当然是方便快捷,但是,但我在使用传感器时,如果我需要接收传感器的数据,就不那么容易了,打开串口监视器:
在这里插入图片描述
可以通过串口监视器查看传回的数据,但无法便捷地把数据收集起来,因此,我在想:能否用一个工具,既能调用arduino,又能收集数据呢?

于是我想到了python,我们先来看一下python调用Arduino的可行性分析:

我们进入设备管理器,可以看到,成功连接Arduino后,会出现一个名为COM3的端口
在这里插入图片描述
进入属性查看详细信息:
在这里插入图片描述
返回真值,说明可用.

https://www.arduino.cc/里,对串口有介绍:

Serial is used for communication between the Arduino board and a
computer or other devices. All Arduino boards have at least one serial
port (also known as a UART or USART): Serial. It communicates on
digital pins 0 (RX) and 1 (TX) as well as with the computer via USB.
Thus, if you use these functions, you cannot also use pins 0 and 1 for
digital input or output.

大概意思就是:

Serial用于Arduino板与计算机或其他设备之间的通信。所有Arduino开发板都有至少一个串行端口(也称为UART或USART):Serial。它通过数字引脚0(RX)和1(TX)以及通过USB与计算机通信。因此,如果使用这些功能,则不能同时将针脚0和1用于数字输入或输出。

在这里插入图片描述
除此之外,我们也可以直接对arduino进行通信:

  • Arduino作为一款便捷灵活、方便上手的开源电子原型平台,具有很好的兼容性.
  • Firmata是用于从主机计算机上的软件与微控制器通信的通用协议。
    Firmata旨在与任何主机计算机软件包一起使用。现在,存在多种语言的匹配对象。为其他软件添加对象以使用此协议很容易。基本上,此固件建立用于从主机软件与Arduino通讯的协议。目的是允许人们从主机上的软件完全控制Arduino。
  • pyFirmata是用于Firmata协议的Python接口,通过这一接口,我们可以实现python与arduino之间的通信.

在这里插入图片描述
在这里插入图片描述
需要注意的是,同一串口只能使用一种通信方式,否则会出现如下报错:

serial.serialutil.SerialException: could not open port ‘COM3’:
PermissionError(13, ‘拒绝访问。’, None, 5)

好了,分析完毕,开始上代码:

from pyfirmata import Arduino
import serial
import time

这三个模块都是需要安装的,可以通过pip进行安装:

pip install pyfirmata
pip install serial
pip install time

serialPort = "COM3"

设置要连接的串口,我这里的串口名称是COM3

baudRate = 9600

设置波特率,一般为9600

ser = serial.Serial(serialPort, baudRate, timeout=0.5)

开始尝试连接,设置0.5秒的延迟时间.

print("串口=%s ,波特率=%d" % (serialPort, baudRate))

输出结果
在这里插入图片描述
下一步,用pyfirmata实现blink:

ser.close()

在使用pyfirmata前,我们先把serial关闭

board = Arduino('COM3')

连接名为COM3的串口

try:
    while True:
        board.digital[13].write(0) #向端口13写入0   0代表灭灯
        time.sleep(1)
        board.digital[13].write(1) #向端口13写入1   1代表亮灯
        time.sleep(2)
except Exception as e:
            print(e)

我加入了try语句,防止在断开连接的时候出现报错的情况
在这里插入图片描述
今天的内容就到这里,如有和我一样在研究使用python调用Arduino的朋友,欢迎各位一起学习交流:
在这里插入图片描述

发布了32 篇原创文章 · 获赞 63 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/102764778