我正在制作一个项目,其中我连接了Arduino Uno和Rasberry pi以及用于连接Arduino和pc的简单usb . 我正在尝试只在我需要使用此代码时才能读取传感器: -

pi@raspberrypi:~/project $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial('/dev/ttyACM0', 9600)
>>> ser.write(b'sensors')
7
>>> input = ser.readline()
>>> print(input)
b'37.20 32.50 0 995\r\n'
>>>

但是当我在python文件中放入相同的代码并尝试运行它时,它只会卡在ser.readline()上 . 在添加超时时,它只返回一个空字符串 . python文件代码是: -

import serial

ser = serial.Serial("/dev/ttyACM0", 9600)

ser.write(b'sensors')
input = ser.readline()
print(input)

谁能帮我吗?我知道写消息正在到达Arduino,因为我能够轻松地启动led和其他组件 . Raspberry pi只是没有阅读Arduino的消息 .

我的Arduino代码是: -

#include <DHT.h>;
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);

int rain_sensor_pin = 4;
int led_pin = 13;
int ldr_pin = A0;
float hum, temp;
int rain, ldr;
String message;

void setup() {
  Serial.begin(9600);
  pinMode(rain_sensor_pin, INPUT);
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, LOW);
  dht.begin(); 
}

void loop() {
  if(Serial.available()){
    message = Serial.readString();
    message_action();
  }
}

void message_action(){
  if(message == "sensors"){
    sensors();
  }else {
    action();
  }
}

void sensors(){
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  rain = digitalRead(rain_sensor_pin);
  ldr = analogRead(ldr_pin);
  Serial.println(String(hum) + " " + String(temp) + " " + String(rain) + " " + String(ldr));
}

void action(){
  if (message == "light_on"){
    digitalWrite(led_pin, HIGH);
  }else if (message == "light_off"){
    digitalWrite(led_pin, LOW);
  }
}