Given the print below the LoRa u.FL connector on your first image and the print on the backside of the board, that would be a WiFi LoRa 32 V3.1 or in other terms V3 (1.1).
The relevant documents can be found here, as long as you pick any .1 version.
Regarding PWM: the ESP32-S3 can drive up to 8 PWM pins on any pin that is output-capable which are all of the listed pins, as long as you make sure they’re not already in use for something else.
Regarding LoRaWAN: I recommend using RadioLib. To get a DevEUI, you can let TTN generate one for you to be sure, I’m not competely sure the Heltec-provided EUIs are officially unique.
Alternatively, you can flash the following sketch, which is based on Heltec’s package (newest version whatever it is). It will print out the ChipID which you must input on Heltec’s website, and in turn that will give you a license which you can copy straight into the serial monitor, press enter and it will print out a DevEUI for you.
#include "LoRaWan_APP.h"
uint32_t license[4]={ 0 };
// these keys are random stuff, no need to change them for this sketch
/* OTAA para*/
uint8_t devEui[] = { 0x22, 0x32, 0x33, 0x00, 0x00, 0x88, 0x88, 0x02 };
uint8_t appEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t appKey[] = { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 };
/* ABP para*/
uint8_t nwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };
uint8_t appSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 };
uint32_t devAddr = ( uint32_t )0x007e6ae1;
/*LoraWan channelsmask, default channels 0-7*/
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;
DeviceClass_t loraWanClass = CLASS_A;
uint32_t appTxDutyCycle = 150000;
bool overTheAirActivation = true;
bool loraWanAdr = true;
bool isTxConfirmed = true;
uint8_t appPort = 2;
uint8_t confirmedNbTrials = 4;
void parseLicense(String input) {
int start = 0;
int end = input.indexOf(',');
for (int i = 0; i < 4; i++) {
if (end == -1) {
end = input.length();
}
String hexString = input.substring(start, end);
license[i] = strtoul(hexString.c_str(), NULL, 16);
start = end + 1;
end = input.indexOf(',', start);
}
}
void setup() {
Serial.begin(115200);
uint64_t chipId = ESP.getEfuseMac();
Serial.printf("%04X",(uint16_t)(chipId>>32));//print High 2bytes
Serial.printf("%08X\r\n",(uint32_t)chipId);//print Low 4bytes.
while(!Serial.available());
String input = Serial.readStringUntil('\n');
parseLicense(input);
Mcu.setlicense(license,HELTEC_BOARD);
Mcu.begin(HELTEC_BOARD,SLOW_CLK_TPYE);
LoRaWAN.generateDeveuiByChipID();
for(int i = 0; i < 8; i++) {
Serial.printf("%02X", devEui[i]);
}
}
void loop() {
}
You don’t need to change anything for that sketch, they are just some remnants from the usual examples that are required to compile but not used.