我试图使用USB和使用pySerial库在Arduino和raspberry pi之间进行交谈。我想让多个传感器发送数据并从pi端发送一些命令。我已经尝试过数组来发送数据并在python(接收)端使用索引来访问各个数据通道,还有另外一种方法来完成这个任务,我试过学习“data.split(':')”,我似乎不明白它是如何工作的。有人可以告诉我一个法律方法来传递数据吗?
Arduino代码:
int data[100];
int val2 = A0;
int val1 = A1;
void setup(){
pinMode(val1, INPUT);
pinMode(val2, INPUT);
Serial.begin(9600);
}
void loop(){
// individual channels of data transmitted, delya = 60 for 6 channels, f = 1/50
while(1){
data[0] = analogRead(val2);
data[1] = analogRead(val1);
data[2] = analogRead(A2);
data[4] = analogRead(A3);
data[5] = analogRead(A4);
Serial.print(data[0]);
Serial.print(":");
Serial.print(data[1]);
Serial.print(":");
Serial.print(data[2]);
Serial.print(":");
Serial.print(data[3]);
Serial.print(":");
Serial.print(data[4]);
Serial.print(":");
Serial.print(data[5]);
Serial.println();
delay(60);
}
}
Python方面:
import serial
from Tkinter import *
import time
data = []
newData = []
next = []
root = Tk()
while True:
ardu = serial.Serial('/dev/ttyACM0', 9600, timeout = 0.1)
data =ardu.readline()
print data[0:25]
答案 0 :(得分:1)
你是对的,你需要Python的split()
方法。您可以按如下方式使用它:
int data[6];
int val2 = A0;
int val1 = A1;
void setup(){
pinMode(val1, INPUT);
pinMode(val2, INPUT);
Serial.begin(9600);
}
void loop(){
// individual channels of data transmitted, delay = 60 for 6 channels, f = 1/50
while(1){
data[0] = analogRead(val2);
data[1] = analogRead(val1);
data[2] = analogRead(A2);
data[3] = analogRead(A3);
data[4] = analogRead(A4);
data[5] = analogRead(A5);
Serial.print(data[0]);
Serial.print(":");
Serial.print(data[1]);
Serial.print(":");
Serial.print(data[2]);
Serial.print(":");
Serial.print(data[3]);
Serial.print(":");
Serial.print(data[4]);
Serial.print(":");
Serial.print(data[5]);
Serial.println();
delay(60);
}
}
import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
line = ser.readline().decode("utf-8").strip('\n').strip('\r') # remove newline and carriage return characters
print "Received: '{}'".format(line)
data = line.split(':')
for i in range(len(data)):
print "data[{}]".format(i), data[i]
Received: '495:916:837:37:120'
data[0] 495
data[1] 916
data[2] 837
data[3] 37
data[4] 120
split()
从字符串创建列表,列表的元素是两对:
之间或开始/结束与另一对:
之间的字符串部分。