Проблема заключается в том, чтобы не разрывать соединение между Arduino и сервером до его закрытия.
Есть ли в django какие-то доступные методы вне web-запросов?
Если просто написать
def index(request):
serial = serial.Serial('/dev/ttyUSB0', 9600)
serial.write(b'start')
То будет создаваться новое подключение каждый раз, а это сильно мешает, ведь arduino категорически не надо перезагружать
Заранее благодарен
1 ответ 1
Для будущих поколений отвечу. Для решения действительно достаточно вынести присвоение serial на уровень выше.
Стоит отметить, что Arduino любит отваливаться от порта, поэтому подключение необходимо иногда проверять:
serial = None
def get_serial(attempts = 5, port = '/dev/ttyUSB0', baudrate = 9600):
global serial
for i in range(attempts):
try:
if serial is None or serial.port is None:
serial = Serial(port, baudrate, timeout=0)
sleep(5) # Ожидаем запуска Arduino
else:
_ = serial.in_waiting # Когда Arduino отвалится здесь выпадет исключение
return serial
except SerialException as e:
try:
serial.close()
except Exception as e:
pass
serial = None
sleep(50)
return None
Ну и старый код можно переписать с использованием новый функции:
def index(request):
get_serial().write(b'start')
ответ дан 2 нояб. 2022 в 10:56
goodmice
8035 серебряных знаков14 бронзовых знаков
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросlang-py
serial = serial.Serial('/dev/ttyUSB0', 9600)из функции?