2024年2月16日金曜日

カラー図解 最新 Raspberry Piで学ぶ電子工作 補足情報トップ

はじめに

本ページは、2016年7月に発売された金丸隆志著「カラー図解 最新 Raspberry Piで学ぶ電子工作」(講談社ブルーバックス)の補足情報をまとめるためのページです。

2020年6月に発売された本書の改訂版のページは「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作
ですのでご注意ください。

補足情報一覧

以下では、Raspberry PiのOSの更新に伴う内容の変更や、正誤情報などを記していきます。

さらに、Raspberry Piをより便利に使うための情報が下記になります。

旧版の記事へのリンク

本書の旧版「Raspberry Piで学ぶ電子工作」のサポートページには、新版の読者の方にも役立つ記事がいくつかあります。それらへのリンクを貼ります。
現在でも動作するようメンテナンスは継続しています。

感想など


10 件のコメント:

  1. こちらの書籍を参考にキャタピラロボットを作成しておりますが、質問があります。
    291ページに記載のシェル10-02-stream.shについて、ラズパイに直接接続するタイプのカメラを利用したシェルスクリプトだと思いますが、USBカメラを接続し、video1と認識させた場合どのように書き換えればよろしいでしょうか?
    また、可能であればカメラ2台(書籍のケース+USBカメラ)の場合のシェルスクリプトの書き換えについても教えていただけませんでしょうか。
    宜しくお願いします。

    返信削除
    返信
    1. お問合せありがとうございます。

      USBのWebカメラの利用ですが、本書の対象外となりますので、
      基本的にはお答えできません。

      以下に、いくつかのヒントを記しますが、下記の点をご了承ください。

      ・下記に記す内容について、内容を保証することはできません
      ・この件に関しましては、この回答を最後とさせて頂きます。

      さて、/dev/video1 と認識されているWebカメラをストリーミングするには、
      10-03-stream.sh というファイルを作成し、例えば下記ように記せば良いでしょう。

      #!/bin/sh

      cd /opt/mjpg-streamer
      export LD_LIBRARY_PATH="$(pwd)"
      ./mjpg_streamer -i "./input_uvc.so -d /dev/video1 -r 640x480 -f 15" -o "./output_http.so -p 9000 -w ./www"


      なお、「./mjpg_」で始まる行は1行ですのでご注意ください。

      640x480が解像度、15がフレームレート、9000がサーバーのポート番号ですので
      適宜変更してください。

      ただし、確か上記のスクリプトが動作するのは、MJPEGモードをサポートした
      Webカメラのみだったと思います。

      経験上、Logicool社のWebカメラはMJPEGモードをサポートしてることが
      多いと思いますが、全てを確認したわけではありません。
      また、他社製品はMJPEGモードをサポートしていないことも
      多いでしょう。

      このように、世の中に多数存在するWebカメラをサポートしきれないことが、
      本書でUSBのWebカメラを用いなかった理由です。

      次に、ストリームの複数起動です。10-02-stream.sh には
      mjpg-streamerの複数起動を抑制するコードが入っているので、
      それを削れば複数起動が可能になります。10-02-stream.sh で
      下記の行だけを残せばよいでしょう。

      #!/bin/bash

      LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" > /dev/null 2>&1&


      なお、複数起動の際は、2つのストリームのポート番号を変える必要がありますのでご注意ください。
      例えば9000と9001、などのようにポート番号を変えます。

      回答は以上です。

      なお、二つのストリームの映像の同時表示などは、
      プログラム(本書で言えば javascript.js)の
      大幅な書き換えが必要となりますのでお答えできません。

      ご了承ください。

      削除
  2. 早速のアドバイス大変ありがとうございます。
    いただいたヒントを参考に試したところ、おかげさまでUSBカメラでの2カメラのWeb表示に(HTMLで記述したためリサイズせず単なる表示ですが。。。)成功しました。
    今回BSW200MBKという広角のUSBカメラを使用しておりますが、フレームレートを30にした時のみmjpg-streamerで認識しました。ご指摘の通りUSBカメラによって相性?等あるようです。

    javascript.jsの方の書き換えにもチャレンジしたいと思います。

    返信削除
  3. テキストはカラー版を使用してます。
    2018 MAY 13  webiopi をインストールしました。
    OS は最新の strech で ラズパイはModel 3 B です。

    テキスト通り、インストールは成功したように思います。

    カラー版のP226にはwebiopi の起動として
    sudo service webiopi start と書かれていますが、
    これでは、Fail になります。起動しません。

    インストール時の最後のメッセージでスタートは
    sudo /etc/init.d/webiopi start と表示されていたの
    を思いだし、この方法を試しましたら起動したようです。
    これで、今後の実習が可能なのでしょうか?

    また、テキスト通りに stop したり kill しても
    プロセス番号が表示され、停止してないようです。
    正しい stop 方法 もお教えください。

    返信削除
    返信
    1. お問合せありがとうございます。

      WebIOPiのインストールコマンドは、
      p.224の5コマンド、p.226の2コマンドの計7コマンドあります。

      症状から推測するに、p.226の2コマンドが正常に実行されていない
      ように思われます。

      もし、上記のコマンドを「コピー&貼り付け」により実行していないのでしたら、
      「コピー&貼り付け」による実行を行うことをお勧めします。

      また、その際、p.224の5コマンドの方にも問題がないとは言えませんので、
      WebIOPiを再インストールするのが最も安全に思えます。

      そのための手順を示します。

      まず、ターミナルを起動し、下記のコマンドを実行することで、
      以前のWebIOPiのインストールに用いられたディレクトリ
      「WebIOPi-0.7.1」を削除してください。
      (これもコピー&貼り付けでお願いします)

      sudo rm -rf WebIOPi-0.7.1

      そして、補足ページ
      https://raspibb1.blogspot.jp/2016/07/blog-post_19.html
      の「p.224:WebIOPiのインストールコマンド」に記された7つのコマンドを
      一つずつコピー&貼り付けにより実行してみてください。
      WebIOPiが再インストールされます。

      以上で症状が何か変わるかどうか、お試しください。

      削除
    2. アドバイスありがとうございます。
      私の Rasbian は strech だったので、テキストやWWW補足で書かれている jessie にはあたらないと思いP226 の2行はパスしたのですが、いただいた解説で再インストールして成功しました。
      webiopi が動作しているかどうかや、JOB No はデスクトップ標準アプリのタスクマネジャーでも確認できました。
      ただし、タスクマネジャーではコマンド名が Python3 と表示されていますので、今までずっとPython2 で実習してきたので、今後どうなるのだろうと少し先回りな心配をしています。
      それでもPython2 でゆっくりなLチカを実行して、
      Windows10側からのGPIO header画面で ゆっくりLチカが確認できましたので、杞憂なのかもしれません。 
      明日から9.2.5 演習以後の学習に進みます。
      ありがとうございました。

      削除
  4. その後、順調にテキスト内容どおりに実習は進みましたが、P262の図9-13の左右矢印がブラウザに表示されませんでした。GPIOにも信号は届いてないようです。ただし、これはブラウザがIE11(Windows10-32bit build 1804)の場合で、試しにEdge を使うと成功しました。Fire-Foxはだめでした。I-pad から Safari ブラウザもIE-11 と同じ状況でダメでした。Safari がダメなので、次章のキャタピラ模型をI-padから操縦するのは無理そうに思います。インストール時期の問題とか、個人の環境の違いとか、webiopi は HTML JAVA PYTHON3 CSS を理解する以前の時点で、なかなか難物なようです。

    返信削除
    返信
    1. 考えられる原因として2つ思いつきます。

      (1) アドレス(http://...:8080/bb/04/ など)の末尾に「/」(スラッシュ)をつけていないこと (p.261などに書かれています)
      (2) ブラウザと相性が悪いこと (p.235に書かれています)

      しかし、私は上記の(2)が原因であるとは考えにくいと考えています。
      その理由は下記の通りです。

      ・(2)が問題となるのは、図9-5のデモアプリのみである場合がほとんどなこと
      ・(2)が問題になるにしても、章ごとに相性が変わること (9.5章は成功して9.6章は失敗するなど) は考えにくいこと

      ですので、私としては(1)の可能性が高いと考えています。

      もし仮に、(2)が原因だとしても、Google ChromeというブラウザがWindows/macOS/iPadにありますので、
      そちらで試すという手もあります。

      削除
  5. webiopi を用いたキャタピラ式ロボットを作成しています。
    モーター確認を行なったところ、スマートフォンで画面を表示することはできたのですが、矢印を押しても反応がありません。
    ロボット側に原因がある気がするのですが、考えられる原因はどのようなものになりますか?また、解決策があれば教えていただきたいです。
    よろしくお願いします。

    返信削除
    返信
    1. 下記を順に確かめてみてください。

      1. /etc/webiopi/configのmyscriptの行が

      myscript = /usr/share/webiopi/htdocs/bb/05/script.py

      のように5番目のスクリプトを指定していること

      2. WebIOPiのインストールが正常に行われたか

      これは、
      「p.234 GPIO Headerによる動作確認」
      および
      「9.3 ブラウザのボタンによるLEDの点灯」
      を試し、ブラウザからLEDの点灯状態が変わることを
      確かめることでチェックできます。

      これらはWebIOPiを用いた最も簡単な演習なので、
      これらがうまくいかないならば、WebIOPiの
      インストールがうまくいっていないことが考えられます。
      インストール法は
      https://raspibb1.blogspot.com/2016/07/blog-post_19.html
      の「p.224:WebIOPiのインストールコマンド」に記されています。

      なお、9.3の演習を行う際のmyscript行は

      myscript = /usr/share/webiopi/htdocs/bb/01/script.py

      ですので注意してください。

      3. 組んだ回路は正しいか

      上の1. および2.が問題なければ、組んだ回路(図10-4)を良くチェックしてください。
      ブレッドボードの上下のマイナスラインをジャンパワイヤで結び
      グラウンドを共通化することも忘れないでください。
      10kΩの抵抗の位置にもよく注意してください。

      なお、この演習は
      「9.6 タッチイベントの利用~DCモーターの速度制御」
      がベースとなっています。
      こちらの演習のほうが回路が簡単ですので、
      こちらの動作を確認してから10章を試すというのも手です。

      (その場合、myscriptは
      myscript = /usr/share/webiopi/htdocs/bb/04/script.py
      です)

      削除