Цифровые входные контакты на arduino nano со стандартными firmata и pyfirmata всегда «Нет»

Я подключил контакт D2 на моем arduino nano к высокому уровню и попробовал его с помощью программы arduino c, и он работает. Однако, когда я загружаю стандартные фирменные данные на контроллер из IDE arduino и пробую следующую программу python:

import pyfirmata

board = pyfirmata.Arduino('/dev/ttyUSB0')

for x in range(2,14):
    print("%s %s" % (x, board.get_pin("d:%s:i" % x).read()))

Я понял:

$ venv/bin/python test.py 
2 None
3 None
4 None
5 None
6 None
7 None
8 None
9 None
10 None
11 None
12 None
13 None

Я могу писать цифровые пины с помощью fermata и pyfirmata, но не могу читать.

Я также пробовал это:

import pyfirmata

board.digital[2].mode = pyfirmata.INPUT
board.digital[3].mode = pyfirmata.INPUT

for x in range(2,14):
    print("%s %s" % (x, board.digital[x].read()))

и другие комбинации, и всегда получайте None

(отключение провода на картинке тоже ничего не меняет)


Я также только что повторил эксперимент с Arduino Uno и получил тот же результат


поэтому я думаю, что мои вопросы:

  • Может ли кто-нибудь заметить что-то очевидное, что я делаю неправильно?
  • Может ли кто-нибудь подтвердить, что ввод pyfirmata вообще работает?
  • Что вы сделали такого, чего не делаю я?

, 👍0

Обсуждение

что должен делать резистор?, @Juraj

Если я не сделал что-то совершенно неправильное, это подтягивающий резистор на случай, если я захочу отсоединить желтый провод, чтобы увидеть низкий уровень сигнала на «D2». Это было необходимо, когда я тестировал установку с arduino-c., @Alex028502


1 ответ


Лучший ответ:

1

"Нет" указывает, что функция read() не может найти данные, поскольку входящий последовательный поток никогда не обслуживался. Запустите итератор, чтобы запустить новый поток Python, обслуживающий последовательный порт в фоновом режиме.

it = pyfirmata.util.Iterator(board)
it.start()
,