橙色 PI 上的双 RC522

2023-12-06

我的目标是使用带有 Orange PI 的双 RFID RC522 读取器。 到目前为止,我只成功完成了一项工作。 (阅读 google、armbian 和 Orange pi 论坛)。这是我到目前为止所做的:

硬件连接:

单RC 522

 MOSI ——————————> pin 19
 MISO ——————————-> pin 21
 SCLK ——————————-> pin 23
 SDA ——————————–> pin 24
 RST ———————————> pin 22
 IRQ ———————————-> NONE

第二个读卡器使用共享引脚,除了 SDA,它连接到橙色 PI 上的引脚 26

软件:

安装 python 开发

 apt-get install python-dev

安装orangepi_PC_gpio_pyH3库

  git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

  cd orangepi_PC_gpio_pyH3

  python setup.py install

安装 SPI-Py 库

git clone https://github.com/lthiery/SPI-Py.git

cd SPI-Py

 python setup.py install

安装 MFRC522-python

 git clone https://github.com/rasplay/MFRC522-python.git

棘手的部分是,MFRC522-python 是为了在 Orange pi 上与 RASPBERRY PI 一起使用而设计的,有人通过修改 MFRC522.py 提供了一种解决方案

    #import RPi.GPIO as GPIO
import pyA20.gpio as GPIO
import spi
import signal

class MFRC522:
  NRSTPD = 22

  MAX_LEN = 16

  PCD_IDLE       = 0x00
  PCD_AUTHENT    = 0x0E
  PCD_RECEIVE    = 0x08
  PCD_TRANSMIT   = 0x04
  PCD_TRANSCEIVE = 0x0C
  PCD_RESETPHASE = 0x0F
  PCD_CALCCRC    = 0x03

  PICC_REQIDL    = 0x26
  PICC_REQALL    = 0x52
  PICC_ANTICOLL  = 0x93
  PICC_SElECTTAG = 0x93
  PICC_AUTHENT1A = 0x60
  PICC_AUTHENT1B = 0x61
  PICC_READ      = 0x30
  PICC_WRITE     = 0xA0
  PICC_DECREMENT = 0xC0
  PICC_INCREMENT = 0xC1
  PICC_RESTORE   = 0xC2
  PICC_TRANSFER  = 0xB0
  PICC_HALT      = 0x50

  MI_OK       = 0
  MI_NOTAGERR = 1
  MI_ERR      = 2

  Reserved00     = 0x00
  CommandReg     = 0x01
  CommIEnReg     = 0x02
  DivlEnReg      = 0x03
  CommIrqReg     = 0x04
  DivIrqReg      = 0x05
  ErrorReg       = 0x06
  Status1Reg     = 0x07
  Status2Reg     = 0x08
  FIFODataReg    = 0x09
  FIFOLevelReg   = 0x0A
  WaterLevelReg  = 0x0B
  ControlReg     = 0x0C
  BitFramingReg  = 0x0D
  CollReg        = 0x0E
  Reserved01     = 0x0F

  Reserved10     = 0x10
  ModeReg        = 0x11
  TxModeReg      = 0x12
  RxModeReg      = 0x13
  TxControlReg   = 0x14
  TxAutoReg      = 0x15
  TxSelReg       = 0x16
  RxSelReg       = 0x17
  RxThresholdReg = 0x18
  DemodReg       = 0x19
  Reserved11     = 0x1A
  Reserved12     = 0x1B
  MifareReg      = 0x1C
  Reserved13     = 0x1D
  Reserved14     = 0x1E
  SerialSpeedReg = 0x1F

  Reserved20        = 0x20  
  CRCResultRegM     = 0x21
  CRCResultRegL     = 0x22
  Reserved21        = 0x23
  ModWidthReg       = 0x24
  Reserved22        = 0x25
  RFCfgReg          = 0x26
  GsNReg            = 0x27
  CWGsPReg          = 0x28
  ModGsPReg         = 0x29
  TModeReg          = 0x2A
  TPrescalerReg     = 0x2B
  TReloadRegH       = 0x2C
  TReloadRegL       = 0x2D
  TCounterValueRegH = 0x2E
  TCounterValueRegL = 0x2F

  Reserved30      = 0x30
  TestSel1Reg     = 0x31
  TestSel2Reg     = 0x32
  TestPinEnReg    = 0x33
  TestPinValueReg = 0x34
  TestBusReg      = 0x35
  AutoTestReg     = 0x36
  VersionReg      = 0x37
  AnalogTestReg   = 0x38
  TestDAC1Reg     = 0x39
  TestDAC2Reg     = 0x3A
  TestADCReg      = 0x3B
  Reserved31      = 0x3C
  Reserved32      = 0x3D
  Reserved33      = 0x3E
  Reserved34      = 0x3F

  serNum = []

  def __init__(self,spd=1000000):
    spi.openSPI(speed=spd)
