Faits : A. A._, titulaire d'un diplôme d'électro-mécanicien, a travaillé en qualité de machiniste jusqu'en novembre 2012. Le 19 mars 2014, il s'est annoncé à l'assurance-invalidité, invoquant une arthrose dégénérative, une hernie discale, une infection profonde au pied gauche, ainsi que des problèmes aux poumons. Le docteur B._, médecin au SMR, a admis que l'assuré conservait une capacité de travail entière dans une activité strictement adaptée aux limitations fonctionnelles de protection du dos et du pied gauche (pas de marche prolongée, pas d'utilisation de chaussure de sécurité). Son avis médical du 21 août 2014 reposait sur l'examen de rapports émanant du docteur C._, pneumologue (du 26 mars 2014), de la doctoresse E._, spécialiste en endocrinologie, diabétologie et médecine interne (du 4 mai 2014 et du docteur D._, spécialiste en médecine interne (du 29 avril 2014). Se fondant sur l'appréciation du médecin du SMR, l'Office de l'assurance-invalidité du canton de Genève (ci-après: l'office AI) a rejeté la demande par décision du 29 octobre 2014. B. A._ a déféré cette décision à la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, en concluant à son réexamen. La juridiction cantonale l'a débouté par jugement du 23 mars 2015. C. A._ interjette un recours en matière de droit public contre ce jugement dont il demande l'annulation en concluant principalement au versement d'une rente entière d'invalidité, subsidiairement au renvoi de la cause aux premiers juges. Il sollicite le bénéfice de l'assistance judiciaire.