Я пытаюсь сделать HTTP-запрос GET с данными, считанными из тега MIFARE NFC в формате NDEF.Мне не удается преобразовать данные байтового массива из тега в формат, который работает с функцией клиента Ethernet print()
.
Аппаратная настройка - это Arduino Uno с seeedstudio NFC Shield и Arduino ethernet shield.Я использую Ethernet, PN532 и библиотеку NfcAdapter.
Я пробовал несколько типов преобразования, используя char *
и char[]
вместо объекта String, но безуспешно.
Чтобы точно определить проблему, я выбрал случай, когда Serial.print()
дает ожидаемый результат, а client.print()
- нет.
Код основан на примере библиотеки PN532 NDEF 'ReadTagExtended' .
void loop(void)
{
if (nfc.tagPresent()) // Do an NFC scan to see if an NFC tag is present
{
NfcTag tag = nfc.read(); // read the NFC tag
if (tag.hasNdefMessage())
{
NdefMessage message = tag.getNdefMessage();
for (int i = 0; i < message.getRecordCount(); i++)
{
NdefRecord record = message.getRecord(i);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
String tag_content = "";
for(int i = 0; i<payloadLength; i++) {
tag_content += (char)payload[i];
}
Serial.println(tag_content); // prints the correct string
request(tag_content);
}
}
}
}
void request(String data) {
EthernetClient client;
// if you get a connection, report back via serial:
if (client.connect(remote, 8080)) {
client.print("GET /subaddress");
client.print("?data=");
client.print(data); // unfortunately empty
client.println();
client.println();
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println(" OK");
delay(100);
} else {
Serial.println("ERR");
delay(100);
}
}
При указанной выше настройке я получаю ожидаемый результат, используя Serial.println()
.Тем не менее, в (успешном) запросе data
пусто.
Из комментариев (суммировано):
Печать типа записи (record.getType()
) дает букву «U».payloadLength
равно 4 для тега, содержащего строку «def».