#    GPIO.setmode(GPIO.BOARD)
#    GPIO.setup(22, GPIO.OUT)
#    GPIO.output(self.NRSTPD, 1)
    self.MFRC522_Init()

  def MFRC522_Reset(self):
    self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE)

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

  def Read_MFRC522(self,addr):
    val = spi.transfer((((addr<<1)&0x7E) | 0x80,0))
    return val[1]

  def SetBitMask(self, reg, mask):
    tmp = self.Read_MFRC522(reg)
    self.Write_MFRC522(reg, tmp | mask)

  def ClearBitMask(self, reg, mask):
    tmp = self.Read_MFRC522(reg);
    self.Write_MFRC522(reg, tmp & (~mask))

  def AntennaOn(self):
    temp = self.Read_MFRC522(self.TxControlReg)
    if(~(temp & 0x03)):
      self.SetBitMask(self.TxControlReg, 0x03)

  def AntennaOff(self):
    self.ClearBitMask(self.TxControlReg, 0x03)

  def MFRC522_ToCard(self,command,sendData):
    backData = []
    backLen = 0
    status = self.MI_ERR
    irqEn = 0x00
    waitIRq = 0x00
    lastBits = None
    n = 0
    i = 0

    if command == self.PCD_AUTHENT:
      irqEn = 0x12
      waitIRq = 0x10
    if command == self.PCD_TRANSCEIVE:
      irqEn = 0x77
      waitIRq = 0x30

    self.Write_MFRC522(self.CommIEnReg, irqEn|0x80)
    self.ClearBitMask(self.CommIrqReg, 0x80)
    self.SetBitMask(self.FIFOLevelReg, 0x80)

    self.Write_MFRC522(self.CommandReg, self.PCD_IDLE);  

    while(i<len(sendData)):
      self.Write_MFRC522(self.FIFODataReg, sendData[i])
      i = i+1

    self.Write_MFRC522(self.CommandReg, command)

    if command == self.PCD_TRANSCEIVE:
      self.SetBitMask(self.BitFramingReg, 0x80)

    i = 2000
    while True:
      n = self.Read_MFRC522(self.CommIrqReg)
      i = i - 1
      if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)):
        break

    self.ClearBitMask(self.BitFramingReg, 0x80)

    if i != 0:
      if (self.Read_MFRC522(self.ErrorReg) & 0x1B)==0x00:
        status = self.MI_OK

        if n & irqEn & 0x01:
          status = self.MI_NOTAGERR

        if command == self.PCD_TRANSCEIVE:
          n = self.Read_MFRC522(self.FIFOLevelReg)
          lastBits = self.Read_MFRC522(self.ControlReg) & 0x07
          if lastBits != 0:
            backLen = (n-1)*8 + lastBits
          else:
            backLen = n*8

          if n == 0:
            n = 1
          if n > self.MAX_LEN:
            n = self.MAX_LEN

          i = 0
          while i<n:
            backData.append(self.Read_MFRC522(self.FIFODataReg))
            i = i + 1;
      else:
        status = self.MI_ERR

    return (status,backData,backLen)


  def MFRC522_Request(self, reqMode):
    status = None
    backBits = None
    TagType = []

    self.Write_MFRC522(self.BitFramingReg, 0x07)

    TagType.append(reqMode);
    (status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, TagType)

    if ((status != self.MI_OK) | (backBits != 0x10)):
      status = self.MI_ERR

    return (status,backBits)


  def MFRC522_Anticoll(self):
    backData = []
    serNumCheck = 0

    serNum = []

    self.Write_MFRC522(self.BitFramingReg, 0x00)

    serNum.append(self.PICC_ANTICOLL)
    serNum.append(0x20)

    (status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,serNum)

    if(status == self.MI_OK):
      i = 0
      if len(backData)==5:
        while i<4:
          serNumCheck = serNumCheck ^ backData[i]
          i = i + 1
        if serNumCheck != backData[i]:
          status = self.MI_ERR
      else:
        status = self.MI_ERR

    return (status,backData)

  def CalulateCRC(self, pIndata):
    self.ClearBitMask(self.DivIrqReg, 0x04)
    self.SetBitMask(self.FIFOLevelReg, 0x80);
    i = 0
    while i<len(pIndata):
      self.Write_MFRC522(self.FIFODataReg, pIndata[i])
      i = i + 1
    self.Write_MFRC522(self.CommandReg, self.PCD_CALCCRC)
    i = 0xFF
    while True:
      n = self.Read_MFRC522(self.DivIrqReg)
      i = i - 1
      if not ((i != 0) and not (n&0x04)):
        break
    pOutData = []
    pOutData.append(self.Read_MFRC522(self.CRCResultRegL))
    pOutData.append(self.Read_MFRC522(self.CRCResultRegM))
    return pOutData

  def MFRC522_SelectTag(self, serNum):
    backData = []
    buf = []
    buf.append(self.PICC_SElECTTAG)
    buf.append(0x70)
    i = 0
    while i<5:
      buf.append(serNum[i])
      i = i + 1
    pOut = self.CalulateCRC(buf)
    buf.append(pOut[0])
    buf.append(pOut[1])
    (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf)

    if (status == self.MI_OK) and (backLen == 0x18):
      print "Size: " + str(backData[0])
      return  backData[0]
    else:
      return 0

  def MFRC522_Auth(self, authMode, BlockAddr, Sectorkey, serNum):
    buff = []
    buff.append(authMode)
    buff.append(BlockAddr)
    i = 0
    while(i < len(Sectorkey)):
      buff.append(Sectorkey[i])
      i = i + 1
    i = 0
    while(i < len(serNum)):
      buff.append(serNum[i])
      i = i +1
    (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_AUTHENT,buff)
    if not(status == self.MI_OK):
      print "AUTH ERROR!!"
    if not (self.Read_MFRC522(self.Status2Reg) & 0x08) != 0:
      print "AUTH ERROR(status2reg & 0x08) != 0"

    return status

  def MFRC522_Read(self, blockAddr):
    recvData = []
    recvData.append(self.PICC_READ)
    recvData.append(blockAddr)
    pOut = self.CalulateCRC(recvData)
    recvData.append(pOut[0])
    recvData.append(pOut[1])
    (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, recvData)
    if not(status == self.MI_OK):
      print "Error while reading!"

    print "Got data size: "+str(backLen)
    i = 0
    if len(backData) == 16:
      print "Sector "+str(blockAddr)+" "+str(backData)

  def MFRC522_Write(self, blockAddr, writeData):
    buff = []
    buff.append(self.PICC_WRITE)
    buff.append(blockAddr)
    crc = self.CalulateCRC(buff)
    buff.append(crc[0])
    buff.append(crc[1])
    (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buff)
    if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
      status = self.MI_ERR

    print str(backLen)+" backdata &0x0F == 0x0A "+str(backData[0]&0x0F)
    if status == self.MI_OK:
        i = 0
        buf = []
        while i < 16:
          buf.append(writeData[i])
          i = i + 1
        crc = self.CalulateCRC(buf)
        buf.append(crc[0])
        buf.append(crc[1])
        (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,buf)
        if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
          print "Error while writing"
        if status == self.MI_OK:
          print "Data writen"


  def MFRC522_Init(self):
