Python глотает первое значение, которое приходит через последовательную связь - PullRequest
2 голосов
/ 20 марта 2020

У меня Nodemcu ESP8266, подключенный к Raspberry Pi через последовательное соединение. Nodemcu часто (каждые 5 минут) отправляет данные на мой Pi, но если я не запускаю сценарий на моем Pi, эти данные никак не используются. Данные являются просто числом, обычно между 0-15. На Пи я пытаюсь записать CSV-файл с входящими данными (с метками времени) из Nodemcu, но первое входящее значение проглатывается, пока не поступит второе значение. Затем первое значение записывается в CSV-файл но с отметкой времени второго значения.

Например, Nodemcu отправляет это: (временные метки не отправляются Nodemcu, я добавил их для сравнения) 08:04:15 1 08:09:16 2 08:14:16 3 08:19: 16 4 08:24:17 5 08:29:17 6 08:34:17 7

И сценарий записывает это в CSV-файл: (эти временные метки записываются в CSV-файл) 08: 09:16 1 08:14:16 2 08:19:16 3 08:24:17 4 08:29:17 5 08:34:17 6

Я проверил последовательное соединение (контакты на Pi) и скрипт, который я запускаю на Nodemcu, и они выглядят отлично, поэтому я предполагаю, что это скрипт на моем Pi. Вот сценарий, который я запускаю на своем Пи:

import serial
import time
import csv
from datetime import datetime
value_mcu = ''
s = serial.Serial('/dev/ttyAMA0', 74880) 
time.sleep(5)

today = datetime.today().strftime('%Y-%m-%d')
with open('/home/pi/Desktop/CSV/' + today + '.csv','w') as db:
    db.write('Timestamp,Value\n')

while True:
    try:
        while value_mcu.strip() == '':
            value_mcu = s.readline().decode('utf-8').strip()
        today = datetime.today().strftime('%Y-%m-%d')
        now = datetime.today().strftime('%H:%M:%S')

        with open('/home/pi/Desktop/CSV/' + today + '.csv','a') as db:
            db.write(now + ',' + value_mcu + '\n')
        value_mcu = ''
    except KeyboardInterrupt:
        s.close()

Надеюсь, кто-нибудь понял, что здесь происходит. Заранее спасибо за помощь.

...