簡體   English   中英

Python腳本? -記錄來自arduino的串行輸出

[英]Python Script? - Logging serial output from arduino

我正在使用OrangePI板記錄來自arduino的數據,該數據每10秒通過串行輸出給出一行。

20.0 / 12.0 V

這是loggig,它是由連接到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應該始終在arduino輸出中監視字符串“ BAT!”的最后一行。 然后觸發關機。

我有這個項目的硬件部分的概念,還有arduino代碼的概念

但是不知道如何在Linux上編寫代碼。 也許這種方法現在是錯誤的,整個事情應該用python或類似的東西編碼?

感謝您的任何建議。

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.

希望本示例對您有所幫助,您可以使用它來做些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM