ballemech
@ballemech

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

RaspberryPi3にカメラモジュールをセットした際に、動作確認ができない

M1Macとraspberry Pi3をVNC接続し、カメラモジュールをセットした際に、カメラの動作確認ができないです...
解決方法を教えて下さい。

環境

  • Raspbian 10.10
  • Kernel 6.1.21-v8+
$ uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
$  lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 11 (bullseye)
Release:	11
Codename:	bullseye

やりたいこと

カメラの動作確認

エラー内容

libcamera-helloコマンドでカメラが撮影するか動作確認をしようとすると以下のようになり、デスクトップには何も映りません。

$ libcamera-hello
Preview window unavailable
[0:21:09.698077314] [2241]  INFO Camera camera_manager.cpp:299 libcamera v0.0.4+22-923f5d70
[0:21:09.742500240] [2244]  WARN RPI raspberrypi.cpp:1357 Mismatch between Unicam and CamHelper for embedded data usage!
[0:21:09.743516000] [2244]  INFO RPI raspberrypi.cpp:1476 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media3 and ISP device /dev/media0
[0:21:09.744433910] [2241]  INFO Camera camera.cpp:1028 configuring streams: (0) 1640x1232-YUV420
[0:21:09.744811404] [2244]  INFO RPI raspberrypi.cpp:851 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 1640x1232-SBGGR10_1X10 - Selected unicam format: 1640x1232-pBAA
#0 (0.00 fps) exp 5557.00 ag 1.00 dg 1.35
#1 (30.00 fps) exp 5519.00 ag 1.00 dg 1.36
#2 (30.01 fps) exp 7504.00 ag 1.00 dg 1.00

vcgencmd get_cameraでカメラの状態を確認すると

$ vcgencmd get_camera
supported=0 detected=0, libcamera interfaces=1

カメラに対応されてない設定で、カメラが検知もされていない

試したこと

Docを参考に

> sudo raspi-config

コマンドを打った後に、
Advanced Optionsを選択し、Glamorを選択して、Yesを選択

その後、再起動

$ libcamera-hello
Preview window unavailable
[0:01:35.915636706] [2139]  INFO Camera camera_manager.cpp:299 libcamera v0.0.4+22-923f5d70
[0:01:35.976610496] [2140]  WARN RPI raspberrypi.cpp:1357 Mismatch between Unicam and CamHelper for embedded data usage!
[0:01:35.977849843] [2140]  INFO RPI raspberrypi.cpp:1476 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media3 and ISP device /dev/media1
[0:01:35.978765656] [2139]  INFO Camera camera.cpp:1028 configuring streams: (0) 1640x1232-YUV420
[0:01:35.979243458] [2140]  INFO RPI raspberrypi.cpp:851 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 1640x1232-SBGGR10_1X10 - Selected unicam format: 1640x1232-pBAA
#0 (0.00 fps) exp 9999.00 ag 1.11 dg 1.45
#1 (30.01 fps) exp 9999.00 ag 1.11 dg 1.45
#2 (30.01 fps) exp 9999.00 ag 1.61 dg 1.00

Preview window unavailable...

上記の表を参考に

dtoverlay=imx219boot/config.txtに追加

結果変わらず...

環境変数の設定ができてない?

libcamera-still、libcamera-jpeg などを実行すると、すべての場合で「プレビュー ウィンドウが使用できません」というメッセージが表示されました。
問題は非常に単純で、DISPLAY 環境変数が欠如していることが判明しました。.bashrcファイルにimport DISPLAY=:0
を追加すると、プレビュー ウィンドウが表示されます。

ということで環境変数を設定してみる。
このサイトにはimport DISPLAY=:0と書かれているが、おそらくexport DISPLAY=:0との間違い

.bashrcに追記

export DISPLAY=:0

忘れずにsource ./bashrc

libcamera-helloを実行すると、カメラは映らないが、結果が変わった!

$ libcamera-hello
Made X/EGL preview window
[0:40:20.101018802] [4295]  INFO Camera camera_manager.cpp:299 libcamera v0.0.4+22-923f5d70
[0:40:20.164019623] [4298]  WARN RPI raspberrypi.cpp:1357 Mismatch between Unicam and CamHelper for embedded data usage!
[0:40:20.165546701] [4298]  INFO RPI raspberrypi.cpp:1476 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media3 and ISP device /dev/media1
[0:40:20.167734923] [4295]  INFO Camera camera.cpp:1028 configuring streams: (0) 1640x1232-YUV420
[0:40:20.168619295] [4298]  INFO RPI raspberrypi.cpp:851 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 1640x1232-SBGGR10_1X10 - Selected unicam format: 1640x1232-pBAA

raspi-configで設定

上記サイトを参考に以下操作を行う

raspi-configでAdvanced Options → Glamorをenableに設定
設定しないとプレビューウィンドウを表示できない。

状況変わらず...

Interface Optionsの設定ができていない?

sudo raspi-config

Interface Optionsを選択

スクリーンショット 2023-05-31 11.37.16.png

Legacy Camera を選択

image.png

カメラを使えるようにしますかと聞かれるので、<はい>を選択

再起動

まだ終わらない

config.txtを書き換える必要がある
エディタはなんでもいいですが、ラズベリーパイのターミナルで以下のコマンドを打ち込んでください。

sudo nano config.txt

dtoveray=のところを自分が使っているカメラモジュールに合わせて書き換える必要がある。

image.png

私はV2 cameraを使っているので、dtoveray=imx219を記述

保存して再起動。

以下の写真を撮るコマンドで動作確認

libcamera-jpeg -n -o test.jpg

エラーを吐かれた...

[0:03:50.389231601] [1348]  INFO Camera camera_manager.cpp:299 libcamera v0.0.4+22-923f5d70
[0:03:50.432973560] [1349]  WARN RPI raspberrypi.cpp:1357 Mismatch between Unicam and CamHelper for embedded data usage!
[0:03:50.434190326] [1349]  INFO RPI raspberrypi.cpp:1476 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media2 and ISP device /dev/media0
[0:03:50.435114281] [1348]  INFO Camera camera.cpp:1028 configuring streams: (0) 1640x1232-YUV420
[0:03:50.435611050] [1349]  INFO RPI raspberrypi.cpp:851 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 1640x1232-SBGGR10_1X10 - Selected unicam format: 1640x1232-pBAA
[0:03:55.559988055] [1348]  INFO Camera camera.cpp:1028 configuring streams: (0) 3280x2464-YUV420 (1) 3280x2464-SBGGR10_CSI2P
[0:03:55.562837367] [1349]  INFO RPI raspberrypi.cpp:851 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 3280x2464-SBGGR10_1X10 - Selected unicam format: 3280x2464-pBAA
[0:03:55.645415121] [1349] ERROR V4L2 v4l2_videodevice.cpp:1241 /dev/video14[14:cap]: Unable to request 1 buffers: Cannot allocate memory
[0:03:55.645538298] [1349] ERROR RPI raspberrypi.cpp:1133 Failed to allocate buffers
ERROR: *** failed to start camera ***
$ vcgencmd get_camera
supported=1 detected=0, libcamera interfaces=1

supported=1となりましたが、detected=0 となっているので、カメラが検知されていない。

こちらを確認すると、

boot/config.txtファイルを参照し、dtoverlay=vc4-fkms-v3dまたはdtoverlay=vc4-kms-v3dが現在アクティブであることを確認して

とあり、確認したところ、config.txtにdtoverlay=vc4-fkms-v3dは記述してありました。

どなたか助けてください。

config.txt
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
overscan_left=20
overscan_right=20
overscan_top=20
overscan_bottom=20

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18


dtoverlay=imx219

l Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

# Automatically load overlays for detected cameras
start_x=1

# Automatically load overlays for detected DSI displays
display_auto_detect=1

# Enable DRM VC4 V3D driver
#dtoverlay=vc4-kms-v3d
max_framebuffers=2

# Disable compensation for displays with overscan
disable_overscan=1

