我试图通过串口在python和arduino之间发送消息。我使用以下代码成功进入Arduino-> python方向:
蟒蛇:
import termios, fcntl, sys, os, serial, time, smtplib
ser = serial.Serial('/dev/tty.usbserial-AD02AY8A', 9600, writeTimeout = 0)
while 1:
message = ser.readline()
print(message)
Arduino:
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial.write('1');
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
Serial.println("BOBBY");
delay(1); // delay in between reads for stability
}
在这种情况下,我可以查看arduino的串口和终端上的“screen命令”,以及通过python重印“BOBBY”。
当我尝试从python发送消息时,它永远不会出现在终端屏幕或Arduino串口中。
这是不起作用的python代码。 arduino代码对于这个代码无关紧要,因为我只是监控串口。
import termios, fcntl, sys, os, serial, time, smtplib
ser = serial.Serial('/dev/tty.usbserial-AD02AY8A', 9600, writeTimeout = 0)
time.sleep(2)
while 1:
try:
ser.write('1')
except: # catch *all* exceptions
print(e)
答案 0 :(得分:2)
从您的代码中我认为可以安全地假设您正在使用Arduino上的USB串行接口。如果是这种情况,Arduino可以在每次通过USB接口进行串行连接时进行重置。
这将使其不接收传输。您可以通过尝试使用python命令行而不是文件发送串行来测试这一点。
如果可行,您有两个选择,
1)在打开端口后写入time.sleep(2)行,以便重新启动Arduino时间。 -OR -
2)在接地引脚和Arduino板上的复位之间安装一个10微法拉电容。
这将防止它在串行端口连接时进入复位状态,并且可以在以后将电路板用于其他项目时轻松删除。
答案 1 :(得分:1)
我尝试使用带有LED的Arduino代码来查看是否有任何内容被写入端口。 当然,这是写这一整个时间。但是在Arduino中使用串行监视器并没有显示内容。
这是Arduino代码:
int ledPin = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
if (Serial.available()>0){
Serial.read();
for (int i = 0; i < 5; i++){
// read the input on analog pin 0:
digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(50); // wait for a second
digitalWrite(ledPin, LOW); // turn the LED on (HIGH is the voltage level)
delay(50);
}
}
}
答案 2 :(得分:0)
请尝试这样添加print(ser.write('1'))
。
while 1:
try:
ser.write('1')
print(ser.write('1'))
except: # catch *all* exceptions
print(e)
答案 3 :(得分:-1)
在黑暗中拍摄,但看着你的打印声明,这是python 3。
您需要将所有传输编码为字节字符串,如下所示:
ser.write('1'.encode())