Skip to content

Commit 89b18f8

Browse files
authored
Merge pull request BruceDevices#1586 from lshaf/feature/nfc/u250826
❤️‍🔥 add I2C PN532 on top of M5STICK
2 parents f231a02 + fc2a952 commit 89b18f8

File tree

9 files changed

+56
-11
lines changed

9 files changed

+56
-11
lines changed

boards/m5stack-cplus1_1/pins_arduino.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <stdint.h>
55

66
#define HAS_3_BUTTONS
7+
#define M5STICK
78

89
static const uint8_t TX = 1;
910
static const uint8_t RX = 3;

boards/m5stack-cplus2/pins_arduino.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <stdint.h>
55

66
#define HAS_3_BUTTONS
7+
#define M5STICK
78

89
static const uint8_t TX = 1;
910
static const uint8_t RX = 3;

src/core/config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ void BruceConfig::setRfidModule(RFIDModules value) {
713713

714714
void BruceConfig::validateRfidModuleValue() {
715715
if (rfidModule != M5_RFID2_MODULE && rfidModule != PN532_I2C_MODULE && rfidModule != PN532_SPI_MODULE &&
716-
rfidModule != RC522_SPI_MODULE) {
716+
rfidModule != RC522_SPI_MODULE && rfidModule != PN532_I2C_SPI_MODULE) {
717717
rfidModule = M5_RFID2_MODULE;
718718
}
719719
}

src/core/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ enum RFIDModules {
1414
PN532_SPI_MODULE = 2,
1515
RC522_SPI_MODULE = 3,
1616
ST25R3916_SPI_MODULE = 4,
17+
PN532_I2C_SPI_MODULE = 5
1718
};
1819

1920
enum RFModules {

src/core/menu_items/RFIDMenu.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ void RFIDMenu::optionsMenu() {
2929

3030
String txt = "RFID";
3131
if (bruceConfig.rfidModule == M5_RFID2_MODULE) txt += " (RFID2)";
32+
#ifdef M5STICK
33+
else if (bruceConfig.rfidModule == PN532_I2C_MODULE) txt += " (PN532-G33)";
34+
else if (bruceConfig.rfidModule == PN532_I2C_SPI_MODULE) txt += " (PN532-G36)";
35+
#else
3236
else if (bruceConfig.rfidModule == PN532_I2C_MODULE) txt += " (PN532-I2C)";
37+
#endif
3338
else if (bruceConfig.rfidModule == PN532_SPI_MODULE) txt += " (PN532-SPI)";
3439
else if (bruceConfig.rfidModule == RC522_SPI_MODULE) txt += " (RC522-SPI)";
3540
loopOptions(options, MENU_TYPE_SUBMENU, txt.c_str());

src/core/settings.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,16 +592,25 @@ void setRFIDModuleMenu() {
592592
options = {
593593
{"M5 RFID2",
594594
[=]() { bruceConfig.setRfidModule(M5_RFID2_MODULE); },
595-
bruceConfig.rfidModule == M5_RFID2_MODULE },
595+
bruceConfig.rfidModule == M5_RFID2_MODULE },
596+
#ifdef M5STICK
597+
{"PN532 I2C G33",
598+
[=]() { bruceConfig.setRfidModule(PN532_I2C_MODULE); },
599+
bruceConfig.rfidModule == PN532_I2C_MODULE },
600+
{"PN532 I2C G36",
601+
[=]() { bruceConfig.setRfidModule(PN532_I2C_SPI_MODULE); },
602+
bruceConfig.rfidModule == PN532_I2C_SPI_MODULE},
603+
#else
596604
{"PN532 on I2C",
597605
[=]() { bruceConfig.setRfidModule(PN532_I2C_MODULE); },
598606
bruceConfig.rfidModule == PN532_I2C_MODULE},
607+
#endif
599608
{"PN532 on SPI",
600609
[=]() { bruceConfig.setRfidModule(PN532_SPI_MODULE); },
601-
bruceConfig.rfidModule == PN532_SPI_MODULE},
610+
bruceConfig.rfidModule == PN532_SPI_MODULE },
602611
{"RC522 on SPI",
603612
[=]() { bruceConfig.setRfidModule(RC522_SPI_MODULE); },
604-
bruceConfig.rfidModule == RC522_SPI_MODULE},
613+
bruceConfig.rfidModule == RC522_SPI_MODULE },
605614
};
606615
loopOptions(options, bruceConfig.rfidModule);
607616
}

