提问人:Andrew Taylor 提问时间:9/22/2023 最后编辑:Christoph RackwitzAndrew Taylor 更新时间:9/30/2023 访问量:123
PN532 RFID with ESP32 (ESP-IDF) 将 uint8_t UID 传递给字符串
PN532 RFID with ESP32 (ESP-IDF) Passing uint8_t UID to a string
问:
我正在尝试使用 esp32 的 esp-idf 框架在 platformio 中编写一个相当基本的程序。我有主要的工作,但我正在为我认为非常基本的东西而苦苦挣扎!
我正在使用 pn532 库通过 SPI 与 RFID 读取器进行通信。这真的很有效。我可以让它将 UID 输出到日志中。我正在努力做的是用那个 UID 做任何事情。
uint8_t uid[] = {0, 0, 0, 0, 0, 0, 0}; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// char myStr[] = "hello";
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = pn532_readPassiveTargetID(&nfc, PN532_MIFARE_ISO14443A, uid, &uidLength, 0);
if (success)
{
// Display some basic information about the card
ESP_LOGI(TAG, "Found an ISO14443A card");
ESP_LOGI(TAG, "UID Length: %d bytes", uidLength);
ESP_LOGI(TAG, "UID Value:");
esp_log_buffer_hexdump_internal(TAG, uid, uidLength, ESP_LOG_INFO);
上面的代码来自库示例。它将 UID 存储在uint8_t缓冲区中,这很好。但是如何将此 UID 值用作字符串呢?
我期待一些类似于uid的东西。ToString(),但这不存在。我是 esp-idf 的新手,所以请温柔一点!我尝试过搜索,我尝试过各种方法,例如转换器(uint8t uid),但我不确定如何正确使用它,因为我无法让它工作。我发现了 nul 终结器,但这些到底是什么,我该如何使用它们?
现在,我只是尝试在oled显示屏上显示UID(作为字符串)。但最终我想将其传递给 RestfulAPI 以对数据库表进行查找。我在Arduino IDE中一切正常,但我正在努力改进它!
感谢您的帮助!
安德鲁
答:
0赞
Andrew Taylor
9/28/2023
#1
好的,我不确定这是否是正确的方法。但经过一番摆弄,我想出了这个。
我也不欣赏uint8_t是一个数组。
我设法使用以下命令将数据输出为字符串:
ESP_LOGI(TAG, "STRING UID NUMBER IS %x-%x-%x-%x", uid[0], uid[1], uid[2], uid[3]);
这是正确的吗?或者有更好的方法来实现这一目标?
我希望现在我可以使用这个值与sql DB中的值进行比较。但这必须等到我有更多时间!:)
谢谢 安德鲁
评论
0赞
hcheung
9/28/2023
拿起一本关于c的书读一读。了解标准库(如 stdio.h)附带的数组、C 字符串和函数,特别是 sprintf(),然后尝试类似 (或 make a for..循环循环遍历 uid 数组),其中 str 被声明并初始化为 .然后,您可以使用带有 的 printf() 打印输出。sprintf(str, "%02X-%02X-%02X-%02X", uid[0], uid[1], uid[2], uid[3]);
char str[12]={0};
printf("%s\n", str);
评论
esp-idf
uid.ToString()
uid
ToString()