Skip to content

Commit ae6118a

Browse files
committed
Add UnitRFID2 (M5Unit-RFID) support to NFCB examples
1 parent 23783bb commit ae6118a

4 files changed

Lines changed: 63 additions & 14 deletions

File tree

examples/UnitUnified/NFCB/Detect/Detect.ino

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@
44
* SPDX-License-Identifier: MIT
55
*/
66
/*
7-
Example using M5UnitUnified for ST25R3916
7+
Example using M5UnitUnified for M5Unit-NFC/RFID
88
Detect NFC-B PICC
9+
This example is shared with M5Unit-RFID
910
*/
1011
// *************************************************************
1112
// Choose one define symbol to match the unit you are using
1213
// *************************************************************
13-
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101)
14+
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101) && !defined(USING_UNIT_RFID2)
1415
// For UnitNFC
1516
// #define USING_UNIT_NFC
1617
// For CapNFC
1718
// #define USING_CAP_CC1101
19+
// For UnitRFID2
20+
// #define USING_UNIT_RFID2
1821
#endif
1922
#include "main/Detect.cpp"

examples/UnitUnified/NFCB/Detect/main/Detect.cpp

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,32 @@
44
* SPDX-License-Identifier: MIT
55
*/
66
/*
7-
Example using M5UnitUnified for M5Cardputer-ADV with CapCC1101
7+
Example using M5UnitUnified for M5Unit-NFC/RFID
88
Detect NFC-B PICC
9+
This example is shared with M5Unit-RFID
910
*/
1011
#include <M5Unified.h>
1112
#include <M5UnitUnified.h>
1213
#include <M5UnitUnifiedNFC.h>
1314
#include <M5Utility.h>
15+
#include <Wire.h>
16+
#include <M5HAL.hpp> // For NessoN1
1417
#include <vector>
1518

1619
// *************************************************************
1720
// Choose one define symbol to match the unit you are using
1821
// *************************************************************
19-
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101)
22+
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101) && !defined(USING_UNIT_RFID2)
2023
// For UnitNFC
2124
// #define USING_UNIT_NFC
2225
// For CapNFC
2326
// #define USING_CAP_CC1101
27+
// For UnitRFID2
28+
// #define USING_UNIT_RFID2
29+
#endif
30+
31+
#if defined(USING_UNIT_RFID2)
32+
#include <M5UnitUnifiedRFID.h>
2433
#endif
2534

2635
using namespace m5::nfc;
@@ -36,6 +45,9 @@ m5::unit::UnitNFC unit{}; // I2C
3645
#elif defined(USING_CAP_CC1101)
3746
#pragma message "Choose CapCC1101NFC"
3847
m5::unit::CapCC1101NFC unit{}; // CapCC1101 (SPI)
48+
#elif defined(USING_UNIT_RFID2)
49+
#pragma message "Choose UnitRFID2"
50+
m5::unit::UnitRFID2 unit{}; // UnitRFID2 (M5Unit-RFID, WS1850S)
3951
#else
4052
#error Choose unit please!
4153
#endif
@@ -47,14 +59,21 @@ void setup()
4759
M5.begin();
4860
M5.setTouchButtonHeightByRatio(100);
4961

62+
// Select NFC-B mode via config() (applied at begin())
5063
auto cfg = unit.config();
5164
cfg.mode = NFC::B;
5265
unit.config(cfg);
5366

54-
#if defined(USING_UNIT_NFC)
67+
#if defined(USING_UNIT_NFC) || defined(USING_UNIT_RFID2)
68+
// NessoN1: Arduino Wire (I2C_NUM_0) cannot be used for GROVE port.
69+
// Wire is used by M5Unified In_I2C for internal devices.
70+
// NanoC6: Wire.begin() on GROVE pins conflicts with Ex_I2C on the same I2C_NUM_0.
5571
auto board = M5.getBoard();
5672
bool unit_ready{};
57-
// NessoN1: SoftwareI2C too slow for NFC RF timing -> use port_a (Wire) via else branch
73+
#if defined(USING_M5DIAL_BUILTIN_WS1850S)
74+
M5_LOGI("Using M5.In_I2C for builtin WS1850S");
75+
unit_ready = Units.add(unit, M5.In_I2C) && Units.begin();
76+
#else
5877
if (board == m5::board_t::board_M5NanoC6) {
5978
M5_LOGI("Using M5.Ex_I2C");
6079
unit_ready = Units.add(unit, M5.Ex_I2C) && Units.begin();
@@ -66,6 +85,7 @@ void setup()
6685
Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U);
6786
unit_ready = Units.add(unit, Wire) && Units.begin();
6887
}
88+
#endif // USING_M5DIAL_BUILTIN_WS1850S
6989
if (!unit_ready) {
7090
M5_LOGE("Failed to begin");
7191
lcd.fillScreen(TFT_RED);
@@ -91,6 +111,7 @@ void setup()
91111
}
92112
}
93113
#endif
114+
94115
M5_LOGI("M5UnitUnified initialized");
95116
M5_LOGI("%s", Units.debugInfo().c_str());
96117