src/modules/rfid/PN532.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,37 @@
1212
#include "core/sd_functions.h"
1313
#include "core/type_convertion.h"
1414

15-
PN532::PN532(bool use_i2c) {
16-
_use_i2c = use_i2c;
17-
if (use_i2c) nfc.setInterface(GROVE_SDA, GROVE_SCL);
15+
#ifndef GPIO_NUM_25
16+
#define GPIO_NUM_25 25
17+
#endif
18+
19+
PN532::PN532(CONNECTION_TYPE connection_type) {
20+
_connection_type = connection_type;
21+
_use_i2c = (connection_type == I2C || connection_type == I2C_SPI);
22+
if (connection_type == CONNECTION_TYPE::I2C) nfc.setInterface(GROVE_SDA, GROVE_SCL);
23+
#ifdef M5STICK
24+
else if (connection_type == CONNECTION_TYPE::I2C_SPI) nfc.setInterface(GPIO_NUM_26, GPIO_NUM_25);
25+
#endif
1826
else nfc.setInterface(SPI_SCK_PIN, SPI_MISO_PIN, SPI_MOSI_PIN, SPI_SS_PIN);
1927
}
2028

2129
bool PN532::begin() {
22-
bool i2c_check = check_i2c_address(PN532_I2C_ADDRESS);
30+
#ifdef M5STICK
31+
if (_connection_type == CONNECTION_TYPE::I2C_SPI) {
32+
Wire.begin(GPIO_NUM_26, GPIO_NUM_25);
33+
} else if (_connection_type == CONNECTION_TYPE::I2C) {
34+
Wire.begin(GROVE_SDA, GROVE_SCL);
35+
}
36+
#else
37+
Wire.begin(GROVE_SDA, GROVE_SCL);
38+
#endif
39+
40+
bool i2c_check = true;
41+
if (_use_i2c) {
42+
Wire.beginTransmission(PN532_I2C_ADDRESS);
43+
int error = Wire.endTransmission();
44+
i2c_check = (error == 0);
45+
}
2346

2447
nfc.begin();
2548

src/modules/rfid/PN532.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
class PN532 : public RFIDInterface {
1313
public:
14+
enum CONNECTION_TYPE { I2C = 1, I2C_SPI = 2, SPI = 3 };
1415
enum PICC_Type {
1516
PICC_TYPE_MIFARE_MINI = 0x09, // MIFARE Classic protocol, 320 bytes
1617
PICC_TYPE_MIFARE_1K = 0x08, // MIFARE Classic protocol, 1KB
@@ -30,7 +31,7 @@ class PN532 : public RFIDInterface {
3031
/////////////////////////////////////////////////////////////////////////////////////
3132
// Constructor
3233
/////////////////////////////////////////////////////////////////////////////////////
33-
PN532(bool use_i2c = true);
34+
PN532(CONNECTION_TYPE connection_type = I2C);
3435

3536
/////////////////////////////////////////////////////////////////////////////////////
3637
// Life Cycle
@@ -50,6 +51,7 @@ class PN532 : public RFIDInterface {
5051

5152
private:
5253
bool _use_i2c;
54+
CONNECTION_TYPE _connection_type;
5355

5456
/////////////////////////////////////////////////////////////////////////////////////
5557
// Converters

src/modules/rfid/tag_o_matic.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@ TagOMatic::~TagOMatic() {
4040

4141
void TagOMatic::set_rfid_module() {
4242
switch (bruceConfig.rfidModule) {
43-
case PN532_I2C_MODULE: _rfid = new PN532(); break;
44-
case PN532_SPI_MODULE: _rfid = new PN532(false); break;
43+
case PN532_I2C_MODULE: _rfid = new PN532(PN532::CONNECTION_TYPE::I2C); break;
44+
#ifdef M5STICK
45+
case PN532_I2C_SPI_MODULE: _rfid = new PN532(PN532::CONNECTION_TYPE::I2C_SPI); break;
46+
#endif
47+
case PN532_SPI_MODULE: _rfid = new PN532(PN532::CONNECTION_TYPE::SPI); break;
4548
case RC522_SPI_MODULE: _rfid = new RFID2(false); break;
4649
case M5_RFID2_MODULE:
4750
default: _rfid = new RFID2(); break;

0 commit comments

Comments
 (0)