Python 连载,貌似没看。 Raspberry Pi 0 到 Arduino
Python Serial Writing but seemingly not reading. Raspberry Pi 0 to Arduino
我在使用 RPI0 上的 python 脚本 运行 从 Arduino 读取串行输入时遇到问题。我知道 Arduino 的代码是正确的,因为一切都按预期工作,通过 Arduino 软件中的内置串行监视器与 Arduino 交互(发送代码 a10(代码驱动继电器高电平),Arduino 发回 11(基本上询问多长时间) ,发送代码 b5,Arduino 将引脚保持高电平 5 秒(b5))。
然而,当我尝试使用 pyserial 模块读取 python 中的任何串行输入时,没有任何反应。我知道它确实成功地将代码发送到 arduino,因为当我用 ser.write("a10b5").
重写 python 脚本时,它会在指定的秒内保持引脚高电平
串行连接不是 USB。我正在使用跨接线,在它们之间使用电压转换器,使用 Arduino 和 Pi 的 GPIO TX 和 RX 引脚。
- 在终端中使用 python -V 它告诉我我是 运行 版本 3.8
- 我尝试了多种波特率(300、1200、9600、57600),但行为没有变化
- 我也试过将 if x == 11: 更改为 if x == "11": 以防万一它接收的是字符串而不是整数,同样无济于事。
代码如下:
import time
import serial
ser = serial.Serial(
port='/dev/ttyAMA0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=None
)
print("sending data over serial now")
ser.write("a10") #a10 is relay HIGH code
while True:
x = ser.read()
if x == 11: ##arduino code 11(asking for how long)
print("recieved code 11")
print("arduino recieved relay HIGH code and is waiting for time to hold relay for")
print("sending time now")
ser.write('a5') # 5 seconds
time.sleep(1)
if x == 13: #arduino code 13(water success)
print("recieved code 13")
print("arduino reports watering complete")
x = 0 ##this is to clear the variable every loop. Not sure if it's needed
这是一个简单的连续剧 reader 我从网上下载的。在第二个终端中打开它并 运行 同时使用我自己的脚本它实际上会像往常一样从 arduino 业务中读取代码。
#!/usr/bin/env python
import time
import serial
ser = serial.Serial(
port='/dev/ttyAMA0',
baudrate = 57600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while True:
x=ser.readline()
print x
什么给了?
回答我自己的问题。在我使用的arduino代码中
Serial.println(whatevergoeshere)
而不是
Serial.print(whatevergoeshere)
所以 arduino 在 arduino 串行控制台和 python 脚本未打印的每个串行行的末尾发送'\n'。将 python 中的 IF 语句更新为
if x == "11\n":
问题已解决,一切正常。
我在使用 RPI0 上的 python 脚本 运行 从 Arduino 读取串行输入时遇到问题。我知道 Arduino 的代码是正确的,因为一切都按预期工作,通过 Arduino 软件中的内置串行监视器与 Arduino 交互(发送代码 a10(代码驱动继电器高电平),Arduino 发回 11(基本上询问多长时间) ,发送代码 b5,Arduino 将引脚保持高电平 5 秒(b5))。
然而,当我尝试使用 pyserial 模块读取 python 中的任何串行输入时,没有任何反应。我知道它确实成功地将代码发送到 arduino,因为当我用 ser.write("a10b5").
重写 python 脚本时,它会在指定的秒内保持引脚高电平串行连接不是 USB。我正在使用跨接线,在它们之间使用电压转换器,使用 Arduino 和 Pi 的 GPIO TX 和 RX 引脚。
- 在终端中使用 python -V 它告诉我我是 运行 版本 3.8
- 我尝试了多种波特率(300、1200、9600、57600),但行为没有变化
- 我也试过将 if x == 11: 更改为 if x == "11": 以防万一它接收的是字符串而不是整数,同样无济于事。
代码如下:
import time
import serial
ser = serial.Serial(
port='/dev/ttyAMA0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=None
)
print("sending data over serial now")
ser.write("a10") #a10 is relay HIGH code
while True:
x = ser.read()
if x == 11: ##arduino code 11(asking for how long)
print("recieved code 11")
print("arduino recieved relay HIGH code and is waiting for time to hold relay for")
print("sending time now")
ser.write('a5') # 5 seconds
time.sleep(1)
if x == 13: #arduino code 13(water success)
print("recieved code 13")
print("arduino reports watering complete")
x = 0 ##this is to clear the variable every loop. Not sure if it's needed
这是一个简单的连续剧 reader 我从网上下载的。在第二个终端中打开它并 运行 同时使用我自己的脚本它实际上会像往常一样从 arduino 业务中读取代码。
#!/usr/bin/env python
import time
import serial
ser = serial.Serial(
port='/dev/ttyAMA0',
baudrate = 57600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while True:
x=ser.readline()
print x
什么给了?
回答我自己的问题。在我使用的arduino代码中
Serial.println(whatevergoeshere)
而不是
Serial.print(whatevergoeshere)
所以 arduino 在 arduino 串行控制台和 python 脚本未打印的每个串行行的末尾发送'\n'。将 python 中的 IF 语句更新为
if x == "11\n":
问题已解决,一切正常。