首先, ser.readline 在返回任何内容之前查找 \r\n,因此发送单个字节将简单地进入缓冲区。
因此,您希望始终将 ser.println 用于该行的最后一部分。这在 Pi 和 Arduino 上都是一样的。
此外,在 Minicom 中,您希望在每一行之后按 Enter,以便 ser.readline() 将返回该行。
..
您不需要做任何奇怪的事情来使串行端口工作。但是,我使用实际的 USB 连接器,而不是直接连接到 TX/RX 线。事实上,我使用的电缆与您在 PC 上编程时使用的电缆相同。
我将 Rpi 用作 Arduino 程序员并处理它从模拟读数发回的结果。
从 IDE 上传到 Arduino 时需要停止读取串行的 Rpi python 程序,但这是唯一真正的考虑因素。没有两个程序可以同时抢占 USB 端口。
在 Rpi 方面,我最初使用
ls /dev/ttyUSB*
找到它正在使用的端口。我什至拔掉了电缆,然后再次执行该命令,它就消失了。插回它,它又回来了。它非常可靠(与插入 USB 存储器相反)。
在 Arduino 方面,它始终是您程序中已有的相同串行内容。
您使用 minicom 进行测试是正确的。
为了找到在 shebang 中使用的字符串,我使用了这个:
which python
所以这是我在 Rpi3 上使用的:
#!/usr/bin/python
import serial
from datetime import datetime
tab = "\t"
ser = serial.Serial("/dev/ttyUSB0",9600)
while True :
linein = ser.readline()
if len(linein)<10 : continue
print "/dev/ttyUSB0 input --> " + repr(linein)
date = str(datetime.now().date())
date = date[:10]
time = str(datetime.now().time())
time = time[:8]
outline = date + tab + time + tab + linein
if not outline.endswith("Inverter\r\n") :
f = open("htv.dat","a")
f.write(outline)
f.close()
print "htv.dat ----> " + repr(outline)
print "htv.dat ----> " + outline
else: print
为了使其可执行,我这样做:
cp ss.py ssx
chmod +x ssx
sudo cp ssx /usr/sbin
这是我在 Nano 上使用的代码:
// HTV - Humidity, Temperature, Voltage 2/4/17
//
// Voltage measurement variables for the voltage divider A2
float R1 = 1000000.0;
float R2 = 147000.0;
float constADC=4.59;
// Humidity/temp readings D2
#include <Adafruit_Sensor.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
int value=analogRead(A2);
float vout = value * (constADC/1024.0);
float vin = vout / (R2/(R1+R2));
float h = dht.readHumidity();
float t = dht.readTemperature();
float df = t*(9.0/5.0)+32;
if (isnan(h) || isnan(t)) { h=0; df=0; }
Serial.print(h);
Serial.print("\t");
Serial.print(df);
Serial.print("\t");
Serial.println(vin);
delay(60000);
}
没什么太花哨的。我只是在 Rpi 上打开一个终端窗口并输入 ssx 并开始收集。如果我必须从 IDE 将某些内容上传到 Nano,我会在上传期间使用 ^C 停止 SSX。然后我重新启动它。
打开文件进行写入然后关闭它可以防止任何数据损坏。