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
2635using namespace m5 ::nfc;
@@ -36,6 +45,9 @@ m5::unit::UnitNFC unit{}; // I2C
3645#elif defined(USING_CAP_CC1101)
3746#pragma message "Choose CapCC1101NFC"
3847m5::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