Skip to content

Commit 8e00ba7

Browse files
committed
Fixes to require dependency on M5Unit-NFC
1 parent 1fbc43d commit 8e00ba7

25 files changed

Lines changed: 912 additions & 3017 deletions

README.md

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -18,73 +18,13 @@ RFID2 is a radio frequency identification unit. Built-in WS1850S chip, working f
1818
- [M5UnitUnified](https://github.com/m5stack/M5UnitUnified)
1919
- [M5Utility](https://github.com/m5stack/M5Utility)
2020
- [M5HAL](https://github.com/m5stack/M5HAL)
21+
- [M5Unit-NFC](https://github.com/m5stack/M5Unit-NFC)
2122

2223
## License
2324

2425
- [M5Unit-RFID -MIT](LICENSE)
2526

2627

27-
## Feature
28-
- Detection with collision resolution when multiple devices are in the detection range
29-
- Identify MIFARE and NTAG devices in detail
30-
- Support NFC-A Type-2 NDEF Read/Write
31-
32-
33-
## Usage
34-
35-
```cpp
36-
#include <M5Unified.h>
37-
#include <M5UnitUnified.h>
38-
#include <M5UnitUnifiedRFID.h>
39-
namespace {
40-
m5::unit::UnitUnified Units;
41-
m5::unit::UnitRFID2 unit;
42-
} // namespace
43-
44-
using namespace m5::rfid;
45-
46-
void setup()
47-
{
48-
M5.begin();
49-
50-
auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda);
51-
auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl);
52-
M5_LOGI("getPin: SDA:%u SCL:%u", pin_num_sda, pin_num_scl);
53-
Wire.begin(pin_num_sda, pin_num_scl, 400 * 1000U);
54-
55-
if (!Units.add(unit, Wire) || !Units.begin()) {
56-
M5_LOGE("Failed to begin");
57-
while (true) {
58-
m5::utility::delay(10000);
59-
}
60-
}
61-
M5_LOGI("M5UnitUnified has been begun");
62-
M5_LOGI("%s", Units.debugInfo().c_str());
63-
M5_LOGI("Please put the devices...");
64-
}
65-
66-
void loop()
67-
{
68-
M5.update();
69-
Units.update();
70-
auto touch = M5.Touch.getDetail();
71-
if (M5.BtnA.wasClicked() || touch.wasClicked()) {
72-
if (unit.detectDevice()) {
73-
UID uid{};
74-
if (unit.activateDevice(uid)) {
75-
M5_LOGI("UID:%s %s", uid.uidAsString().c_str(), uid.typeAsString().c_str());
76-
77-
//
78-
// Use any API...
79-
//
80-
81-
unit.deactivateDevice(); // Once activated, clean up with deactivate.
82-
}
83-
}
84-
}
85-
}
86-
```
87-
8828
## Examples
8929
See also [examples/UnitUnified](examples/UnitUnified)
9030

examples/UnitUnified/DetectDevices/main/DetectDevices.cpp

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@
55
*/
66
/*
77
Example using M5UnitUnified for UnitRFID2
8-
Detect RFID devices
8+
Detect NFC-A devices
99
*/
1010
#include <M5Unified.h>
1111
#include <M5UnitUnified.h>
1212
#include <M5UnitUnifiedRFID.h>
13+
#include <M5UnitUnifiedNFC.h>
1314
#include <M5Utility.h>
1415
#include <vector>
1516

1617
namespace {
1718
auto& lcd = M5.Display;
1819
m5::unit::UnitUnified Units;
1920
m5::unit::UnitRFID2 unit;
21+
m5::unit::nfc::NFCLayerA nfc_a{unit};
2022

2123
} // namespace
2224

23-
using namespace m5::rfid;
25+
using namespace m5::nfc::a;
2426

2527
void setup()
2628
{
@@ -51,43 +53,29 @@ void setup()
5153
} else {
5254
lcd.setFont(&fonts::Font2);
5355
}
54-
lcd.clear(0);
55-
lcd.setCursor(8, 0);
56-
lcd.printf("Please put the devices...");
57-
M5.Log.printf("Please put the devices...\n");
56+
lcd.fillScreen(0);
57+
lcd.setCursor(0, 0);
5858
}
5959

6060
void loop()
6161
{
6262
M5.update();
63+
auto touch = M5.Touch.getDetail();
6364
Units.update();
6465

6566
std::vector<UID> devices;
66-
// Detect new devices?
67-
while (unit.detectIdleDevice()) {
68-
// Store UID
69-
UID uid{};
70-
if (unit.activateDevice(uid)) {
71-
devices.push_back(uid);
72-
unit.deactivateDevice();
73-
} else {
74-
M5_LOGE("Failed to activate");
75-
}
76-
}
77-
// display / logging
78-
if (!devices.empty()) {
79-
M5.Log.printf(">>--------------\n");
80-
M5.Speaker.tone(1000, 20);
81-
lcd.fillRect(0, lcd.fontHeight(), lcd.width(), lcd.height() - lcd.fontHeight(), 0);
82-
83-
uint32_t idx{1};
84-
for (auto&& uid : devices) {
85-
M5.Log.printf("UID:%s %s\n", uid.uidAsString().c_str(), uid.typeAsString().c_str());
86-
lcd.setCursor(8, lcd.fontHeight() * idx);
87-
lcd.printf("%s:%s", uid.uidAsString().c_str(), uid.typeAsString().c_str());
67+
if (nfc_a.detect(devices)) {
68+
M5.Speaker.tone(3000, 10);
69+
lcd.fillRect(0, 0, lcd.width(), lcd.height());
70+
lcd.setCursor(0, 0);
71+
M5.Log.printf("Devices: %zu\n", devices.size());
72+
lcd.printf("Devices: %zu\n", devices.size());
73+
uint32_t idx{};
74+
for (auto&& u : devices) {
75+
M5.Log.printf("[%2u]:UID:<%s> %s\n", idx, u.uidAsString().c_str(), u.typeAsString().c_str());
76+
lcd.printf("[%2u]:UID:<%s> %s\n", idx, u.uidAsString().c_str(), u.typeAsString().c_str());
8877
++idx;
8978
}
90-
M5.Log.printf("<<--------------\n");
79+
nfc_a.deactivate();
9180
}
92-
m5::utility::delay(1);
9381
}

examples/UnitUnified/Dump/main/Dump.cpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010
#include <M5Unified.h>
1111
#include <M5UnitUnified.h>
1212
#include <M5UnitUnifiedRFID.h>
13+
#include <M5UnitUnifiedNFC.h>
14+
#include <M5Utility.h>
15+
#include <vector>
1316

1417
namespace {
1518
auto& lcd = M5.Display;
1619
m5::unit::UnitUnified Units;
1720
m5::unit::UnitRFID2 unit;
21+
m5::unit::nfc::NFCLayerA nfc_a{unit};
22+
1823
} // namespace
1924

20-
using namespace m5::rfid;
25+
using namespace m5::nfc::a;
2126

2227
void setup()
2328
{
@@ -26,6 +31,7 @@ void setup()
2631
auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda);
2732
auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl);
2833
M5_LOGI("getPin: SDA:%u SCL:%u", pin_num_sda, pin_num_scl);
34+
Wire.end();
2935
Wire.begin(pin_num_sda, pin_num_scl, 100 * 1000U);
3036

3137
if (!Units.add(unit, Wire) || !Units.begin()) {
@@ -47,27 +53,31 @@ void setup()
4753
} else {
4854
lcd.setFont(&fonts::Font2);
4955
}
50-
lcd.clear(0);
51-
lcd.setCursor(8, 0);
52-
lcd.printf("Please put the devices...");
53-
M5_LOGI("Please put the devices...");
56+
lcd.fillScreen(0);
57+
lcd.setCursor(0, 0);
58+
lcd.printf("Please put the device and click A");
59+
M5.Log.printf("Please put the device and click A\n");
5460
}
5561

5662
void loop()
5763
{
5864
M5.update();
59-
Units.update();
6065
auto touch = M5.Touch.getDetail();
66+
Units.update();
6167

6268
if (M5.BtnA.wasClicked() || touch.wasClicked()) {
63-
if (unit.detectDevice()) {
64-
UID uid{};
65-
if (unit.activateDevice(uid)) {
66-
M5.Speaker.tone(1000, 20);
67-
M5.Log.printf("UID:%s %s\n", uid.uidAsString().c_str(), uid.typeAsString().c_str());
68-
unit.dumpDevice(uid); // Using defaukt keyA if Classic
69-
unit.deactivateDevice();
70-
}
69+
lcd.fillRect(0, lcd.fontHeight(), lcd.width(), lcd.height() - lcd.fontHeight());
70+
std::vector<UID> devices;
71+
if (nfc_a.detect(devices)) {
72+
lcd.setCursor(0, lcd.fontHeight());
73+
// If multiple occurrences are detected, only the first one detected
74+
auto& uid = devices.front();
75+
nfc_a.activate(uid);
76+
M5.Log.printf("==== Dump %s %s ====\n", uid.uidAsString().c_str(), uid.typeAsString().c_str());
77+
nfc_a.dump();
78+
nfc_a.deactivate();
79+
} else {
80+
M5.Log.printf("No devices\n");
7181
}
7282
}
7383
}

0 commit comments

Comments
 (0)