python - 定义引脚时的 InvalidPinDefError
问题描述
我正在尝试使用 pyfirmata 在 Arduino Uno R3 和我的 python 程序之间发送和接收数据。在 Arduino 安装了 StandartFirmata 草图。代码是:
from time import sleep
import serial
import pyfirmata
com_port_number = str(int(input('Введите номер COM-порта ')))
port = 'COM' + com_port_number # COM port number
print('Выбран порт COM ', port)
try:
board = pyfirmata.Arduino(port)
except serial.SerialException:
print('Не удается подключится к выбранному COM-порту')
com_port_number = str(int(input('Введите номер СОМ-порта')))
port = 'COM' + com_port_number
board = pyfirmata.Arduino(port)
sleep(1)
it = pyfirmata.util.Iterator(board)
it.start()
temp_list = []
potentiomentr = board.get_pin('a:0:o')
acid_control = board.get_pin('a:2:o')
stock_control = board.get_pin('a:3:o')
temperature_pin = board.get_pin('d:4:i') # well, this line is worked fine. Temperature sensor works correctly
in_connection_pc = board.get_pin('d:0:o') #but now i have InvalidPinDefError
triac = board.get_pin('d:6:o')
level = board.get_pin('d:8:i')
in_engine = board.get_pin('d:5:o')
in_triac = board.get_pin('d:10:o')
in_pump = board.get_pin('d:11:o')
drive_control = board.get_pin('d:12:o')
pump_control = board.get_pin('d:13:o')
while 1: # бесконечный цикл
a = temperature_pin.read()
b = in_connection_pc.write(1)
print(a)
list.append(a,b)
print(list)
sleep(3)
board.exit()
但我有一些奇怪的错误:
Traceback (most recent call last):
File "C:/Users/lomil/PycharmProjects/Pyython_and_CSV_love/test_analog.py", line 22, in <module>
in_connection_pc = board.get_pin('d:0:i') #but now i have InvalidPinDefError??
File "C:\Users\lomil\Python_32\lib\site-packages\pyfirmata\pyfirmata.py", line 220, in get_pin
raise InvalidPinDefError('Invalid pin definition: UNAVAILABLE pin {0} at position on {1}'.format(pin_def, self.name))
pyfirmata.pyfirmata.InvalidPinDefError: Invalid pin definition: UNAVAILABLE pin d:0:i at position on COM1
当我评论所有行时,除了
temperature_pin = board.get_pin('d:4:i')
它有效,但我无法理解其他引脚有什么问题。当我向 Arduino 编写测试草图时,它们非常好并且工作正常。
解决方案
错误消息实际上是在抱怨:UNAVAILABLE pin d:0:i at position on COM1
. 在 Arduino Uno(和大多数 Arduino)上,数字引脚 0 和 1 是两用引脚,也用于通过串行端口(即 COM 端口)进行通信。
Firmata 通过不断地通过串行端口进行通信来工作,因此在使用 Firmata 时,您实际上不能将数字引脚 0 和 1 用于其他任何事情。
因此,无论您在 Arduino 的数字引脚 0 上插入了什么线,您都需要移动到另一个未使用的数字引脚,例如引脚 3。因此,如果您将该线移动到数字引脚 3,那么在代码中您现在需要in_connection_pc = board.get_pin('d:3:o')
.
推荐阅读
- python - 加载 json 文件时出现 JSONDecodeError
- sqlalchemy - SQLAlchemy:合并后避免从数据库重新加载大对象
- javascript - body onload 函数在我的示例(JavaScript)中不起作用
- search - Solr 搜索没有给出单个词项的确切结果
- javascript - 如何从浏览器控制台上可见的对象获取数据,但在我的代码上手动遍历它时返回 null?
- c++ - 十六进制到十进制转换器不起作用(c ++)
- angular - 从 ngxs 商店读取
- python - 使用其他模型的属性作为默认值
- laravel - Laravel livewire 和 vuejs 无限滚动
- flutter - Flutter 中受密码保护的 AlertDialog