#    GPIO.output(self.NRSTPD, 1)

    self.MFRC522_Reset();


    self.Write_MFRC522(self.TModeReg, 0x8D)
    self.Write_MFRC522(self.TPrescalerReg, 0x3E)
    self.Write_MFRC522(self.TReloadRegL, 30)
    self.Write_MFRC522(self.TReloadRegH, 0)

    self.Write_MFRC522(self.TxAutoReg, 0x40)
    self.Write_MFRC522(self.ModeReg, 0x3D)
    self.AntennaOn()

  def GPIO_CLEEN(self):
    GPIO.cleanup() 

4 行被注释(109 - 111, 357),第一行被替换为使用 pyA20.gpio 而不是 RPi.GPIO。

之后,我运行 read.py,它就像一个魅力。

import MFRC522
import signal

continue_reading = True
MIFAREReader = MFRC522.MFRC522()

cardA = [5,74,28,185,234]
cardB = [83,164,247,164,164]
cardC = [20,38,121,207,132]

def end_read(signal, frame):
  global continue_reading
  continue_reading = False
  print "Ctrl+C captured, ending read."
  MIFAREReader.GPIO_CLEEN()

signal.signal(signal.SIGINT, end_read)

while continue_reading:
  (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
  if status == MIFAREReader.MI_OK:
    print "Card detected"
  (status,backData) = MIFAREReader.MFRC522_Anticoll()
  if status == MIFAREReader.MI_OK:
    print "Card read UID: "+str(backData[0])+","+str(backData[1])+","+str(backData[2])+","+str(backData[3])+","+str(backData[4])
    if  backData == cardA:
      print "is Card A"
    elif backData == cardB:
      print "is Card B"
    elif backData == cardC:
      print "is Card C"
    else:
      print "wrong Card"

这就是在ORANGE PI PC上使用阅读器的方法。我用谷歌搜索并进一步阅读,为了使用第二个读者,我需要修改我评论的完全相同的行才能使其工作。它使用该 SDA PIN 控制 RC522,选择从哪个读卡器读取数据。我尝试取消其中任何一个的注释,但出现错误。看起来那些使用特定的 RPi.GPIO 功能。我的Python知识非常基础。我试图找到所描述的已使用和失败的引脚的具体位置。尝试将引脚 24 替换为 26,以便从第二个读取的数据中读取数据。到目前为止还没有成功。


我有非常相似的设置并且遇到了类似的问题。

看来我昨晚就成功解决了这些问题! :)

