我正在用Raspberry pi和Arduino屏蔽它做一个测试项目(Alamode)。 我已经开始基本尝试通过pySerial链接准备好详细信息,只是为了看到我在继续下一步之前获得正确的输出,
不幸的是,它并没有像我跳过的那样顺利。
该项目为Arduino编译得很好,当看到串行监视器时,我可以看到输出正常输出,然后 - 一旦我启动pySerial脚本,我就开始丢失字符,数字和停止脚本(声称串行链接没有响应)。
串行链接完好无损,我已多次确认,串口监视器不断向我显示实时数据。
但由于某种原因,似乎python脚本不能"时间"或"同步"使用串行输出,所以它会随机剪切字母和字符。
我已经尝试过更改延迟(给它更多时间)或改变波特率并且它似乎没有帮助,我更接近于放弃和检查替代方案溶液
这是基本的Arduino代码
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold. It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value. The default for a 16mhz AVR is a value of 6. For an
// Arduino Due that runs at 84mhz a value of 30 works.
// Example to initialize DHT sensor for Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);
void setup() {
Serial.begin(115200);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" ");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" ");
}
这是PySerial的基本脚本
from time import sleep
import serial
ser = serial.Serial('/dev/ttyS0',115200)
counter=32
while True:
ser.write(str(chr(counter)))
print ser.readline(16384)
sleep(.1)
答案 0 :(得分:5)
通常我会像这样阅读串行接口
#!/usr/bin/python
# -*- coding: utf-8 -*-
import serial
import sys
import time
port = "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AE01J6GZ-if00-port0"
baudrate = 115200
if len(sys.argv) == 3:
ser = serial.Serial(sys.argv[1], sys.argv[2])
else:
print "# Please specify a port and a baudrate"
print "# using hard coded defaults " + port + " " + str(baudrate)
ser = serial.Serial(port, baudrate)
# enforce a reset before we really start
#ser.setDTR(1)
#time.sleep(0.25)
#ser.setDTR(0)
while 1:
sys.stdout.write(ser.readline())
sys.stdout.flush()
明显的区别是你在循环中使用sleep(.1)。如果Arduino发送到快速,这可能会溢出输入缓冲区。凭借我的方法,我从未遇到任何问题。
答案 1 :(得分:0)
DHT11的Arduino代码
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
void setup(){
Serial.begin(9600);
}
void loop(){
int chk = DHT.read11(DHT11_PIN);
Serial.print("Temperature = ");
Serial.println(DHT.temperature);
Serial.print("Humidity = ");
Serial.println(DHT.humidity);
delay(2000);
}
PySerial的python脚本
from time import sleep
import serial
ser = serial.Serial("/dev/ttyACM0",9600)
while True:
sleep(1)
getVal = ser.readline()
print(getVal)