A camera is a must-have for any Raspberry Pi owner, it’ll allow you to try dozens of interesting new projects. If you’re not confident with finding a compatible camera and how to use it on Raspberry Pi, you’re at the best place to learn everything.
There is a dedicated port on the Raspberry Pi board to plug a compatible camera. Once connected, the next step is to enable it on Raspberry Pi OS, via the configuration tool (raspi-config or the graphic alternative).
In this guide, I’ll show you how to choose the camera, install it and demonstrate a few tips you need to know to enjoy directly your new device.
Hardware prerequisites
Introduction
If you already have a camera, perfect, you’re ready to go. But for those who are here to learn how a camera works on Raspberry Pi before buying it, I will give you a few tips to know before placing the order.
In this part, I’ll show you a few camera models I recommend and how to make your choice. We’ll also quickly look at other useful accessories to enjoy your camera.
Camera models
Unlike USB cameras on computer, the number of available products is quite limited.
Official Raspberry Pi Camera Module

The Raspberry Pi Foundation offers two camera models, and I’ll show you both. This one was the first available, and has been updated in 2016 (for v2).
It’s now a high-quality camera with an 8 megapixel sensor that allows you to get HD pictures (3280 × 2464 pixels) and videos (1080p max). This model is compatible with any Raspberry Pi model (1, 2, 3 and probably 4) and easy to install on Raspberry Pi OS (we’ll see that later).
It’s available on Amazon.com (check the current price here) and the official website.
Raspberry Pi NoIR Camera Module

This one is almost the same, so I’ll be quick.
The NoIR version has the same capabilities (8MP, 1080p, …).
The only difference is the ability to take infrared photographs.
The price is also a bit higher but if you have a few extra dollars available, take this one. It’s often used for security cameras or to take photos in a low light environment. Even if you’re not sure to use it next, it doesn’t matter, it’s worth it (click here to check the updated price).
Other models?
If you are looking for an affordable solution, there is not really a better model than these. If you just want to have one for educational purposes, you can absolutely find a cheaper camera.
For example, this one was my first camera, it’s perfect to learn how to use a camera on Raspberry Pi, but the quality is lower. It’s half the price, but if you have to buy another one a few months after, this is not worth it.
Also, the Raspberry Pi Foundation recently released a new high-quality camera model. It looks like this (Amazon), you can plug additional lenses on it, it’s like a tiny reflex camera. So, if you want something more professional, you can look at these options, even if it’s a bit more expensive.
Other things to consider
A camera is an external device and will often stay outside the case, so depending on what your projects are, you may need other accessories.
I will just give you a few extra links to look at, so you can do your research easily:
- Some cases are compatible with the camera, to include the main board and the camera inside. For example, the “Argon Neo” model seems perfect as there is a built-in support for the camera on the case (check the picture on Amazon).
- Another thing you may have to consider is to keep your current case for the Raspberry Pi and use a simple holder to keep the camera vertical.
There are many similar products, you can check this one for example.
Along with the benefit of keeping your current case, it’s also easier to use the camera if you can just put it on a table (for example), instead of trying to keep it in the right place and orientation. - The last thing you may need is another camera cable.
The included cable is 15 cm long, that’s fine for a basic usage, but you may need to have a shorter or longer cable to fit your needs.
In this pack on Amazon, you have a few cable lengths you can use and change for each project (from 30 cm to 1 m).
Install your new camera on Raspberry Pi
Now that you have everything you need, we can start the serious part of this tutorial 🙂
System installation
Raspberry Pi OS (ex Raspbian) is the recommended operating system to install and use a camera on Raspberry Pi. Everything is included and especially if you choose the official model, you’ll have absolutely no issue with it. I don’t know exactly which systems are compatible, you may want to try them later, but start with Raspberry Pi OS for now.

