Convolutional neural network with 1 channel images/1 input channel
The following will be the updated code for grayscale images:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

Why?
Because for an RGB image, there are 3 channels, 'R', 'G' and 'B'
So, the input shape will be (height, width, 3)
But since grayscale has only one channel, the input shape becomes (height, width, 1)
Note that if you are using Keras with Tensorflow backend, then the data_format is channels_last, which means that the input shape should be  (height, width, channels).
Otherwise, if you are using Theano as the backend, then the input shape should be (channels, height, width) since Theano uses the channels_first data format.
Hope this is of help.
Please upvote if helpful.