我的项目涉及:

  • 橙色 pi 零
  • 12-13个RFID-RC522模块(目前只有2个)
  • SPI通讯
  • 因为我需要大量数字输出引脚,所以我将使用 12-13 移位寄存器 IC (74HC595)

方法和问题:

  1. 将SCK、MISO和MOSI引脚连接在一起,将RST拉高,通过修改MFRC522类来单独控制每条SS线。不起作用,也许我的计时关闭了,应该连接逻辑分析仪并查看。

  2. 将 SCK、MISO、MOSI 和 SS 引脚连接在一起,将 RST 拉高,打开/关闭 Vcc 或 GND 引脚(关闭除一个之外的所有读取器的电源,从该读取器读取,切换到下一个)。没有工作并且呈现出非常有趣的情况。在某些情况下,即使 Vcc、GND 或两个引脚都断开,RFID 模块也可以读取卡!信号引脚存在一些明显的漏电流。在这里,我尝试了多路分配器、移位寄存器、线路驱动器 IC,但没有任何效果。

  3. 最后,采取有效的方法。将 SCK、MISO、MOSI 和 SS 引脚连接在一起,控制 RST 引脚。 RST 当拉低时模块断电。将其拉起即可开机。因此,最初所有 RST 引脚都拉低,然后逐一拉高,小延迟允许模块启动(我使用 200ms),调用 MFRC522_Init() (不确定每个周期是否有必要,不我猜会受伤),执行读取,将 RST 拉低,切换到下一个模块。这种方法的好处是低功耗:2 个断电模块消耗 3.6mA,1 个开 - 1 个关消耗 18mA。

希望这可以帮助! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