[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1

[all]

[pi4]
dtoverlay=vc4-fkms-v3d
# Run as fast as firmware / board allows
arm_boost=1

[all]
gpu_mem=128
0

1Answer

$ vcgencmd get_camera
supported=0 detected=0, libcamera interfaces=1

supported=0 detected=0だと、カメラを認識していないですね。

  • 確認ですが、カメラはフラットケーブルで raspberry py に接続するタイプですか?
    FFCコネクタに接続する向き(フラットケーブルの裏表)は合っていますか?

  • rasp-config で i2C を enabled にしていますか?(必須のはず)

我が家のRaspi 3B+は、下記の環境ですが、もう1.5年ぐらい監視カメラとして毎日活躍しています。24h365d (2ヶ月に1度くらい、気が向いた時にリブトートしている)
ちょっと記憶があやふやですが、bullseye だと旧インタフェースのカメラとの相性が悪いとかで、buster にした記憶があります。V2カメラだと大丈夫なのかな??
GUIも不要なので、Lite版(ヘッドレス)です。

pi3@raspberrypi3:~ $ uname -a
Linux raspberrypi3 5.10.103-v7+ #1529 SMP Tue Mar 8 12:21:37 GMT 2022 armv7l GNU/Linux

pi3@raspberrypi3:~ $ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

pi3@raspberrypi3:~ $ vcgencmd get_camera
supported=1 detected=1

/boot/config.txt には、dtoverlay=vc4-fkms-v3dを指定しています(多分)

使用しているカメラは、下記2つのどちらも問題無し。

USBマイクも付けて、音声付きでライブストリーミングしています。

1Like

Comments

  1. @ballemech

    Questioner

    回答ありがとうございます!
    24h365d稼働させているのですね、、すごい、、
    研究室で、大学構内の不法投棄検知システムとして使うのですが、稼働時間もどうするか課題になっていまして、その点でも詳しくお話聞きたいですね、、
    ひとまず質問に答えさせていただきます!

    supported=0 detected=0だと、カメラを認識していないですね。

    設定を変更したところ、supported=1 detected=0になりました。カメラは認識されていない状態ですよね。

    確認ですが、カメラはフラットケーブルで raspberry py に接続するタイプですか?
    FFCコネクタに接続する向き(フラットケーブルの裏表)は合っていますか?

    フラットケーブルで接続するタイプです!
    向きは合っています! 接続するFFCコネクタもCAMERA用であることを確認済みです!

    rasp-config で i2C を enabled にしていますか?(必須のはず)

    できておりませんでした。
    i2Cをenabledにしてrebootもしたのですが、detected=0のままでした。

    それから、色々と試していたところ、以下コマンドで撮影ができました!
    そのため物理的な接続は問題ないと思います。

    libcamera-still -o test.jpg
    

    カメラで撮った映像をtensorflow-liteを使った不法投棄検知システムとして使うのですが、detected=0は解決したほうがいいですかね...

  2. @ballemech

    Questioner

    VNC Viewerに写したraspberry piのデスクトップ画面内のターミナルでlibcamera-helloを実行すると、カメラの動作が確認できました。

    今までssh接続したMacのターミナル内で行っていたことが原因かもしれないですmm(VNCデスクトップでも試した気はしますが、)

    また、detected=0のままですが、ChatGPTによれば、動作確認ができているのであれば問題ないようですね。

    ChatGPTより
    libcamera-helloコマンドでカメラが正常に機能している場合、
    vcgencmd get_cameraコマンドの結果については心配する必要はありません。
    vcgencmd get_cameraコマンドはRaspberry Pi固有のカメラインターフェースに対して機能し、
    libcameraとは異なる方法でカメラを検出します。
    libcamera関連のツールやライブラリを使用してカメラを制御している場合は、
    vcgencmd get_cameraコマンドではなく、
    それらのツールやライブラリを使用してカメラを操作することがおすすめです。
    カメラがlibcamera-helloコマンドで正常に動作している場合、
    カメラ自体に問題はない可能性が高いです。
    
  3. おそらく、i2cを有効にしたことで、カメラが使えるようになったと思います。

    detected=0は解決したほうがいいですかね...

    下記のブログによると、 bullseye になってからカメラが接続されていても detected=0 らしいです。
    その他、設定に関して色々書かれているので、一度ご覧になるとよいかも。

  4. @ballemech

    Questioner

    ご共有ありがとうございます!

    確認しました、そのままで問題なさそうですね!
    とりあえずこのまま研究進めたいと思います。

    回答していただきありがとうございました!

Your answer might help someone💌