Faits: A. X._, ressortissant serbe né en 1978, a été arrêté le 14 juin 2012 à Lausanne et mis en prévention d'escroquerie par métier et faux dans les certificats. Il lui est reproché d'avoir souscrit sept abonnements de téléphonie mobile sous une fausse identité en présentant son ancien permis C falsifié, et d'avoir ainsi obtenu des téléphones portables qu'il aurait ensuite revendus. Le 15 juin 2012, le Tribunal des mesures de contrainte du canton de Vaud a ordonné sa mise en détention provisoire pour trois mois au plus, compte tenu des risques de fuite et de réitération. B. Par arrêt du 28 juin 2012, la Chambre des recours pénale du Tribunal cantonal vaudois a rejeté les recours formés contre cette décision par le prévenu et par son avocat d'office. L'intéressé avait agi à sept reprises entre le 3 mai et le 9 juin 2012, et avait commis deux nouvelles tentatives le 11 juin 2012. Il avait été condamné sept fois depuis 2001 (la dernière fois le 18 juillet 2011 pour vol, escroquerie par métier et faux dans les titres), pour un total de cinq ans de privation de liberté. Le risque de récidive était élevé. Par ailleurs, il se trouvait en situation illégale et sans attaches suffisantes en Suisse; il avait déclaré au Procureur qu'il désirait quitter la Suisse, sachant qu'il encourait une peine ferme. Le risque de fuite était donc également avéré, les mesures de substitution proposées étant insuffisantes. Le principe de la proportionnalité était respecté, la peine minimale pour une escroquerie par métier étant de 90 jours-amende. C. Par acte du 3 août 2012, X._ forme un recours en matière pénale par lequel il demande la réforme de l'arrêt cantonal et sa libération immédiate, éventuellement moyennant des mesures de substitution. Il requiert également l'assistance judiciaire. La chambre des recours se réfère à sa décision. Le Ministère public conclut au rejet du recours. Le recourant a renoncé à déposer des observations complémentaires.