我正在尝试使用 Python3 脚本来控制 Arduino Mega。这是一个简单的脚本,用于从键盘获取一行并通过 Arduino 回显它。我从一个可用的 Python 2 脚本开始http://petrimaki.wordpress.com/2013/04/28/reading-arduino-serial-ports-in-windows-7/ http://petrimaki.wordpress.com/2013/04/28/reading-arduino-serial-ports-in-windows-7/。我似乎无法获取发回的字符,这可能是格式问题。
这是格式问题吗? unicode 转 ASCII 问题?
如何使用 Python 3 和 pySerial 读取/写入二进制/十六进制数据和 ASCII 文本?
欢迎对 Python 新手提出任何建议。
Python 3 脚本:
import serial
import time
ser = serial.Serial('COM8', 9600, timeout=0)
var = input("Enter something: ")
print(var)
ser.write(bytes(var.encode('ascii')))
while 1:
try:
print(ser.readline())
time.sleep(1)
except ser.SerialTimeoutException:
print(('Data could not be read'))
Arduino代码:
int incomingByte=0;
void setup() {
// Open serial connection.
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// Read the incoming byte.
incomingByte = Serial.read();
// Echo what you got.
Serial.print("I got: ");
Serial.println(incomingByte);
}
}
输入:
敏捷的红狐
Output:
b''
b'I got: 84\r\n'
b'I got: 104\r\n'
b'I got: 101\r\n'
等等。
bytes(var.encode('ascii'))
似乎没有必要,只需使用.encode()
方法或bytes()
功能,两者都不需要。您还可以使用.decode()
关于您收到的数据。
例外情况serial.SerialTimeoutException
is 写入超时时引发 http://pyserial.sourceforge.net/pyserial_api.html#serial.SerialTimeoutException,与读书无关。
在 Arduino 代码中,尝试使用串行.write() http://www.arduino.cc/en/Serial/Write将数据发送回来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)