You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.1 KiB
Arduino
100 lines
2.1 KiB
Arduino
7 months ago
|
#include <LoRa.h>
|
||
|
#include <Wire.h>
|
||
|
#include "boards.h"
|
||
|
#include <PN532_I2C.h>
|
||
|
#include <PN532.h>
|
||
|
#include <NfcAdapter.h>
|
||
|
|
||
|
PN532_I2C pn532_i2c(Wire);
|
||
|
NfcAdapter nfc = NfcAdapter(pn532_i2c);
|
||
|
String tagId = "None";
|
||
|
String cleanString = "";
|
||
|
|
||
|
void setup()
|
||
|
{
|
||
|
Serial.begin(9600);
|
||
|
Serial.println("System initialized");
|
||
|
nfc.begin();
|
||
|
|
||
|
initLoRa();
|
||
|
}
|
||
|
|
||
|
void loop()
|
||
|
{
|
||
|
readNFC();
|
||
|
if (!cleanString.isEmpty()) {
|
||
|
sendLoRaData(cleanString);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void initLoRa()
|
||
|
{
|
||
|
Serial.println("Initializing LoRa...");
|
||
|
LoRa.setPins(RADIO_CS_PIN, RADIO_RST_PIN, RADIO_DI0_PIN);
|
||
|
if (!LoRa.begin(LoRa_frequency))
|
||
|
{
|
||
|
Serial.println("Starting LoRa failed!");
|
||
|
while (1);
|
||
|
}
|
||
|
Serial.println("LoRa initialized successfully!");
|
||
|
}
|
||
|
|
||
|
void sendLoRaData(String data)
|
||
|
{
|
||
|
Serial.print("Sending LoRa data: ");
|
||
|
Serial.println(data);
|
||
|
|
||
|
LoRa.beginPacket();
|
||
|
LoRa.print("3 " + data);
|
||
|
LoRa.endPacket();
|
||
|
}
|
||
|
|
||
|
void readNFC()
|
||
|
{
|
||
|
if (nfc.tagPresent())
|
||
|
{
|
||
|
NfcTag tag = nfc.read();
|
||
|
tagId = tag.getUidString();
|
||
|
Serial.print("Tag ID: ");
|
||
|
Serial.println(tagId);
|
||
|
|
||
|
if (tag.hasNdefMessage())
|
||
|
{
|
||
|
NdefMessage message = tag.getNdefMessage();
|
||
|
int recordCount = message.getRecordCount();
|
||
|
Serial.print("Number of NDEF records: ");
|
||
|
Serial.println(recordCount);
|
||
|
|
||
|
for (int i = 0; i < recordCount; i++)
|
||
|
{
|
||
|
NdefRecord record = message.getRecord(i);
|
||
|
int payloadLength = record.getPayloadLength();
|
||
|
byte payload[payloadLength];
|
||
|
record.getPayload(payload);
|
||
|
|
||
|
String payloadAsString = "";
|
||
|
for (int c = 0; c < payloadLength; c++)
|
||
|
{
|
||
|
payloadAsString += String((char)payload[c]);
|
||
|
}
|
||
|
cleanString = payloadAsString;
|
||
|
cleanString.remove(0, 3);
|
||
|
Serial.print("Payload: ");
|
||
|
Serial.println(cleanString);
|
||
|
|
||
|
String uid = record.getId();
|
||
|
if (uid != "")
|
||
|
{
|
||
|
Serial.print("Record ID: ");
|
||
|
Serial.println(uid);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Serial.println("No NDEF message found on the tag.");
|
||
|
}
|
||
|
delay(2000);
|
||
|
}
|
||
|
}
|