AttributeError: у объекта 'NoneType' нет атрибута 'send' pigpiod - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я создаю еще одну программу, которая может запускать шаговый двигатель по часовой стрелке и против часовой стрелки с повышением и понижением скорости и добавлением ограничительного переключателя на GPIO 16 и 26, чтобы остановить pi.wave_send_using_mode(wid2, pigpio.WAVE_MODE_ONE_SHOT_SYNC), выдающий цепную волну, это мойкод:

import time
import pigpio

START_DELAY=600
FINAL_DELAY=500
STEP=1

GPIO=20

pi = pigpio.pi()

pi.set_mode(GPIO, pigpio.OUTPUT)
pi.set_mode(21, pigpio.OUTPUT)
pi.set_mode(26,pigpio.INPUT)
pi.set_mode(16,pigpio.INPUT)
#pi.write(21,1)
pi.wave_clear()

statee = 0
try:
    while True:

        pi.write(21,statee)
        pi.wave_clear()

        wf=[]
        offset = pi.wave_get_micros()
        for delay in range(START_DELAY, FINAL_DELAY, -STEP):
           wf.append(pigpio.pulse(1<<GPIO, 0,       delay))
           wf.append(pigpio.pulse(0,       1<<GPIO, delay))

        for i in range(500):
            wf.append(pigpio.pulse(1<<GPIO, 0,       FINAL_DELAY))
            wf.append(pigpio.pulse(0,       1<<GPIO, FINAL_DELAY))
        wf.append(pigpio.pulse(0, 0, offset))

        for delay in range(FINAL_DELAY, START_DELAY, STEP):
           wf.append(pigpio.pulse(1<<GPIO, 0,       delay))
           wf.append(pigpio.pulse(0,       1<<GPIO, delay))

        pi.wave_add_generic(wf)

        wid2 = pi.wave_create()

        #pi.wave_send_once(wid2)
        pi.wave_send_using_mode(wid2, pigpio.WAVE_MODE_ONE_SHOT_SYNC)

        if pi.read(26) == 0:
            pi. wave_tx_stop()
            pi.stop()
        if pi.read(16) == 0:
            pi.wave_tx_stop()
            pi.stop()

        time.sleep(0.75)
        if statee == 0:
            statee = 1
        elif statee == 1:
            statee = 0
except KeyboardInterrupt:
    print ("\nCtrl-C pressed.  Stopping PIGPIO and exiting...")
    pi.wave_tx_stop()
    pi.stop()

проблема возникает, когда мотор работает около 5 - 10 минут, я выдаю сообщение об ошибке, подобное этому:

Traceback (most recent call last):


File "/home/pi/Desktop/ramp.py", line 49, in <module>
    if pi.read(16) == 0:
  File "/usr/local/lib/python3.4/dist-packages/pigpio.py", line 1401, in read
    return _u2i(_pigpio_command(self.sl, _PI_CMD_READ, gpio, 0))
  File "/usr/local/lib/python3.4/dist-packages/pigpio.py", line 989, in _pigpio_command
    sl.s.send(struct.pack('IIII', cmd, p1, p2, 0))
AttributeError: 'NoneType' object has no attribute 'send'

Итак, что причина ошибки в моемкод?Это вызвано pi.read(26) и pi.read(16)?Есть ли другие способы остановить или прекратить pi.wave_send_using_mode(wid2, pigpio.WAVE_MODE_ONE_SHOT_SYNC) в середине этого процесса?спасибо, небольшое примечание: я установил запуск демона pigpiod при загрузке следующим образом (https://raspberrypi.stackexchange.com/questions/70568/how-to-run-pigpiod-on-boot KimSJ answer), является ли метод runimg pigpiod причиной этой ошибки?спасибо

обновление: после очистки pi.stop() на pi.read(26) и pi.read(26) и обновления версии pigpiod до v68 все работает корректно без ошибок

1 Ответ

0 голосов
/ 05 декабря 2018

после очистки pi.stop() на pi.read(26) и pi.read(26) и обновления версии pigpiod до v68 все работает корректно без ошибок

...