橙色 PI 上的双 RC522 的相关文章

  • MANIFEST.in、package_data 和 data_files 澄清吗?

    我正在尝试创建一个 Python 包 并且目录结构如下 mypkg init py module1 x py y py z txt module2 a py b py 然后我将所有文件添加到MANIFEST in当我检查创建的存档时 它包含
  • 如何在 Google App Engine 的 Python 中获取 StringProperty 的值?

    如何获取 nbd Model 的值 我想返回由多个字段组成的描述 但我无法让它工作 这是我的班级代码 class User ndb Model name ndb StringProperty email ndb StringProperty
  • 最小二乘法拟合直线 python 代码

    我有一个由 X 和 Y 坐标组成的散点图 我想使用直线的最小二乘拟合来获得最佳拟合线 直线最小二乘拟合是指 如果 x 1 y 1 x n y n 是测量数据对 则最佳直线是y A Bx 这是我的Python代码 number of poin
  • 正则表达式,选择最接近的匹配

    假设以下单词序列 BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA 我想做的是将 BLA 中的文本
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 如何在Python代码中查找列号

    简短问题 当按上述方式调用函数时 我可以找到行号here https stackoverflow com questions 3056048 filename and line number of python script 同样 如何找到
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • Tensorflow 不分配完整的 GPU 内存

    Tensorflow 默认分配所有 GPU 内存 但我的新设置实际上只有 9588 MiB 11264 MiB 我预计大约 11 000MiB 就像我的旧设置一样 张量流信息在这里 from tensorflow python client
  • reStructuredText:README.rst 未在 PyPI 上解析

    我有一个托管在 Github 和 PyPI 上的 Python 项目 在 Github 上 https github com sloria TextBlob blob master README rst https github com s
  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • 线性同余生成器 - 如何选择种子和统计检验

    我需要做一个线性同余生成器 它将成功通过所选的统计测试 我的问题是 如何正确选择发电机的数字以及 我应该选择哪些统计检验 我想 均匀性的卡方频率测试 每代收集10 000个号码的方法 将 0 1 细分为10个相等的细分 柯尔莫哥洛夫 斯米尔
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4
  • 在 matplotlib 中绘制多边形的并集[重复]

    这个问题在这里已经有答案了 我正在尝试绘制几个多边形的并集matplotlib 具有一定的 alpha 水平 我当前的代码在交叉点处颜色较深 有没有办法让交叉路口与其他地方的颜色相同 import matplotlib pyplot as
  • 在父类中访问子类变量

    我有一个父类和一个继承的子类 我想知道如何访问我的父类中的子类变量 我尝试了这个但失败了 class Parent object def init self print x class Child Parent x 1 x Child Er
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in

