Python Script? - Регистрация серийного выхода от Arduino

Я использую плату 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 всегда должен смотреть последнюю строку в выводе arduino для строки "BAT!" и затем вызвать отключение.

У меня есть концепция для аппаратной части этого проекта Также концепция для кода Arduino

Но не знаю, как кодировать это в Linux. Может быть, подход неправильный, как сейчас, и все это должно быть написано на python или что-то еще?

Спасибо за любые предложения.

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.

Надеюсь, этот пример полезен, и вы можете что-то с ним сделать.

Другие вопросы по тегам