Raspberry Pi 3B 和 RFID RC522 - Python TypeError

Posted

技术标签:

【中文标题】Raspberry Pi 3B 和 RFID RC522 - Python TypeError【英文标题】:Raspberry Pi 3B and RFID RC522 - Python TypeError 【发布时间】:2019-07-17 17:22:49 【问题描述】:

我一直在研究 Raspberry Pi 和 RFID,发现了这个教程:

https://pimylifeup.com/raspberry-pi-rfid-rc522/

安装一切正常,但是当我运行脚本时出现错误。

这就是问题所在:

pi@raspberrypi:~/MFRC522-python $ sudo python Write.py
/home/pi/MFRC522-python/MFRC522.py:115: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(25, GPIO.OUT)
Traceback (most recent call last):
  File "Write.py", line 6, in <module>
    reader = SimpleMFRC522.SimpleMFRC522()
  File "/home/pi/MFRC522-python/SimpleMFRC522.py", line 14, in __init__
    self.READER = MFRC522.MFRC522()
  File "/home/pi/MFRC522-python/MFRC522.py", line 117, in __init__
    self.MFRC522_Init()
  File "/home/pi/MFRC522-python/MFRC522.py", line 390, in MFRC522_Init
    self.MFRC522_Reset();
  File "/home/pi/MFRC522-python/MFRC522.py", line 120, in MFRC522_Reset
    self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE)
  File "/home/pi/MFRC522-python/MFRC522.py", line 123, in Write_MFRC522
    spi.transfer(((addr<<1)&0x7E,val))
TypeError: function takes exactly 2 arguments (1 given)

这是 Write.py 文件:

#!/usr/bin/env python

import RPi.GPIO as GPIO
import SimpleMFRC522

reader = SimpleMFRC522.SimpleMFRC522()

try:
        text = raw_input('New data:')
        print("Now place your tag to write")
        reader.write(text)
        print("Written")
finally:
        GPIO.cleanup()

我在任何地方都找不到解决此问题的方法。已经尝试使用 Python 3 和其他库,但我仍然收到错误。

更新:

在 MFRC522.py 文件上编辑了这个:

def Write_MFRC522(self, addr, val):
    spi.transfer( (addr<<1)&0x7E, val )

现在我得到了这个输出:

/home/pi/MFRC522-python/MFRC522.py:115: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(25, GPIO.OUT)
First argument must be a valid dictionary.: Success
Aborted

【问题讨论】:

请贴出Write.py的内容 已更新。谢谢。 简单的 GPIO 集操作是否有效(没有 simplemfrc522)?您是否启用了 GPIO 和 SPI?如果没有,请转到 sudo raspi-config 并启用它。 请将错误信息以文字而非图片的形式包含进来。 已经这样做了,而且效果很好。是的,我在 Raspberry Config 上启用了 GPIO 和 SPI,并检查了它们是否已启用。 【参考方案1】:

我遇到同样的问题至少 2 小时...现在我发现 RC522 的 IRQ 通道必须焊接到树莓派的第 18 针...我还更新了 rc522 上的焊接针,现在它工作正常.. 似乎是机械问题,没有软件问题..

这也有帮助:https://github.com/ondryaso/pi-rc522

之前(错误信息):

pi@raspberrypi:~/MFRC522-python $ sudo python Write.py
/home/pi/MFRC522-python/MFRC522.py:115: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(25, GPIO.OUT)
Traceback (most recent call last):
  File "Write.py", line 6, in <module>
    reader = SimpleMFRC522.SimpleMFRC522()
  File "/home/pi/MFRC522-python/SimpleMFRC522.py", line 14, in __init__
    self.READER = MFRC522.MFRC522()
  File "/home/pi/MFRC522-python/MFRC522.py", line 117, in __init__
    self.MFRC522_Init()
  File "/home/pi/MFRC522-python/MFRC522.py", line 390, in MFRC522_Init
    self.MFRC522_Reset();
  File "/home/pi/MFRC522-python/MFRC522.py", line 120, in MFRC522_Reset
    self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE)
  File "/home/pi/MFRC522-python/MFRC522.py", line 123, in Write_MFRC522
    spi.transfer(((addr<<1)&0x7E,val))
TypeError: function takes exactly 2 arguments (1 given)

现在:

pi@raspberrypi:~ $ sudo python rfidreader2.py 
/usr/local/lib/python2.7/dist-packages/pi_rc522-2.2.1-py2.7.egg/pirc522/rfid.py:78: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
clean up
Tag detected
UID: [169, 112, 111, 72, 254]
Reading block 10: (False, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

【讨论】:

欢迎来到 Stack Overflow!请仅在您想回答问题时发布答案。在其他情况下,请考虑发表评论或投票! 成功了!谢谢!想要分享您的 Read.py 吗? 嗨,我实际上正在研究它 - 当它可以用作智能家居的个性化控制实用程序时开放分享;-) 也为我工作!几天来,我一直在努力让我的 MFRC522 正常工作。【参考方案2】:

问题来自https://github.com/lthiery/SPI-Py 库。 如果您回滚到 8cce26b9ee6e69eb041e9d5665944b88688fca68 它应该可以工作

确保在回滚后再次运行设置。

git clone https://github.com/lthiery/SPI-Py.git
git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68
sudo python setup.py install

【讨论】:

【参考方案3】:

看看这里:https://github.com/lthiery/SPI-Py/issues/23 更新 SPI 后我遇到了同样的问题...

【讨论】:

【参考方案4】:

我有同样的问题。我的解决方案是:

git clone https://github.com/lthiery/SPI-Py.git
cd SPI Py
sudo python setup.py install

在这些命令之后它可以工作

 sudo python3 setup.py install

【讨论】:

【参考方案5】:

我刚刚移除了 IRQ 电缆,它对我有用。虽然我不确定这是否是最好的方法。

确保使用 root 测试您的脚本。

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review

以上是关于Raspberry Pi 3B 和 RFID RC522 - Python TypeError的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Raspberry PI 从 RDM6300 读取 RFID 数据

Raspberry Pi 3B 安装Miniconda

Raspberry Pi 3B 安装NoneBot2

Raspberry Pi 3B+:相机 V1.3 不工作

使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败

如何将运行时框架“Microsoft.WindowsDesktop.App”,版本 6.0.0 下载到 Raspberry PI 3b+