ESP8266 (Nodemcu) + PN532 (RFID) + ST7735 (Display) 在一个设置中可能吗?

Posted

技术标签:

【中文标题】ESP8266 (Nodemcu) + PN532 (RFID) + ST7735 (Display) 在一个设置中可能吗?【英文标题】:ESP8266 (Nodemcu) + PN532 (RFID) + ST7735 (Display) in one setup possible? 【发布时间】:2022-01-16 07:22:06 【问题描述】:

我正在尝试让 RFID 阅读器 (PN532) 与显示器一起工作,所以它显示在那里,他扫描了他的 RFID 卡。 我遇到的问题是,两个设备都使用了 2 个引脚(D7 HMOSI)和(D5 HSLCK)。因此,我只是将这两个连接都放在了那些上面。 (错了吗?)

现在,当初始化两个设备中的任何一个时,另一个会被禁用。

我使用 Adafruit 来初始化两个设备。

除此之外,当 RFID-Reader 连接时,ESP8266 不会启动。从 3.3Volt VCC 移除 Pin 并等待初始化,然后添加 Pin,然后 RFID-Reader 被识别并且 ESP8266 运行。 (崩溃的坏情况,因为它永远不会重新启动)

这是我的电缆设置:

这也是我的代码:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

#define PN532_SCK  (14)
#define PN532_MOSI (13)
#define PN532_SS   (15)
#define PN532_MISO (12)

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789

#define TFT_CS         5
#define TFT_RST        16                                            
#define TFT_DC         4

Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void testdrawtext(char *text, uint16_t color) 
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);


void setup(void) 
  Serial.begin(9600);

  Serial.print(F("Hello! ST7735 TFT Init"));
  tft.initR(INITR_BLACKTAB);      // Init ST7735 chip, black tab
  Serial.println(F("Initialized"));
  tft.fillScreen(ST77XX_BLACK);

  while (!Serial) delay(10); 
  Serial.println("Hello! PN532 RFID Init");

  nfc.begin();   // Init PN532 chip

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) 
    Serial.print("Didn't find PN532 board");
    while (1); // halt
  
  
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  
  nfc.setPassiveActivationRetries(0xFF);
  nfc.SAMConfig();
  
  Serial.println("Waiting for a Card");

【问题讨论】:

【参考方案1】:

构造函数

 Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

创建一个使用软件 SPI 的“驱动程序”。但是您提供硬件 SPI 的引脚作为参数。 Adafruit_ST7735 库通过 SPI 库使用硬件 SPI 来访问显示器,因此硬件 SPI 与 PN532 库的软件 SPI 冲突

使用

Adafruit_PN532 nfc(PN532_SS);

在 SPI 库上使用硬件 SPI 的构造函数。 SPI 库“知道”SPI 引脚的引脚号。 (SPI库是boards包的一部分,不能单独安装。)

并且不要将 SS (io 15) 用作 CS。使用不同的引脚。 io 15 是引导配置引脚,在引导时必须为低电平。

【讨论】:

以上是关于ESP8266 (Nodemcu) + PN532 (RFID) + ST7735 (Display) 在一个设置中可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

ESP8266-NodeMCU项目:ESP8266-NodeMCU+Blinker+DHT11+小爱同学

ESP-NOW ESP8266 NodeMCU单板双向通信

ESP8266 nodemcu

ESP32 无法检测到 PN532 NFC 模块

ESP8266 NodeMCU 内存不足

基于MacOS搭建ESP8266 NodeMCU CP2102开发环境