下面是树莓派和Arduino串口通信的详细步骤。
准备工作
首先,需要准备以下材料和工具:
- 树莓派和Arduino Uno开发板
- USB数据线
- Arduino IDE软件
- Python编程环境
确定通信端口
将Arduino连接到树莓派,打开终端输入以下命令,查看Arduino的串口号:
ls /dev/ttyACM*
如果连了多个串口设备,可能会显示多个串口号,一般情况下Arduino的串口号是/dev/ttyACM0
,记下来备用。
编写Arduino代码
打开Arduino IDE软件,简单编写一个blink程序,用来测试在树莓派上控制LED灯的开关。将以下程序上传到板子上:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
编写Python代码
接下来,我们需要在树莓派上编写一个Python代码,通过串口与Arduino通信,并读取或控制其I/O口状态。以下示例演示了如何控制LED灯的开关:
import serial
import time
port = "/dev/ttyACM0" # 串口号
baud = 9600 # 波特率
# 打开串口
ser = serial.Serial(port, baud, timeout=1)
# 点亮LED灯
ser.write(('H'.encode()))
time.sleep(1)
# 关闭LED灯
ser.write(('L'.encode()))
ser.close()
在Python代码中,我们通过serial.Serial
函数打开串口设备端口,并设置通信波特率为9600。然后,我们可以使用ser.write()
函数向串口设备发送数据。
示例2:Arduino返回温度值
以下示例演示了树莓派通过串口向Arduino发送一个询问指令,Arduino通过温度传感器读取室内温度值,然后返回给树莓派。
在Arduino端的代码如下:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temp;
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
Serial.println(temp);
delay(1000);
}
在此示例中,我们需要使用DS18B20数字温度传感器,通过OneWire库和DallasTemperature库来读取温度值,并将其通过串口返回。注意需要在Arduino IDE中安装这两个库。
Python代码如下:
import serial
import time
port = "/dev/ttyACM0" # 串口号
baud = 9600 # 波特率
ser = serial.Serial(port, baud, timeout=1)
while True:
# 向Arduino发送询问指令
ser.write(('T'.encode()))
# 从串口中读取返回值
r = ser.readline().decode().strip()
if r:
print("温度为:" + r)
time.sleep(1)
ser.close()
在Python代码中,我们通过循环向Arduino发送询问指令,然后从串口中读取返回值。最后将其解码为字符串并打印输出。该程序将不断显示当前室内温度值,直到被手动中断。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:树莓派(python)与arduino串口通信的详细步骤 - Python技术站