Matrix - CAM500B

From FriendlyARM WiKi
Jump to: navigation, search



  • The CAM500B module uses Omni Vision’s QSXGA CMOS OV5640 module. It has DVP parallel output interface and supports up to 2592 x 1944 photographing and 720P@30fps video recording. It has automatic image control functions: AFC, AWB and AEC etc.
  • The CAM500B uses a cell phone camera. This camera’s focal length is 2.7mm. Its aperture is 2.8. Its viewing angle is 66 degree.


  • 5MP (2592 x 1944) photographing, 720P@30fps video recording
  • Focal length: 2.7mm, Aperture: 2.8, Viewing angle: 66 degree
  • Automatic image control functions: AFC, AWB and AEC etc
  • 24 PIN FPC interface including DVC parallel output, 3.3V power, I2C and GPIO
  • 3.3V signal level

How to Connect

Connect CAM500B to NanoPi M2

  • NanoPi M2 works with CAM500B

CMOS camera-M2

Connect CAM500B to NanoPi 2

  • NanoPi 2 works with CAM500B.

CMOS camera

Connect CAM500B to NanoPi 2 Fire

  • NanoPi 2 Fire works with CAM500B.

CMOS camera01

Connect CAM500B to NanoPC-T2

  • NanoPC-T2 works with CAM500B

CMOS camera

Connect CAM500B to Smart4418

  • Smart4418 works with CAM500B

CMOS camera

Connect CAM500B to NanoPi M3

  • NanoPi M3 works with CAM500B

CMOS camera-M3

Connect CAM500B to NanoPC-T3

  • NanoPC-T3 works with CAM500B

CMOS camera

Connect CAM500B to NanoPi M1

  • NanoPi M1 works with CAM500B


Connect CAM500B to NanoPi M1 Plus

  • NanoPi M1 Plus works with CAM500B


Connect CAM500B to NanoPi NEO Air

  • NanoPi NEO Air works with CAM500B


Connect CAM500B to NanoPi K1 Plus

  • NanoPi K1 Plus works with CAM500B


Connect CAM500B to S5P4418/S5P6818 Boards

  • If your 4418/6818 based board runs Android5.1 and it is connected to FriendlyElec's LCD or an HDMI monitor after Android is fully loaded click on the "Camera" icon and the application will be started. You can take pictures or record videos.
  • Under Debian/Ubuntu a camera utility "nanocams" is available for previewing 40 frames and picture taking.You can try it by following the commands below:
sudo nanocams -p 1 -n 40 -c 4 -o IMG001.jpg

For more details about the usage of the nanocams run "nanocams -h". You can get its source code from our git hub:

git clone

Connect CAM500B to H3/H5 Based Boards

For H3 based boards the CAM500B can work with both Linux-3.4 Kernel and Linux-4.14 Kernel.
For H5 based boards the CAM500B can work with Linux-4.14 Kernel.
The CAM500B camera module is a 5M-pixel camera with DVP interface. For more tech details about it you can refer to Matrix - CAM500B.
connect your H3 board to a CAM500B. Then boot OS, connect your board to a network, log into the board as root and run "mjpg-streamer":

$ cd /root/mjpg-streamer
$ make
$ ./

You need to change the script and make sure it uses a correct /dev/videoX node. You can check your camera's node by running the following commands:

$ apt-get install v4l-utils
$ v4l2-ctl -d /dev/video0 -D
Driver Info (not using libv4l2):
        Driver name   : sun6i-video
        Card type     : sun6i-csi
        Bus info      : platform:camera
        Driver version: 4.14.0

The above messages indicate that "/dev/video0" is CAM500B's device node.The mjpg-streamer application is an open source video steam server. After it is successfully started the following messages will be popped up:

$ ./
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 30
 i: Format............: YUV
 i: JPEG Quality......: 90
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled runs the following two commands:

export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "./ -d /dev/video0 -y 1 -r 1280x720 -f 30 -q 90 -n -fb 0" -o "./ -w ./www"

Here are some details for mjpg_streamer's major options:
-i: input device. For example "" means it takes input from a camera;
-o: output device. For example "" means the it transmits data via http;
-d: input device's subparameter. It defines a camera's device node;
-y: input device's subparameter. It defines a camera's data format: 1:yuyv, 2:yvyu, 3:uyvy 4:vyuy. If this option isn't defined MJPEG will be set as the data format;
-r: input device's subparameter. It defines a camera's resolution;
-f: input device's subparameter. It defines a camera's fps. But whether this fps is supported depends on its driver;
-q: input device's subparameter. It defines the quality of an image generated by libjpeg soft-encoding;
-n: input device's subparameter. It disables the dynctrls function;
-fb: input device's subparameter. It specifies whether an input image is displayed at "/dev/fbX";
-w: output device's subparameter. It defines a directory to hold web pages;

In our case the board's IP address was We typed in a browser and were able to view the images taken from the camera's. Here is what you would expect to observe:
The mjpg-streamer utility uses libjpeg to software-encode steam data. The Linux-4.14 based ROM currently doesn't support hardware-encoding. If you use a H3 boards with Linux-3.4 based ROM you can use the ffmpeg utility to hardware-encode stream data and this can greatly release CPU's resources and speed up encoding:

$ ffmpeg -t 30 -f v4l2 -channel 0 -video_size 1280x720 -i /dev/video0 -pix_fmt nv12 -r 30 \
        -b:v 64k -c:v cedrus264 test.mp4

By default it records a 30-second video. Typing "q" stops video recording. After recording is stopped a test.mp4 file will be generated.


An open source APP developed by FriendlyElec for CAM500A/CAM500B (supports preview, picture-taking and video recording)

Update Log


  • Released English Version