Использование последовательного порта и цикла для отправки данных в Arduino со временем замедляется - утечка памяти? - PullRequest
0 голосов
/ 23 мая 2019

Итак, у меня есть некоторый код, который извлекает данные из API на локальном хосте, а затем записывает их через последовательный порт на Arduino, который питает пару вентиляторов PWM. Вот код:

import urllib3
import serial
import json

s = serial.Serial('com4', 9600)

conn = urllib3.PoolManager()

def get_speed(conn):
    r = conn.request('GET', 'http://localhost:8180/crest2/v1/api')
    data = json.loads(r.data.decode())
    metersPerSec = int(data['carState']['mSpeed'])
    kilometersPerHour = int(metersPerSec * 3.6)
    kilometersPerHour = str(kilometersPerHour) + '\n'
    print(kilometersPerHour)
    s.write((kilometersPerHour.encode()))
    s.flush()

running=True
while running:
    get_speed(conn)

Мне нужен этот код для чтения из API и очень быстрой записи по последовательному каналу в arduino (несколько раз в секунду). Когда я запускаю скрипт, он запускается snappy и вызывает api много раз в секунду, как и ожидалось, но через несколько секунд он замедляется и делает звонки только каждую секунду или около того. Я предполагаю, что это связано с какой-то утечкой памяти или неправильным использованием цикла while, но я недостаточно информирован, чтобы исправить мою проблему.

Буду очень признателен за любую помощь или руководство по аналогичной проблеме, поскольку я потратил несколько дней на поиск и отработку различных вещей для оптимизации.

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2019
s = serial.Serial('com4', 9600)

Попробуйте работать с более высокой скоростью. 9600 - скорость улитки, и ваш буфер передачи заполняется. Как только это происходит, следующая запись должна блокироваться, пока в буфере не останется места для того, что она хочет записать.

...