I already wrote a guide on how to install Raspbian on Raspberry Pi, feel free to check it if you are not confident with the installation.
You can use the Desktop or Lite version, both are working fine with any compatible camera, so choose the one you prefer for your project.
The only advantage of the Desktop version is that you can check the picture directly on Raspberry Pi OS if you have a screen in your setup.
For remote access only, keep the Lite version.
After the installation, make sure to have made these steps:
- Raspberry Pi OS installed with anything you need (applications, network, …)
- Raspberry Pi OS configured with all your favorites settings (keyboard layout and language for example)
- System updated with the last version of all packages
sudo apt update
sudo apt upgrade - SSH enabled to allow remote access for the first tests
sudo service ssh start
- If you choose the Desktop version, you can also install a remote desktop app to do everything from your computer.
Once everything is OK, you can stop the Raspberry Pi to install the camerasudo shutdown -h now
Connect the camera
The camera installation on the Raspberry Pi is straightforward once you find the port location:
- Take the Raspberry Pi out of its box
- Find the camera port on the Raspberry Pi (between the HDMI and jack port)
It’s the only one that fit the cable width, and it may be written “CAMERA” on the main board, you’ll find it easily 🙂 - Before plugging the cable, you may need to remove the plastic film and lightly pull the black plastic
- Plug the cable and push the black plastic to hold the cable inside
- Make sure to align both connectors on the same side (cable connectors on the HDMI port side)
- Then I recommend starting with a rapid test before holding everything in the case and/or in the holder, just to be sure that it’s working 🙂
Plug all cables back (power, HDMI, network, USB …) and start the Raspberry Pi.
Enable the camera on Raspberry Pi OS
Before using the camera on your Raspberry Pi, you need to enable it in your system. By default, the camera port is disabled.
- Connect through SSH (you can find useful tips here to connect via SSH from your computer).
If you prefer, you can use a terminal on the Raspberry Pi OS desktop, or even use the Lite version. - Start the raspi-config tool
sudo raspi-config
- Go to “Interfacing options” > “Camera”
- “Would you like the camera interface to be enabled?”
Yes! - Exit raspi-config and accept the reboot
That’s all you need to do.
After the reboot, the camera is ready to use.
Commands you can use on Raspberry Pi OS to manage the camera
I will now introduce two useful commands to record and see what happen on your camera.
Take a photo
The first thing you can try is to take a simple picture of the image seen by the camera.
“raspistill” is the corresponding command on Raspberry Pi OS.
It’s already installed on your system.
To use it, the basic command line is:raspistill -o image.jpg
With -o you define the target file name (where the pictures will be saved)
It’s possible to use a file name including the path, for example:raspistill -o ~/Pictures/mypicture.jpg
By using raspistill without parameter you’ll get the command help, with all possible options, or you can check this page on the Raspberry Pi website for other basic options.
Record a video
To record a video, the command is almost the same.
“raspivid” is the corresponding command name.
So like for pictures, to record a video use:raspivid -o video.h264
Use the CTRL+C shortcut to stop the recording.
.h264 files are compatibles with VLC.
On Raspberry Pi OS Desktop: sudo apt install vlc
Same thing to see all parameters available, use raspivid without anything else to get all options with a short description. Useful options are :
- –t : to choose the video duration in ms (ex: 6000 for a 6s video). This way you don’t need to use CTRL+C and can schedule the video capture with a script or cron
- -w and -h: video size (width and height)
Get files on your computer (Raspberry Pi OS Lite)
You may be asking how to download pictures on your computer after this.

The easiest way is to use software like FileZilla or WinSCP :
- FileZilla is a free tool available on Windows, Linux and macOS.
It’s mostly used to connect to FTP servers, but there is an option to use it for SCP transfers.
You can download the setup files here. - SCP is a secured protocol to copy files on the network over SSH.
So, you don’t need anything else on the Raspberry Pi. - Open FileZilla
- To try it quickly, you can use the quick connect option under the menu:
But there is also a “Site manager” to store all your servers and connect without entering anything. - Fill the host with the Raspberry Pi IP address.
Then the username (probably “pi”) and the pi password - Click “Quickconnect” when ready
- On the left side, this is your computer, browse to the path where you want to download files to (C:\Users\username\Pictures for example)
- On the right side, it’s the Raspberry Pi, browse to the location where you saved the pictures or video
- Double-click on a file to download it.
Or select multiple files, right-click and “Download files”
Control the camera with Python
The last interesting thing I want to show you with a camera is to use an advanced programming language (Python), to go further with your camera and include it in bigger projects.
Introduction
If you are new to Python and want to do more things on Raspberry, I think you may need to learn it. Python is a central language on Raspberry Pi (if I remember well, the Pi from Raspberry Pi comes from Python). And the good news is that everything is available on a default Raspberry Pi OS to use Python directly (editors, compilers, basic libraries, …).

