voffkarostov, код в целом рабочий (хоть и очень неоптимальный), виснуть не должно.
Вставьте в main.py четвертой строкой (перед try) return 1 и проверьте уйдут ли зависания.
Если нет - значит проблема не в коде - а аппаратная, например (самое типовое) питание плохое. Посмотрите, что в консоль...