Как сохранить номер RFID-метки в строке

ethernet cpp

Я хочу отправить номер RFID-метки на страницу PHP. До сих пор я отправлял фиксированную строку на php, и это работало, теперь я не получаю данные в строке, когда сканирую RFID-метку. Я хочу сохранить каждый номер RFID-метки в строке при ее сканировании, чтобы я мог отправить его на страницу PHP.

if (rfid.isCard()) {

    String rfid_uid = "";
    if (rfid.readCardSerial()) {
        String rfid_uid = "";
        for (int i = 0; i < 4; i++) {
            Serial.print(rfid.serNum[i], HEX);
            rfid_uid = rfid.serNum[i];
        }

        Serial.println();
    }
    //delay(7000);
    Serial.print("User ID \n");
    Serial.println(rfid_uid);
    make_request(rfid_uid);
}

Это путь к странице php

         String method = "GET /ethernet/data.php?rfid_uid=";

, 👍0


2 ответа


Лучший ответ:

2
String rfid_uid = "";
if (rfid.readCardSerial()) {
    String rfid_uid = "";
    for (int i = 0; i < 4; i++) {
        Serial.print(rfid.serNum[i], HEX);
        rfid_uid = rfid.serNum[i];
    }

    Serial.println();
}

В этом коде есть несколько проблем:

  • переменная rfid_uid определена дважды, они затмевают друг друга. Внутренняя часть только присваивает значение rfid_uid, указанному внутри оператора if, внешний rfid_uid останется пустым
  • Как вы можете видеть с помощью Serial.print(rfid.serNum[i], HEX);, элемент rfid.serNum[i] является целым числом, которое печатается как шестнадцатеричное. (например, 123 = 7B), в rfid_uid = rfid.serNum[i]; вы, однако, назначаете прямое числовое значение, не преобразуя его в шестнадцатеричное

Если вам нужен серийный номер в виде 4-байтовой шестнадцатеричной строки, попробуйте сделать следующее:

String rfid_uid = "";
if (rfid.readCardSerial()) {
    for (int i = 0; i < 4; i++) {
        String uid_part = String(rfid.serNum[i], HEX); 
        Serial.print(uid_part);
        rfid_uid += uid_part;
    }

    Serial.println();
}
//остальное как прежде

Это должно создать объект String из целого числа в формате HEX и добавить его (используя оператор += к строке rfid_uid). Таким образом, после 4 итераций значение String будет создано и может быть использовано в запросе.

,

0

не используйте строку

char url[64];
sprintf(url, "GET /ethernet/data.php?rfid_uid=%02x%02x%02x%02x", rfid[0], rfid[1], rfid[2], rfid[3]);
,