In this part, I will not teach you everything about Python, that’s not the goal, but just how to use your camera with it. If you want to learn more, I have a detailed guide on how to start with Python here.
First script with Python
OK, let’s start with the first script to take pictures with Python. In the following steps, I continue with Raspberry Pi OS Lite. If you are on Raspberry Pi OS Desktop, there are many editors you can use like Thonny (pre-installed) or other available with apt.
Create your first script :
- Install the Python camera library:
sudo apt install python-picamera
- Create a new Python file:
nano first_script.py
- Paste the following sample code into the file:
import picamera
with picamera.PiCamera() as camera:
camera.start_preview()
camera.capture('/home/pi/Images/python.jpg')
camera.stop_preview()
- Save and exit (CTRL+A, CTRL+D)
- Create the Images folder if needed:
mkdir /home/pi/Images
- Run the script
python first_script.py
- Check the result in /home/pi/Images
You can see the python.jpg file with the picture you just took
(Use WinSCP, FileZilla or scp to copy the file on your computer and check the picture)
It’s only a basic script where you get the basics on how to take a picture in Python. If you already know Python, you can do everything from here
(All available functions are in the documentation here).
Improve the script
Now, I’ll show you another example, with more advanced features.
The goal here is to give you an extra delay after starting the script, to do your best smile before the photo 🙂
We’ll do this in two steps, a basic one and a slightly improved one.
- Create a new file (you can also edit the previous one as almost nothing changes for the first sample)
nano picture_delay.py
- Paste these lines :
import time
import picamera
with picamera.PiCamera() as camera:
camera.start_preview()
time.sleep(5)
camera.capture('/home/pi/Images/python2.jpg')
camera.stop_preview()
- That’s almost the same script for now
The sleep function allows you to wait a few seconds (5 in the example) before continuing - Save and Exit (CTRL+A, CTRL+D)
- Try it :
python picture_delay.py
- Did you have the time to do your best smile?
Probably, but you have to keep it for a few seconds without knowing if the shot was taken
We’ll improve that now, and add a sound when the script takes the picture
- Edit the previous file (or create a new one) :
nano picture_delay_sound.py
- Paste these lines into the file :
import pygame import time import picamera with picamera.PiCamera() as camera: camera.start_preview() time.sleep(4) pygame.mixer.init() pygame.mixer.music.load("flash.wav") pygame.mixer.music.play() time.sleep(1) camera.capture('/home/pi/Images/python.jpg') camera.stop_preview()
- Save and exit
- You’ll probably need to install the pygame library :
sudo apt install python-pygame
- You may also need to find the flash.wav file, or use something else.
For basic sounds, Soundbible offer direct download, for example, this one: Soundbible clicking sound.
Many sites offer many sounds, but most of them require a free account, Soundbible allows direct download without an account. - Once you find it, rename the wav file or edit the script, and run the script:
python picture_delay_sound.py
- With an audio output on the Raspberry Pi, you’ll hear the sound one second before the shot
That’s it for my second script. You now need to code the script corresponding to your needs, by helping you with the documentation.
Conclusion
I hope you enjoyed this introduction on how to install and configure a camera on Raspberry Pi. If you make bigger projects with your camera, it would be nice to share them here with us, I’ll love it!
And of course, if you have additional questions, comments are here for that 🙂
Great tutorial, it helped me a lot.
Thanks Richard!
Dear Sir,
can you write the commands which doesnt replace the picture in Image file, but take another picture with automatic naming. i mean that when we take the second picture it doesnt replace the first picture.
Best Regards
Hi,
I would say something like that:
raspistill -o “image_$(date +%s).jpg”
can you use with a usb camera?
how link camera with google meet