我正在使用OrangePI板来记录arduino中的数据,这个数据每隔10秒就会通过串行输出产生一行。
20.0 / 12.0 V
这是通过连接到arduino的温度传感器测量的温度和用于节省电池的电压。
我已经设法从网页上收集的片段和建议构建了一个脚本,这正是我所需要的。
#!/bin/bash
# Script will run at reboot.
echo "Beginning Temperature Log!"
NOW=$(date +"%Y-%m-%d")
LOGFILE="log-$NOW"
name=$LOGFILE
if [[ -e $name ]] ; then
i=2
while [[ -e $name-$i ]] ; do
let i++
done
name=$name-$i
fi
ts </dev/ttyUSB0>$name
每次启动机器时脚本都会运行,方法是设置一个cron @reboot,效果非常好。
现在我计划用“电池保护”扩展arduino代码,当电压低于一定水平时,它会向串行输出发出警告
20.0 / 9.0 V / BAT!
此时,OrangePI应暂停/关闭,并在“安全关闭”时向arduino发送一个特定字母,以便arduino可以停用继电器并关闭整个系统。 (和它自己)
所以我假设OrangePI应该始终在字符串“BAT!”的arduino输出中观察最后一行。然后触发关机。
我有一个关于这个项目的harware部分的概念 也是arduino代码的概念
但不知道如何在Linux上编写代码。也许这种方法是错误的,因为它现在是整个事情应该用python或其他东西编码?
感谢您的任何建议。
答案 0 :(得分:1)
Python将是一个非常简单而又简洁的方法。使用pyserial,你可以让它读取你通过串行连接发送的字符串,并扫描单词BAT,或者你想要的任何东西。所以,在我的头顶,你可以做类似的事情:
import serial
from sys import argv
port = argv[1] # just to assign port and baud from command line
baud = argv[2]
COM = serial.Serial(port, baud) # create serial instance
data_in = COM.readline().strip("\r\n") # strip ending
### then some manipulation of data_in ### for example:
if(something you want is in the transmission string):
# do something
else:
float_list = [float(x) for x in data_in]
# convert all the vals to a floats for logging etc.
希望这个例子很有用,你可以用它做点什么。