通过usb的Raspberry pi和arduino串行连接显示USB信息

时间:2017-03-19 13:14:49

标签: python arduino

我试图使用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]

1 个答案:

答案 0 :(得分:1)

你是对的,你需要Python的split()方法。您可以按如下方式使用它:

Arduino代码:

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);
  }

}

Python方面:

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()从字符串创建列表,列表的元素是两对:之间或开始/结束与另一对:之间的字符串部分。