随机推荐

  • 启动本地azure项目时调试器无法连接

    好的 首先 这就是我所做的 安装 AZURE 工具 Reboot 启动 Visual Studio 新的 Azure 项目 添加 Web 角色 asp net MVC 4 beta Web 角色 按 F5 调试 它启动存储模拟器和计算模拟器
  • 如何设置表适配器的连接字符串(动态设置的连接字符串)

    我刚刚从另一位不再在公司工作的开发人员那里继承了 数据库专家 的角色 所以如果我听起来特别菜鸟 请原谅我 该应用程序是一个 VB NET 4 应用程序 我们的表适配器的数据库连接字符串是 my settings My Settings DB
  • 在Unity3d C#中访问动态添加的组件

    添加后Component to a GameObject通过GameObject AddComponent方法 我怎样才能访问这个Component来自另一个脚本 这是 myScript 代码 未附加到游戏对象 using UnityEng
  • 如何在 Python 中将一个列表拆分为两个唯一的列表?

    嗨 我有一个清单如下 listt a b c d e f g h i j k l m n o 15名成员 我想把它变成 3 个列表 我使用了这段代码 它有效 但我想要唯一的列表 这给了我 3 个具有共同成员的列表 import random
  • Octave - 如何在 Windows 上安装软件包

    Question 由于问题在修复了 Octave urlread 导致无法使用给定 CA 证书对对等证书进行身份验证的问题 我无法在 Windows 上安装 Octave 软件包 请建议其他安装方式 我特别想经历梯度 梯度图和切平面这需要符
  • ASP.NET 和 WordPress 之间共享身份验证

    我现在的情况是需要在 ASP NET 网站和 WordPress 之间自动验证用户 这个想法是 一旦您登录到 ASP NET 网站 并且浏览 WP 页面 您就会自动登录 反之亦然 在 ASP NET 中 我可以针对 WP 数据库对用户进行身
  • 使用sql/plsql,如何找出文本使用的字符集?

    我有一个 Oracle 数据库 它存储来自世界各地 不同语言的文档内容 文档存储在一个带有 BLOB 列的表中 该列存储文档的内容 我想通过 Oracle 过程找出每个文档的字符集是什么 我不想使用 CSSCAN 实用程序 因为您似乎必须在
  • 所有 JSON 对象也是有效的 JavaScript 对象吗?

    The JSON标准以一种方式定义对象 并且ECMAScript JavaScript 标准在另一个标准中定义了它 人们常说 JSON 对象是 JavaScript 对象的子集 这是真的吗 每个 JSON 对象也是一个有效的 JavaScr
  • 无法使用 ApachePOI 打开 excel - 出现异常

    在尝试使用 Apache POI 打开 excel 时 我得到了 org apache poi openxml4j exceptions InvalidOperationException Can t open the specified
  • Java 重写来自另一个类的方法而不继承

    我在这里发现了类似的问题 Java 中无需子类化即可重写方法 但我的有点不同 我有两个类 一个基于 GUI 另一个只是修改第一类中元素的方法 如果它只是编辑基本功能 我不会遇到任何问题 但现在我想从第二类重写第一类方法中的 jbutton
  • spring - hibernate 从类路径资源加载 *.hbm.xml

    我在 src main resources maven 文件夹中的类路径资源中有一些 hbm xml 文件 我使用 spring 的 LocalSessionFactoryBean 通过以下 bean 配置加载这些文件
  • 对齐饼图图例中的文本 - 如何右对齐图例内的内容

    截至目前我的图例显示如下测试1 5 测试2测试2 10 测试2测试2测试3 85 我试图像这样显示 带有空格并右对齐 测试1 5 测试2测试2测试2 10 测试3测试3测试3 85 任何建议表示赞赏 您可以使用所示的方法here创建一个包含
  • Webfont +悬停颜色:部分文本不改变颜色

    我见过几次这种情况 只在 Webkit 上 场景是您有一些带有悬停颜色的文本 并且它使用 webfont 自定义字体 当您悬停时 最右边字母的一部分没有获得悬停颜色 要明白我的意思 请在 Chrome 或 Safari 中查看此小提琴 并在
  • Python中通过数组索引调用函数

    我在 Python out1 out2 out3 等中有一堆函数 想根据我传入的整数来调用它们 def arryofPointersToFns value call outn where n value 是否有捷径可寻 tl dr 写一个o
  • PHP 检测低于版本 10 的 Internet Explorer

    有人可以帮我做这个吗 因为我只有mac 无法测试IE 如果浏览器是 Internet Explorer 并且版本低于 10 那么运行事件的好方法是什么 比如说它是 IE 7 它会显示错误 或者如果它是 IE 9 9 它会显示错误 但是如果它
  • 如何以固定速率安排持续时间长于速率的任务?

    我正在尝试安排一个每秒运行大约 2 25 秒的任务 因此我知道 3 个线程应该足以处理负载 我的代码如下所示 private final ScheduledExecutorService scheduler Executors newSch
  • 谷歌地图的第二次调用未显示正确尺寸的地图

    使用 gwt maps 3 8 0 我在 gwt 弹出窗口中显示一条路线 调用一次时有效 但第二次调用时无效 What should i do some advice to refresh the mapWidget 当您显示地图时 触发其
  • Python类方法,什么时候返回self?

    我很困惑何时在类中返回 self 以及何时返回一个可能或不可能用于检查方法是否正确运行的值 def api request self data api web request code return response text def co
  • 如何使用 h5py 导入 .mat-v7.3 文件

    我有 mat 文件 其中有 3 个矩阵 A B C 实际上我使用 scipy io 导入这个 mat 文件 如下所示 data sio loadmat data mat A data A B data B C data C 但是 v7 3
  • 橙色 PI 上的双 RC522

    我的目标是使用带有 Orange PI 的双 RFID RC522 读取器 到目前为止 我只成功完成了一项工作 阅读 google armbian 和 Orange pi 论坛 这是我到目前为止所做的 硬件连接 单RC 522 MOSI g