Вы путаете горячее с зеленым. IDF это SDK, фреймворк на основе которого все разрабатывается для ESP. А IDE это среда для разработки, причем ArduinoIDE использует IDF при написании кода для ESP.Для idf вроде как есть способ, но с иде никак не получается.
Дружище, я прекрасно понимаю о чем говорю. Функции в ядре для есп это оболочка для IDFовских функций, просто не все они реализованы.Вы путаете горячее с зеленым. IDF это SDK, фреймворк на основе которого все разрабатывается для ESP. А IDE это среда для разработки, причем ArduinoIDE использует IDF при написании кода для ESP.
Мне будет достаточно его уникальности, тем более вместе с маком. Ну а про китайские модули я пожалуй промолчу...И да, нет гарантии что uid флеши будет уникальный, или вообще будет при использовании дешевых китайских модулей.
Для однозначной идентификации устройства. Нужно чтобы каждое устройство могло генерировать что-то вроде HWID.Опишите, для чего вам использование uid флеши?
Так что мешает использовать функции idf?просто не все они реализованы
Я так и не разобрался как это сделать. Не могу импортировать idf библиотеки и использовать функции оттуда.Так что мешает использовать функции idf?
Ну во первых его можно поменять в загрузчике (если есть способ считать дефолтный из под ардуиновского ядра было бы здорово), а во вторых мне на днях пришла партия из 30 штук и около 9 имеют полностью идентичный мак, но меняют его если подключены к одной сети.Chipid не уникальный, а вот мак-адрес обязан быть уникальным, поэтому для идентификации лучше использовать его.
Благодарю, очень информативно, есть ли способ прочитать мак из efuse?У флеш памяти нет юида, если ее не по спецзаказу делали.
Под 8266 IDF нет! Идф только под чипы семейства есп32. Маки у точки доступа и клиента различаются, то что зашито вашито ефьюз и есть по умолчанию.
MacID _mac;
_mac.u64 = ESP.getEfuseMac();
Вот тут смотрите: https://docs.espressif.com/projects...ml#_CPPv425esp_efuse_mac_get_defaultP7uint8_tесть ли способ прочитать мак из efuse?
А вообще, на будущее, учитесь с ESP работать не в ArduinoIDE, а в нормальной IDE.esp_err_t esp_efuse_mac_get_default(uint8_t *mac)
Return base MAC address which is factory-programmed by Espressif in EFUSE.
ReturnESP_OK on successParameters
- mac: base MAC address, length: 6 bytes.
#define REG_READ(_r) (*(volatile uint32 *)(_r))
#define DR_REG_EFUSE_BASE 0x3FF00050
#define EFUSE_DATA0_REG (DR_REG_EFUSE_BASE + 0x000)
#define EFUSE_DATA1_REG (DR_REG_EFUSE_BASE + 0x004)
#define EFUSE_DATA2_REG (DR_REG_EFUSE_BASE + 0x008)
#define EFUSE_DATA3_REG (DR_REG_EFUSE_BASE + 0x00C)
#include <ESP8266WiFi.h>
uint64_t getEfuseMac() {
uint32_t efuse[4];
uint8_t mac[6];
uint64_t out = 0;
efuse[0] = REG_READ(EFUSE_DATA0_REG);
efuse[1] = REG_READ(EFUSE_DATA1_REG);
efuse[2] = REG_READ(EFUSE_DATA2_REG);
efuse[3] = REG_READ(EFUSE_DATA3_REG);
mac[0] = efuse[3] >> 16;
mac[1] = efuse[3] >> 8;
mac[2] = efuse[3];
mac[3] = efuse[1] >> 8;
mac[4] = efuse[1];
mac[5] = efuse[0] >> 24;
memcpy(&out, mac, sizeof(mac));
return out;
}
void setup() {
Serial.begin(115200);
Serial.println(WiFi.macAddress());
Serial.println(String(getEfuseMac(), HEX));
}
void loop() {
}