一、安装相应的python包
1.windows下:
pip install pyserial
2.linux下:
sudo apt-get install python-serial
二、将arduino接入PC,查看端口
1.使用arduino IDE的条件下:
在Arduino IDE->工具->端口中查看自己的端口
比如:windows下我的arduino端口为 'COM3'
2.linux下且不使用arduino IDE:
a.首先在接入之前
在linux终端输入 ls /dev/tty*
b.在接入以后再次:
在linux终端输入 ls /dev/tty*
查看端口信息,若有多出来一个,就是arduino的端口
例如:linux下我的arduino端口为'/dev/ttyUSB0'
三、实现python与arduino通讯
1.python向arduino发送消息:
a.python的代码:
import serial
import time
ser = serial.Serial('COM3',9600,timeout=1)
while 1:
val = ser.write('1'.encode('utf-8'))
#ser.write(发送的数据需要进行编码.encode('utf-8'))
time.sleep(0.5)
val2 = ser.readline().decode('utf-8')
print(val2)
若是linux且不使用arduino IDE条件下则需要修改端口,比如:
ser = serial.Serial('/dev/ttyUSB0', 9600,timeout=1);
b.arduino的代码:
int a=0;
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()){
a = Serial.parseInt();
if(a == 1){
Serial.println("收到来自python的信号");
}
}
}
2.arduino向python发送消息:
a.python的代码:
import serial # 导入模块
ser = serial.Serial('COM3',9600,timeout=1)
# serial.Serial 的三个形参 分别对应 Arduino的串口 波特率 连接超时时间
print(ser)
while 1:
val = ser.readline().decode('utf-8')
# ser.readline() 读取窗串口中的数据以二进制的形式展示需要使用.decode('utf-8')进行解码
if val == 1:
print("收到来自arduino的信号")
b.arduino的代码:
int a = 1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
Serial.print(a);
delay(1000);
}
四、python使用pyfirmate包控制arduino实现Blink
环境配置:
pip install pyFirmata
1.arduino代码:
打开arduino IDE的 文件->示例->Firmate->StandardFirmate
编译成功后上传,报错的大概率是arduino的型号没对上,端口搞错了,建议再次到arduino IDE的工具那一栏进行确认。
2.python代码:
from pyfirmata import Arduino, util
import time
# Arduino所在串口是COM3,这是windows下的表示
def test1():
board = Arduino('COM3')
while 1:
board.digital[13].write(0) # 向端口13写入0 0代表灭灯
time.sleep(1)
board.digital[13].write(1) # 向端口13写入1 1代表亮灯
time.sleep(1)
test1()
运行python文件后,arduino自带的LED灯会闪烁。