examples/UnitUnified/NFCB/JapanIDCard/JapanIDCard.ino

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@
44
* SPDX-License-Identifier: MIT
55
*/
66
/*
7-
Example using M5UnitUnified for ST25R3916
8-
JapanIDCard example
7+
Example using M5UnitUnified for M5Unit-NFC/RFID
8+
JapanIDCard example (read Mynumber Ticket Information Input Assistant AP)
9+
This example is shared with M5Unit-RFID
910
*/
1011
// *************************************************************
1112
// Choose one define symbol to match the unit you are using
1213
// *************************************************************
13-
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101)
14+
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101) && !defined(USING_UNIT_RFID2)
1415
// For UnitNFC
1516
// #define USING_UNIT_NFC
1617
// For CapNFC
1718
// #define USING_CAP_CC1101
19+
// For UnitRFID2
20+
// #define USING_UNIT_RFID2
1821
#endif
1922
#include "main/JapanIDCard.cpp"

examples/UnitUnified/NFCB/JapanIDCard/main/JapanIDCard.cpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,32 @@
44
* SPDX-License-Identifier: MIT
55
*/
66
/*
7-
Example using M5UnitUnified for ST25R3916
8-
JapanIDCard example
7+
Example using M5UnitUnified for M5Unit-NFC/RFID
8+
JapanIDCard example (read Mynumber Ticket Information Input Assistant AP)
9+
This example is shared with M5Unit-RFID
910
*/
1011
#include <M5Unified.h>
1112
#include <M5UnitUnified.h>
1213
#include <M5UnitUnifiedNFC.h>
1314
#include <M5Utility.h>
15+
#include <Wire.h>
16+
#include <M5HAL.hpp> // For NessoN1
1417
#include <vector>
1518

1619
// *************************************************************
1720
// Choose one define symbol to match the unit you are using
1821
// *************************************************************
19-
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101)
22+
#if !defined(USING_UNIT_NFC) && !defined(USING_CAP_CC1101) && !defined(USING_UNIT_RFID2)
2023
// For UnitNFC
2124
// #define USING_UNIT_NFC
2225
// For CapNFC
2326
// #define USING_CAP_CC1101
27+
// For UnitRFID2
28+
// #define USING_UNIT_RFID2
29+
#endif
30+
31+
#if defined(USING_UNIT_RFID2)
32+
#include <M5UnitUnifiedRFID.h>
2433
#endif
2534

2635
using namespace m5::nfc;
@@ -36,6 +45,9 @@ m5::unit::UnitNFC unit{}; // I2C
3645
#elif defined(USING_CAP_CC1101)
3746
#pragma message "Choose CapCC1101NFC"
3847
m5::unit::CapCC1101NFC unit{}; // CapCC1101 (SPI)
48+
#elif defined(USING_UNIT_RFID2)
49+
#pragma message "Choose UnitRFID2"
50+
m5::unit::UnitRFID2 unit{}; // UnitRFID2 (M5Unit-RFID, WS1850S)
3951
#else
4052
#error Choose unit please!
4153
#endif
@@ -80,6 +92,7 @@ void dump()
8092
M5_LOGE("Failed to readBinary");
8193
return;
8294
}
95+
M5_LOGI("readBinary size = %u", buf.empty() ? 0 : buf[0]);
8396
// buf[0] == size
8497
if (!fs.readBinary(buf, 0, buf[0])) {
8598
M5_LOGE("Failed to readBinary");
@@ -95,14 +108,21 @@ void setup()
95108
M5.begin();
96109
M5.setTouchButtonHeightByRatio(100);
97110

111+
// Select NFC-B mode via config() (applied at begin())
98112
auto cfg = unit.config();
99113
cfg.mode = NFC::B;
100114
unit.config(cfg);
101115

102-
#if defined(USING_UNIT_NFC)
116+
#if defined(USING_UNIT_NFC) || defined(USING_UNIT_RFID2)
117+
// NessoN1: Arduino Wire (I2C_NUM_0) cannot be used for GROVE port.
118+
// Wire is used by M5Unified In_I2C for internal devices.
119+
// NanoC6: Wire.begin() on GROVE pins conflicts with Ex_I2C on the same I2C_NUM_0.
103120
auto board = M5.getBoard();
104121
bool unit_ready{};
105-
// NessoN1: SoftwareI2C too slow for NFC RF timing -> use port_a (Wire) via else branch
122+
#if defined(USING_M5DIAL_BUILTIN_WS1850S)
123+
M5_LOGI("Using M5.In_I2C for builtin WS1850S");
124+
unit_ready = Units.add(unit, M5.In_I2C) && Units.begin();
125+
#else
106126
if (board == m5::board_t::board_M5NanoC6) {
107127
M5_LOGI("Using M5.Ex_I2C");
108128
unit_ready = Units.add(unit, M5.Ex_I2C) && Units.begin();
@@ -114,6 +134,7 @@ void setup()
114134
Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U);
115135
unit_ready = Units.add(unit, Wire) && Units.begin();
116136
}
137+
#endif // USING_M5DIAL_BUILTIN_WS1850S
117138
if (!unit_ready) {
118139
M5_LOGE("Failed to begin");
119140
lcd.fillScreen(TFT_RED);
@@ -139,6 +160,7 @@ void setup()
139160
}
140161
}
141162
#endif
163+
142164
M5_LOGI("M5UnitUnified initialized");
143165
M5_LOGI("%s", Units.debugInfo().c_str());
144166

0 commit comments

Comments
 (0)