Hi, I’m stuck setting up the ArduCAM Multi Camera Adapter Board 4 Channel V2.2 (running the Multi_Adapter_Board_4Channel / Multi_Camera_Adapter_V2.2_python example) on a Raspberry Pi 4B with four IMX477 cameras. I followed the printed manual, the online documentation and the video tutorial, but it has never worked for me, not from the very first setup. The board does seem to recognise the cameras — the preview windows stay open only for the connected ones (e.g. A and B) while the other windows close immediately — but all of them just show a black window. The black windows for the connected cameras don’t close by themselves after a few seconds (I have to press CTRL+C) and it never captures a picture. If a camera is in slot A the script does take a picture, but the image is simply black. Any idea what I’m doing wrong?
Hi and welcome to the forum. Sorry you’re bumping into this. A few things would really help us narrow it down. Could you share:
- Raspberry Pi model and revision
- OS version
- Python version
- libcamera version
Also, have you already run init_camera.sh? If so please paste the full output, and let us know exactly what you’ve installed/configured so far. Those libcamera error lines are the most useful part.
Sure, here’s my setup:
- Board: Raspberry Pi 4 Model B Rev 1.1, BCM2711. CPU: ARMv7 Processor rev 3 (v7l), BogoMIPS 144.00, CPU implementer 0x41, architecture 7, variant 0x0, part 0xd08, revision 3, 4 processors.
- OS: Raspbian GNU/Linux 11 (bullseye). PRETTY_NAME=“Raspbian GNU/Linux 11 (bullseye)”, VERSION_ID=“11”, VERSION_CODENAME=bullseye, ID=raspbian, ID_LIKE=debian.
- Python 3.9.2
- libcamera v0.0.0+3866-0c55e522
- Camera sensor detected: /base/soc/i2c0mux/i2c@1/imx477@1a
There’s an image attached to show what the black window looks like while the script runs.
Thanks, that’s a good start. Now let’s see the actual detection/init output. Please run the init script and paste everything it prints:
sudo chmod +x init_camera.sh
sudo ./init_camera.sh
If you also have the i2cdetect output, include that. The exact libcamera error text is what we need.
Here are the steps I did and the output.
Right after first boot:
sudo apt upgrade
sudo apt update
Then, as printed on the paper in the multicam box:
sudo apt-get install python3-pyqt5
sudo apt-get install python3-opencv
I activated the I2C interface through raspi-config, cloned the repo and went into the folder:
./RaspberryPi/Multi_Camera_Adapter/Multi_Adapter_Board_4Channel/Multi_Camera_Adapter_V2.2_python
Then followed README.md:
sudo apt-get upgrade
sudo apt install -y python3-kms++ python3-libcamera
sudo apt install -y python3-pyqt5 python3-prctl libatlas-base-dev ffmpeg
sudo pip3 install numpy --upgrade
sudo pip3 install picamera2
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
sudo chmod +x init_camera.sh
sudo ./init_camera.sh
init_camera.sh output:
----Test i2c1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- 64 -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
----Detecting the /dev/video0 device
video0 detected!
---Start testing each camera
if all of them are normal, after it finished,you will see four image in the current path.
Start testing the camera A
Made X/EGL preview window
[0:00:55.863655455] [1144] INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3866-0c55e522
[0:00:55.952004922] [1145] INFO RPI raspberrypi.cpp:1374 Registered camera /base/soc/i2c0mux/i2c@1/imx477@1a to Unicam device /dev/media3 and ISP device /dev/media0
[0:00:55.953587335] [1144] INFO Camera camera.cpp:1035 configuring streams: (0) 2028x1520-YUV420
[0:00:55.954324712] [1145] INFO RPI raspberrypi.cpp:761 Sensor: /base/soc/i2c0mux/i2c@1/imx477@1a - Selected sensor format: 2028x1520-SBGGR12_1X12 - Selected unicam format: 2028x1520-pBCC
[0:00:56.380586563] [1145] ERROR V4L2 v4l2_videodevice.cpp:1890 /dev/video1[18:cap]: Failed to start streaming: Input/output error
ERROR: *** failed to start camera ***
Start testing the camera B
Made X/EGL preview window
[0:00:57.208694573] [1153] INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3866-0c55e522
[0:00:57.257499452] [1154] INFO RPI raspberrypi.cpp:1374 Registered camera /base/soc/i2c0mux/i2c@1/imx477@1a to Unicam device /dev/media3 and ISP device /dev/media0
[0:00:57.258500019] [1153] INFO Camera camera.cpp:1035 configuring streams: (0) 2028x1520-YUV420
[0:00:57.259015579] [1154] INFO RPI raspberrypi.cpp:761 Sensor: /base/soc/i2c0mux/i2c@1/imx477@1a - Selected sensor format: 2028x1520-SBGGR12_1X12 - Selected unicam format: 2028x1520-pBCC
^CStart testing the camera C
Made X/EGL preview window
[0:01:01.438001052] [1163] INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3866-0c55e522
[0:01:01.479280561] [1164] INFO RPI raspberrypi.cpp:1374 Registered camera /base/soc/i2c0mux/i2c@1/imx477@1a to Unicam device /dev/media3 and ISP device /dev/media0
[0:01:01.480284012] [1163] INFO Camera camera.cpp:1035 configuring streams: (0) 2028x1520-YUV420
[0:01:01.480811950] [1164] INFO RPI raspberrypi.cpp:761 Sensor: /base/soc/i2c0mux/i2c@1/imx477@1a - Selected sensor format: 2028x1520-SBGGR12_1X12 - Selected unicam format: 2028x1520-pBCC
[0:01:01.929730283] [1164] ERROR V4L2 v4l2_videodevice.cpp:1890 /dev/video1[18:cap]: Failed to start streaming: Input/output error
ERROR: *** failed to start camera ***
Start testing the camera D
Made X/EGL preview window
[0:01:02.653750568] [1172] INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3866-0c55e522
[0:01:02.716441892] [1173] INFO RPI raspberrypi.cpp:1374 Registered camera /base/soc/i2c0mux/i2c@1/imx477@1a to Unicam device /dev/media3 and ISP device /dev/media0
[0:01:02.717628935] [1172] INFO Camera camera.cpp:1035 configuring streams: (0) 2028x1520-YUV420
[0:01:02.718371681] [1173] INFO RPI raspberrypi.cpp:761 Sensor: /base/soc/i2c0mux/i2c@1/imx477@1a - Selected sensor format: 2028x1520-SBGGR12_1X12 - Selected unicam format: 2028x1520-pBCC
^C
So camera A fails, B keeps the window open until I press CTRL+C, C and D fail the same way as A.
Thanks, this is very useful. The key lines are:
[1145] ERROR V4L2 v4l2_videodevice.cpp:1890 /dev/video1[18:cap]: Failed to start streaming: Input/output error
ERROR: *** failed to start camera ***
So the sensor is detected and registered fine (/base/soc/i2c0mux/i2c@1/imx477@1a, format 2028x1520-SBGGR12_1X12), but streaming dies on /dev/video1 — that’s exactly why you get the black window. Detection OK + streaming failure usually points to a connection/hardware issue between the adapter, cables and sensors rather than a software problem.
Two things that will help a lot:
- Take one camera off the adapter board and connect it directly to the Pi’s CSI connector, then test whether that single camera streams normally. That tells us whether the camera itself is fine.
- Post a clear picture of your hardware connections (both ends of the CSI cable, and how the cameras sit on the adapter). That’s the fastest way to spot a mis-seated FPC or wrong port.
Before I rewire everything — I already found a similar thread on the Raspberry Pi forum and someone suggested adding this line:
dtoverlay=camera-mux-4port,cam0-imx477,cam1-imx477,cam2-imx477,cam3-imx477
So I set camera_auto_detect=0 and edited /boot/config.txt to:
dtparam=i2c_arm=on
dtparam=i2c_vc=on
camera_auto_detect=0
dtoverlay=camera-mux-4port,cam0-imx477,cam1-imx477,cam2-imx477,cam3-imx477
then rebooted. After this, init_camera.sh now says it “can’t find video0 device”. I also added dtparam=i2c_vc=on as suggested on the ArduCAM multi-camera-adapter-board-v2-1 docs page, but it didn’t solve it. So I’m going backwards now.
Ok, that overlay route needs the mux side to be set up correctly, so let’s check what’s actually on the camera mux bus. Can you run and paste:
i2cdetect -y 10
We want to see the sensor address and the mux address. That tells us whether the dtoverlay is exposing the cameras the way it should.
Here it is:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- 64 -- -- -- -- -- -- -- -- -- -- --
70: UU -- -- -- -- -- -- --
1a shows up and 70 shows as UU.
Also, just to add: the ArduCAM multi-camera-adapter-board-v2-1 docs page suggests for the overlay approach:
camera_auto_detect=0
dtoverlay=imx219 # for Arducam IMX219 cameras
dtoverlay=imx477 # for Arducam IMX477 cameras
I tried that too since I have IMX477 cameras, but the black windows are still there for every camera. Nothing I change on the config side seems to make a difference.
Thanks. That i2cdetect result is actually informative: 1a is the IMX477 sensor and 70 (UU) means the mux is claimed by a driver — so detection on the i2c side is working, exactly like in your init_camera.sh logs.
So here’s the pattern we’ve established now:
- i2c detection is fine: devices 1a, 64, 70 are seen, and the mux is claimed.
- The sensor registers correctly: /base/soc/i2c0mux/i2c@1/imx477@1a, sensor format 2028x1520-SBGGR12_1X12, unicam format 2028x1520-pBCC.
- But every streaming attempt fails with: /dev/video1[18:cap]: Failed to start streaming: Input/output error → black image.
Detection working while streaming fails on the video node is almost always a physical connection problem (mis-seated/loose FPC, cable on the wrong CSI port, or the adapter board’s own cabling), not a config issue. Let’s confirm that:
- Move one camera directly onto the Pi’s CSI port (no adapter board) and run the single-camera test — does it stream normally?
- Share a clear photo of the connections: both ends of the CSI cable and how each camera sits on the adapter.
With those two things we can tell you definitively whether it’s the camera, the cable or the board.
Update for anyone following this thread: we got it working. After isolating a single camera and re-seating/redoing the connections, the multi-camera connector is now working fine — all cameras stream properly and there are no more black windows. Thanks for pointing me at the single-camera test, that’s what led us to the connection problem.
Great news, glad it’s sorted! For anyone finding this thread later, the tell-tale symptom is: i2c detection succeeding (1a / 64 / 70 present, mux claimed, sensor registered as /base/soc/i2c0mux/i2c@1/imx477@1a) while libcamera fails with ‘/dev/video1[18:cap]: Failed to start streaming: Input/output error’ and you only get black windows. That combination points to a physical connection issue rather than a config/software one, and re-seating the CSI/FPC connections resolved it here.
If you still see black windows after checking your cabling, post your init_camera.sh output and a photo of the wiring and we’ll take a look.