0

Проблема заключается в том, чтобы не разрывать соединение между Arduino и сервером до его закрытия.

Есть ли в django какие-то доступные методы вне web-запросов?

Если просто написать

def index(request):
 serial = serial.Serial('/dev/ttyUSB0', 9600)
 serial.write(b'start')

То будет создаваться новое подключение каждый раз, а это сильно мешает, ведь arduino категорически не надо перезагружать

Заранее благодарен

задан 3 янв. 2020 в 5:25
2
  • 1
    Вынести serial = serial.Serial('/dev/ttyUSB0', 9600) из функции? Commented 3 янв. 2020 в 11:36
  • @ГеннадийП я и спрашиваю куда. в какой бы из скриптов я не вынес из другого скрипта я не могу обратиться к этому Commented 3 янв. 2020 в 16:16

1 ответ 1

0

Для будущих поколений отвечу. Для решения действительно достаточно вынести присвоение 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

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.