Fatti: A. Con contratto del 4 maggio 2009 A.A._ ha incaricato l'architetto B._ di progettare e dirigere i lavori di sopraelevazione di una casa ad Ascona per un onorario preventivato di fr. 60'000.--. I lavori hanno subito dei ritardi e i rapporti tra le parti si sono incrinati quando B._ ha chiesto che gli fossero rimborsati fr. 7'800.-- da lui anticipati per la locazione di un appartamento nel quale, a causa del ritardo nella consegna, aveva alloggiato provvisoriamente la famiglia A._. Quando l'architetto ha comunicato che avrebbe sospeso le sue prestazioni fino al pagamento, il cliente, il 4 febbraio 2011, ha rescisso il mandato per inadempienza. L'architetto ha in seguito emesso diverse fatture per saldo d'onorario e prestazioni supplementari; ha inoltre sollecitato il rimborso della pigione, per un credito totale di fr. 34'448.80. B. Con petizione del 9 marzo 2012 alla Pretura della Giurisdizione di Locarno-CittàB._ ha chiesto che A.A._ fosse condannato a pagargli la predetta somma e che fossero rigettate definitivamente le opposizioni a tre precetti esecutivi fatti notificare nel frattempo. Con la risposta il convenuto ha chiesto l'annullamento di uno dei precetti esecutivi, notificato a lui e a sua moglie, e la reiezione della petizione, ponendo in compensazione diverse sue contropretese. Con sentenza dell'11 marzo 2016 il Pretore aggiunto della Giurisdizio ne di Locarno-Città ha dichiarato irricevibile la domanda del convenuto di annullamento del precetto esecutivo e respinto la petizione dell'attore. La sentenza ha riconosciuto all'architetto un credito di fr. 31'694.80, che risultava tuttavia compensato da contropretese del convenuto per un totale di fr. 38'693.40. La decisione di prima istanza è stata riformata dalla sentenza del 20settembre 2017 della II Camera civile del Tribunale di appello del Canto ne Ticino, che ha condannato A.A._ a pagare fr. 31'694.80, non riconoscendo nessuna delle contropretese messe in compensazione. C. A.A._ insorge davanti al Tribunale federale con ricorso in materia civile del 23 ottobre 2017; chiede l'annullamento della sentenza cantonale e la conferma di quella del Pretore aggiunto. B._ propone di respingere il ricorso. L'autorità cantonale non ha preso posizione.