@Paul, After going through some extensive research online into this issue, it looks like you're dealing with a genuine Simulink compatibility problem rather than something you're doing wrong. The Arduino Nano 33 IoT works fine because it's well-supported, but the BLE Sense has known issues where the service doesn't advertise properly even though it's officially listed as supported hardware. The Rev2 isn't even on the supported list at all as mentioned by @Walter Robertson, so that explains why it fails completely. For the ESP32 boards, there's a documented problem with UUID corruption in the BLE stack integration where characteristics end up with duplicate or random UUIDs regardless of what you define in Simulink. A few things worth trying: double-check your BLE properties configuration in Model Settings under Target hardware resources, make sure the Peripheral Device Name and Peripheral Local Name are explicitly set, and try starting with one of the working example models like arduino_BLE_peripheral to see if basic functionality works before adding your custom characteristics. With ESP32, try limiting the number of characteristics initially since you mentioned it's dependent on how many you define. Some people have had success bypassing the BLE blocks entirely and using MATLAB Function blocks with native Arduino BLE library calls, though that's more work. If nothing works, it might be worth sticking with the IoT boards since they're clearly the most stable option, or consider using BLE Sense boards only in central mode where they seem more reliable. This really does seem like a support package gap that MathWorks needs to address, so submitting feedback through the official channels with your specific setup details would probably help get this fixed in future releases.
Let me know how it goes.