Raspberry Pi 3B и RFID RC522 - ошибка Python TypeError - PullRequest
0 голосов
/ 24 февраля 2019

Я возился с 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

Ответы [ 4 ]

0 голосов
/ 21 июля 2019

У меня была такая же проблема.Мое решение было:

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

оно работает после этих команд

 sudo python3 setup.py install
0 голосов
/ 06 марта 2019

Проблема связана с библиотекой https://github.com/lthiery/SPI-Py.Если вы вернетесь к 8cce26b9ee6e69eb041e9d5665944b88688fca68, он должен работать

. После отката обязательно запустите установку снова.

git clone https://github.com/lthiery/SPI-Py.git
git checkout 8cce26b9ee6e69eb041e9d5665944b88688fca68
sudo python setup.py install
0 голосов
/ 11 марта 2019

Посмотрите здесь: https://github.com/lthiery/SPI-Py/issues/23 У меня возникает та же проблема после обновления SPI ...

0 голосов
/ 24 февраля 2019

У меня была такая же проблема, по крайней мере, в течение 2 часов ... теперь я узнал, что IRQ-канал RC522 должен быть припаян к выводу 18 Raspberry PI ... Я также обновил припаянные контакты на RC522,теперь он работает нормально .. похоже, это проблема механики, нет проблем с программным обеспечением ..

Это также помогает: https://github.com/ondryaso/pi-rc522

Befor (ошибка сообщения):

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])
...