esc_url( ) won’t use https

esc_url never force the URL to protocol it’s only checking and escaping the passed URL from invalid characters, the $protocols variable is an array of acceptable (white list) protocols not for forcing destination URL.

// Forcing URL to https instead of http

$YOUR_URL = esc_url($YOUR_URL);

if( 'http' == parse_url($YOUR_URL, PHP_URL_SCHEME) ){
    $NEW_URL = str_replace('http://', 'https://', $YOUR_URL); 
}