2017年12月31日日曜日

「Raspberry Piで学ぶ電子工作」補足情報トップ

はじめに

本ページは、金丸隆志著「Raspberry Piで学ぶ電子工作」(講談社ブルーバックス)の補足情報をまとめるためのページです。

まず、書籍のサンプルファイル、回路配線図(PDF)、応用演習(PDF)が必要な方は、下記の公式サポートページからダウンロードしてください。


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

補足情報一覧


やってみた


知っておくと便利な設定など


感想など



58 件のコメント:

  1. Raspberry Piで電子工作を学ぶに関する質問です。

    4章に書いてあるLチカができません。Linuxのコンソール画面では、エラーはなかったです。また、初期不良として一回RaspberryPi交換しているので、初期不良はあり得ません。LEDの回路は3章で光らせることができたので問題ないと思います。

    どうすればいいでしょうか?
    よろしくお願いします。

    返信削除
    返信
    1. 3章の点灯はできたとのことですので、次に注意すべき点は
      (1)3.3VピンにさしていたジャンパーワイヤをGPIO 25にさしかえること
      (2)プログラムを正しく入力すること
      の2点です。

      (1)は、注意深く「右側の列で、上から11番目」のGPIO 25を数えてください。
      (2)は、自分で入力するのではなくまずはダウンロードしたサンプルに含まれる04-01-led.pyを用いるのが確実です。

      (1)、(2)がクリアできれば、後はこの04-01-led.pyを管理者権限のidleから実行します。管理者権限のidleを90ページ図4-5のように起動し、91ページの文章にしたがって04-01-led.pyを開き、97ページ図4-13のように実行します。

      管理者権限ではないidleからは実行できませんので注意して下さい。

      削除
    2. ありがとうございます。
      これで数日間ずっと悩んだ問題が解決しました。

      問題は、ピンの数え方で、右から3番目ではなく、左から11番目なのですね、ピンの配置を見てみると、モデルBとAではピンの数が違っていました。

      削除
  2. 問題が解決したようで良かったです。
    恐らくModel B+をお使いなのではないかと思いますが、
    小神野様の置き方で左から数えると、以後トラブルはないだろうと思います。

    また、75ページの図3-12の、Model BとB+の違いを示した図も合わせてご活用下さい。

    返信削除
  3. 本の内容、サポートページの内容の親切さに大変感謝しております。第9章まで楽しく学びすすめることができています。
    1つ質問があります。
    9章のLeafpadの [ SCRIPT ]セクションに1行追加したのち、webiopiをstartし直すことができません。初心者ながら思いつくことを調べてみたのですが、今のところ僕にはどうしてかよいのかわかりません。教えていただきたいのです。
    よろしくお願いします。

    返信削除
    返信
    1. Raspberry Pi2を使用し、デモアプリケーションの起動を確認することはできました。デモアプリケーションでは、ページは表示されましたがボタンは機能しませんでした。そのあと243ページの9.3.1にて上記の問題にぶつかりました。

      削除
    2. Raspberry Pi 2でWebIOPiを試されているということですね。順に解説していきます。

      まず、デモアプリケーション(GPIO Headerだと思います)が表示されたとのことですので、その時点でのWebIOPiの起動は成功しています。

      その際、デモアプリケーションのボタンが機能しなかったとのことですが、Raspberry Pi 2をお使いの場合、原因は2つ考えられます。

      原因1) WebIOPiに対してRaspberry Pi 2用の修正が適用されていない場合
      →ページを更新しましたのでご確認頂きたいのですが、下図のように「IN/OUTボタンが灰色となり文字が表示されない」という状態の場合、Raspberry Pi 2用の修正が適用されていないと思います。この場合、修正を適用した上でWebIOPiを再インストールする必要があります。
      修正が適用されていない場合の図

      原因2)デモアプリケーションGPIO HeaderのIN/OUTボタンに文字が表示されているがボタンが機能しない場合
      →書籍p.238に記したように、デモアプリケーション自体の問題と考えられます。この場合、気にせず先に進んで構わない場合が多いです。

      原因1)の場合、修正適用済みのWebIOPiの再インストールをしてから、原因2)の場合は気にせず先に進みます。

      次は、管理者モードのleafpadでconfigファイルの[SCRIPT]セクションに1行追加してからwebiopiを再起動する件です。

      このconfigファイルは非常に繊細になっており、注意深く記述する必要があります。例えば、[SCRIPT]セクションで追加するのは「存在するPythonプログラムの場所を示す」目的なのですが、その場所にPythonプログラムが正しく存在しなければ、エラーが出て、WebIOPiの起動に失敗します。1文字でも間違えば、WebIOPiは起動しないということです。

      WebIOPiの起動が失敗したことは、上で確認したデモアプリケーションを閲覧できないことでわかります(逆に言うと、デモアプリケーションを閲覧できれば、WebIOPiの起動は成功しているということになります)。

      まずはここまで、いかがでしょうか。ご確認ください。

      削除
  4. デモアプリケーションの件では、僕のケースは原因1)に相当しましたので、もう一度Raspberry Pi 2用の修正を試みましたが、適用されませんでした。なぜなのかわかりません。

    管理者モードのleafpadでconfigファイルの[SCRIPT]セクションに1行追加してからwebiopiを再起動する件では、1文字ずつ注意深く記述したのですが、うまくゆきませんでした。
     [SCRIPT]セクションで追加する目的が「存在するPythonプログラムの場所を示す」こと、その場所にPythonプログラムが正しく存在している必要があるとのことでしたので、Pythonプログラムの存在場所を確認したところ、「/」ディレクトリ内に「usr」,「share」,「webiopi」,「htdocs」,「bb」,「01」,「script.py」がありました(これは確認と言えるのでしょうか)。Pythonプログラムの存在場所は、正しいのでしょうか?
    よろしくお願いします。

    返信削除
    返信
    1. 2つの問題があるようですね。

      (1)Raspberry Pi 2用の修正が適用されていない件
      (2)configファイル変更後の件

      しかし、(1)の問題を解決してからでないと、242ページの9.3章以降の内容はどれも正常動作しませんので、まずは(1)の問題の解決を目指しましょう。

      手順を改めて書くと下記のようになります。

      (1a)書籍227~228ページに従い、「WebIOPi-0.7.1.tar.gz」をダウンロードおよび展開します。書籍ではバージョン0.7.0での記述ですが、必ずバージョン0.7.1をダウンロード&展開してください。
      これが済んだ状態では、ユーザーpiのホームディレクトリにWebIOPi-0.7.1という名前のフォルダ(ディレクトリ)ができています。繰り返しになりますが、WebIOPi-0.7.0というフォルダでは下記の手順はうまく行きませんので注意してください。

      次の手順以降は、サポートページで公開されている方法になります。

      (1b)LXTerminalを起動し、以下のコマンドを順番に実行してください。冒頭の「$」は行頭を表す記号として用いていますので、入力の必要はありません。

      $ wget https://dl.dropboxusercontent.com/u/69652790/bb/WebIOPi-0.7.1.patched.tgz
      $ tar zxf WebIOPi-0.7.1.patched.tgz
      $ cd WebIOPi-0.7.1/
      $ sudo ./setup.sh
      (最後に英語で聞かれる質問には「n」を入力してEnter)

      以上で、Raspberry Pi 2用の修正が適用されたWebIOPiがインストールされます。以上の過程の中で、何かエラーらしきものが現れたら、どのようなエラーなのか、詳しくお知らせください。

      なお、冒頭の問題(2)の件です。問題(2)は問題(1)を解決した後に対応すべきなのですが、1つ質問があります。最初の質問にありました
      「9章のLeafpadの [ SCRIPT ]セクションに1行追加したのち、webiopiをstartし直すことができません。」
      とは、どのような状態を指すでしょうか?

      「ページが表示されない」という意味でしょうか。その場合、webiopiが起動していないと考えられます。
      あるいは「LEDの点灯状態が切り替わらない」という意味でしょうか。その場合、webiopiは起動しているが、問題(1)が解決されていないのでLEDが点灯しない、ということになります。

      いかがでしょうか。

      削除
    2. 問題が解決されました。
      金丸先生に解説して頂いた通りに、(1)Raspberry Pi 2用の修正が適用されていない件を解決したのちに、(2)configファイル変更後の件も解決いたしました。
      僕のような初心者にもわかる丁寧な解説を頂いたおかげでございます。先生の寛容な対応に大変感謝しております。ありがとうございます。


      余計なことと存じますが、以下の手順で確認と修正を行いましたところ、今回の僕の問題は、(1)Raspberry Pi 2用の修正が適用されていない件 に、(2)configファイルの編集後の件 も集約されるものと思われました。

      まず、ダウンロード済みの「WebIOPi-0.7.1.tar.gz」を削除しました。削除した「WebIOPi-0.7.1.tar.gz」は、以下の2つのコマンドを入力する前に「sudo ./setup.sh」をコマンド入力したものです。
      $ wget https://dl.dropboxusercontent.com/u/69652790/bb/WebIOPi-0.7.1.patched.tgz
      $ tar zxf WebIOPi-0.7.1.patched.tgz
      つまり、「sudo ./setup.sh」をコマンド入力したのちに、上記2つのコマンド入力を 行い、再度「sudo ./setup.sh」をコマンド入力したものです。
      したがって、「Raspberry Pi 2用の修正を適用してWebIOPi 0.7.1を再度インストールしてみてください。」という金丸先生の解説を、僕は誤解していたのです。この度の先生の解説中の「Raspberry Pi 2用の修正が適用されたWebIOPiがインストールされます」という一文で、僕が誤解をしていたことに気がついたと感じています。
      次に、先生に解説して頂いた通りの手順を実施したところ、244ページの9.3.2まで進めることができました。


      先生に解説して頂いた内容に、最初の質問内容の「9章のLeafpadの[ SCRIPT ]セクションに1行追加したのち、webiopiをstartし直すことができません」ということについて、「どのような状態を指すのか?」とご指摘頂きました。
      一言で申し上げますと「WebIOPiが起動していない」状態です。
      「WebIOPiが起動していない」状態の判断は、下記の理由からです。

      はじめに下のコマンドを入力してWebIOPiの状態を確認しました。
      $ ps ax | grep webiopi
      WebIOPiの動態は230ページの表示例を参考にし、WebIOPiが起動している場合には、2行のものが折り返されて表示されるはずですが、今回の場合は1行目のWebIOPiが動作していることを示す表示がなく、WebIOPiが起動している場合の2行目に相当する「WebIOPiを含む文字列」のみの表示であること、ページも表示されないことからWebIOPiは起動していないものと判断いたしました。

      蛇足です。上記のWebIOPiの起動を試みる前に、デモアプリケーションは表示されたことから、デモアプリケーションの表示時点ではWebIOPiの起動を確認できたのではないかという希望的な推測、また「config編集前はWebIOPiを起動できたものがconfig編集後にはWebIOPiの起動が確認できない」という変化を幾度か経験したため、「webiopiをstartし直すことができない」という表記をしていました。問題を解決するために質問をしたかったのですが、最初の質問内容が精度の低い問いであったと反省しています。それにもかかわらず、貴重な お時間を割いて丁寧に解説をして頂いたことに大変感謝しております。
      (質問させていただくかどうかも迷っていたほどですので、問題が解決されて、とても嬉しいです!)

      削除
    3. 問題が解決したようで良かったです。

      残りの章もお楽しみください。

      削除
  5. 素晴らしい本をありがとうございます。
    盛りだくさんの内容と踏み込んだ解説でとてもためになります。

    一点、本の内容で分からないところがありまして
    恐縮ですがよろしければ教えていただけますでしょうか。

    「5.2.3 プルダウン抵抗とプルアップ抵抗」の「図 5-3」の右の回路についてです。
    (プルダウン抵抗に対してタクトスイッチが押された状態)

    この図の状態で GPIO 24 に大電流が流れて危険ということはないのでしょうか。

    1つ前の「図 5-2 タクトスイッチの誤った使用例」の右下の回路では +3.3VピンとGNDを直結すると大電流が流れてRaspberry Piが強制終了してしまうとあります。

    同じように「図 5-3」の右の回路では抵抗が無いように見える GPIO 24 にほぼ全部の電流が流れてしまうように思えたのですが、なぜ大丈夫なのでしょうか。

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

      図5-2でも図5-3でもGPIO24は入力として定義されています。
      少し専門的になりますが、一般にピンが入力として定義された場合、そのピンは「ハイインピーダンス」と呼ばれる状態になり、「ピンの内部へ(内部から)ほとんど電流が流れない」という状態になります。
      そのような状態で、接続された箇所の電圧が読み取られるわけです。

      そのため、図5-2の右下や図5-3の右の回路において流れる電流を考える際、「3.3VピンとGNDピンの間」だけの電流を考えればよいということになります。

      少し専門的な解説になってしまいましたが、いかがでしょうか。

      削除
    2. ご回答ありがとうございます。ご返信が遅れ申し訳ございません。

      「ハイインピーダンス」状態であるから GPIO 24 への電流は無視できるということなのですね。

      「ハイインピーダンス」とは何か、どういう時になるのか等についてはこれから調べないとまだ理解出来ていませんが
      プルダウン抵抗等だけのキーワードでは行き詰まってしまっていましたので、調べる糸口がつかめ、大変助かりました。
      ありがとうございました。

      削除
    3. 「ハイインピーダンス」は別の言葉では「入力インピーダンスが高い状態」または「内部抵抗が大きい状態」と言い換えることができます。

      これに概念として似ているのは「電圧計の内部抵抗が大きく決められていること」でしょうか(電圧計は今回の場合と同様、回路の電圧を入力とする装置です)。

      ご参考ください。

      削除
    4. ご丁寧にありがとうございます。参考になります。
      なんとなく理解できてきました。
      電圧計も同様の仕掛けで内部抵抗の大きさで
      電流の流れ込みを考えず電圧が測れるわけですね。
      昔学校で躓いたところ、学び直そうという気持ちになりました!

      削除
  6. 初めまして。
    小さめの本なのでポケットに入れて空いた時間に読ませていただいています。本当に素晴らしい本です。

    本当に失礼とは思いますが、どうやっても本の通りにならないので質問します。
    良ければ回答をお願いします。

    10.3.2章の「動作確認」の所でクローラーの操作で出てくる矢印の画像が出てこないのです。
    実際の写真です。
    https://www.dropbox.com/sh/poej19l65z2b1gz/AACcibPjsCLJ3Nd8yZvlaHyza?dl=0

    safariとepiphanyとChromeで試しました。
    gpio headerからの操作はできるのですが、/etc/webiopi/configに指示通り書き込んでからwebiopiを再起動して、iPhone等からアクセスすると下段のテキストのみ表示され、画像が表示されないといった感じになります。

    サンプル05の階層をを/etc/webiopi/configに書き込んだ後は、本で示されてるピンgpio22〜25のgpio headerの横のin、outの部分がpwmに変わっていたので素人判断ですが適用はされているものだと思いました。

    お忙しいとは思いますが、どうすれば動作確認ができるか良ければ回答をお願いします。

    返信削除
    返信
    1. 画像を拝見致しました。

      1つ気になることは、「URLの末尾にスラッシュ『/』が入っていない」ことでしょうか。図10-5のブラウザのアドレス欄を見ると、末尾にスラッシュがあります。つまり、「05」ではなく「05/」ということです。

      ここで用いているWebIOPiというソフトウェアは、Webサーバーとしてはやや簡易的なところがあるので、URL末尾に(フォルダの区切りを表す)「/」がないと期待した動作をしないことがあります。

      もしこれで改善しなければまたお知らせください。

      削除
    2. とても素早い回答ありがとうございます。

      仰る通りスラッシュが抜けていて表示されなかったようです。
      確認不足でした。すみません。
      無事、動作確認に成功しました。
      お忙しい中本当にありがとうございます。

      回答を頂いた後10.4章に進んだのですが、ここでもつまずいてしまいました。
      連続での質問、大変失礼でありますが、もし回答が頂けるようであればお願いします。

      292ページ2番の
      sudo apt-get install libjpeg62-dev cmake
      を実行すると
      E: Package ′libjpeg62-dev′ has no installation candidate
      といったエラーが出ます。
      蛇足になりますが、その2行上には似たようなパッケージの名前3つ
      libjpeg9-dev
      libjpeg8-dev
      libjpeg62-turbo-dev
      が書かれています。
      無視して進むとmakeが実行できませんでした。

      回答が頂けるようであれば、どうすれば10.4.1章の必要なアプリケーションのインストールが完了するか教えて頂けないでしょうか。
      本当にすみません。

      削除
    3. お知らせいただきありがとうございます。気づいていませんでしたが、
      libjpeg62-devは既にインストールできなくなっているのですね。

      その場合、libjpeg8-devを用いるようにしてください。つまり、
      sudo apt-get install libjpeg8-dev cmake
      となります。

      よろしくお願いします。

      削除
    4. 無事に成功しました。
      本当にありがとうございます。

      「実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける」
      の方も購入させて頂きました。

      こういったサポートは計り知れないほど大変かと思います。
      体を壊さない程度にがんばってください。
      応援しています。

      削除
  7. 4章のLEDチカチカで、import rpi.gpio as gpio
    を入力したのですが、
    error no module named rpi.gpio
    というエラーが出て正しく命令できません。ターミナルを使ってライブラリのインストールを試みたのですが、既に最新の状態ですと返ってきて、原因が分かりません。ご教示よろしくお願いいたします。
    自分はラズベリーパイ3でnoobs1.9.1を使っています。

    返信削除
    返信
    1. import rpi.gpio as gpio

      の行ですが、大文字と小文字は厳密に区別されますので、

      import RPi.GPIO as GPIO

      でなければなりません。

      入力が面倒ならば記述済みのサンプルファイルを用いるのも良いと思います。

      削除
    2. 迅速な返信ありがとうございます!!すみません、大文字できちんと入力しました。ここでは小文字で書いてしまいました。。

      削除
    3. 本当に申し訳ないです、RPi のところが、RPIと Iまでも大文字にしてしまいました。これを直したらプログラムが動きました!ありがとうございました!!!

      削除
  8. 第4章のLチカで下記のエラーが出てしまいます。
    Traceback (most recent call last):
    File "/Users/.../lchika.py", line 1, in
    import RPi.GPIO as GPIO
    ImportError: No module named RPi.GPIO

    lchila.pyファイル側の記述は下記の通りです。

    import RPi.GPIO as GPIO
    from time import sleep

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25,GPIO.OUT)

    while True:
    GPIO.output(25, GPIO.HIGH)
    sleep(0.5)
    GPIO.output(25, GPIO.LOW)
    sleep(0.5)

    モジュールがないと言われてしまうのですが、何が悪いのでしょうか?
    ちなみに、lchika.pyはUsers/.../の直下に置いてあります。

    返信削除
  9. lchila.pyファイル側の記述は下記の通りです。

    lchika.pyの打ち間違いです。

    返信削除
    返信
    1. まず、本書の方法でLEDを点滅させるサンプルを動かすためには、以下の3つが満たされている必要があります。

      (1) Raspberry Piで動作しているOSがRaspbianであること
      (2) lchika.pyが(1)のRaspbian上にあること
      (3) lchika.pyを(1)のRaspbian上で実行していること。

      エラーメッセージを拝見すると、上記の3つの条件のうちどれかが満たされていないように見えます。

      そう考えた理由は、エラーメッセージ中の
      「File "/Users/.../lchika.py", line 1,」
      の部分です。これはlchika.pyが「/Users/.../」にあることを表します。
      (恐らく「...」の部分はNa toさんが手動で書き換えたのだと推測します)

      しかし、Raspbianではファイルlchika.pyを作成すると、
      ファイルの場所は通常「/home/pi/lchika.py」となり、
      「/Users/.../lchika.py」とはなりません。

      上記の問題が起こる原因はいくつか考えられますが、例えば
      「Na toさんがRaspberry Piと一緒に使っているPCがMac OS Xが動作するものであり、
      lchika.pyはRaspberry Pi上ではなくMac OS X上にあり、
      さらに動作もRaspberry Pi上ではなくMac OS X上で行ってしまっている」
      などが思いつきます(他にもあるかもしれません)。

      ご確認ください。

      削除
  10. 先ほどの2件のコメントをしたものです。金丸先生のご指摘どおりにOS X上でなく、Raspi上にlchika.pyのファイルを置くと、Lチカ成功しました。
    ありがとうございました。

    返信削除
  11. お世話になっております。
    RaspberryPiで学ぶ電子工作の7章のI2Cデバイスの利用で、07-01-temp.pyを実行したところ、

    Traceback (most recent call last):
    File "07-01-temp.py", line 22, in
    inputValue = read_adt7410()
    File "07-01-temp.py", line 7, in read_adt7410
    word_data = bus.read_word_data(address_adt7410, register_adt7410)
    OSError: [Errno 5] Input/output error

    というエラーが出てしまいました。
    どのような原因が考えられか、教えていただけないでしょうか?
    よろしくお願いします。

    返信削除
  12. 07-01-temp.pyの記述内容は金丸先生のサンプルファイルからダウンロードしたものをコピーしそのまま使用しています。

    返信削除
    返信
    1. 07-01-temp.pyを正常に実行するためには、
      下記の3点が必要です。

      #####
      (1)I2Cを有効にすること

      http://raspibb.blogspot.jp/2016/02/blog-post.html
      の「p.161:I2C用モジュールを有効にする方法」により有効にします。

      (2)I2Cに必要なツールをインストールすること

      書籍p.163

      (3)Raspberry Piから温度センサADT7410が認識されていること

      認識されているかどうかのチェックは
      http://raspibb.blogspot.jp/2016/02/blog-post.html
      の「p.171:I2Cデバイスの認識について」にて解説されている
      #####

      記入して頂いたエラーですと、おそらく(3)に問題がある、
      すなわち、Raspberry Piから温度センサADT7410が
      認識されていないことが考えられます。

      その原因としては、
      ・はんだ付けが正しく行われていない
      ・回路の接続が間違えている
      ・ADT7410とは異なる温度センサを用いている
      などが思いつきます。

      ご確認ください。

      削除
  13. ありがとうございます。
    教えていただいた点を確認してみます。

    返信削除
  14. お世話になっております。6.3.3の「半固定抵抗の値を読み取るプログラム」で本書に書いてある通りにハードウェアを構築し、プログラムを実行したのですが、値が0以外表示されません。ADコンバーターの故障でしょうか?

    返信削除
    返信
    1. 用いているプログラムは06-01-print.pyだと思いますが、この6章の内容は、
      Raspberry PiのOSのインストール後、モジュールの追加インストールなどが必要ないので、
      回路さえ正しく組めれば、比較的トラブルの少ない章です。
      (7章以降は、演習前のインストール作業や設定作業が増えていきます)

      そのため、まず確認すべきことは回路の配線が正しいかどうかだと思います。

      チェックすべきことは下記でしょうか。
      ・ピンの接続は正しいか
       例えば、SPI MOSIのピンは上から10番目のピンです。
       (公式サイトからダウンロードできる回路配線図PDFの利用をお勧めします)
       また、ブレッドボード上の配線も複雑なのでチェックが必要です。

      ・ADコンバータの左右の向きは正しいか。
       半円の切り欠きの位置で確認します。

      ・ADコンバータはMCP3208か
       このプログラムはMCP3208用です。

      ・用いているプログラムはサポートサイトからダウンロードしたものか
       06-01-print.pyは非常に長いので、自分で手入力する方は
       少ないと思いますが、念のためご確認ください。

      なお、ADコンバータMCP3208が買ってきたそのままの状態で
      故障していることは個人的には起こりにくいと考えます。
      (確率は0ではないでしょうが)
      ミスにより3.3VとGNDを逆に配線して故障する、
      ということならあり得るかもしれません。

      以上、ご確認ください。

      もしそれでもうまく動かないようであれば、
      ・Raspberry Piのバージョン(Model B / B+ / 2 Model B / 3 Model B)
      ・OSであるNOOBSのバージョン
      ・NOOBSをインストールした後、どのような演習を実行したか
       (インストール後の実行履歴により、トラブルが起こることは
       あり得ます)
      をお知らせください。

      削除
  15. WebIOPiのインストールをUltraVNCから実行しました。本にあるサイトはもう移動されているのでLinkを張ってあるサイトのWebIOPI-0.7.1.tar.gzをダウンロードして解凍して cd WebIOPi-0.7.1で sudo ./setup.shを実行しました。最後の方で Y/Nを聞いてくるので Yを入れました。ここで sudo /etc/init.d/webiopi startを実行するとエラーになります。
    unit webiopi.service failed to load:No such file or director
    これを回避することはできないのでしょうか?

    返信削除
    返信
    1. WebIOPiですが、ソフトウェア自体が古くなってきておりますので、
      インストールや設定を行なうには、サポートページの補足を
      御参照頂く必要があります。
      http://raspibb.blogspot.jp/2016/02/blog-post.html
      の「p.227:WebIOPiのバージョンとインストール」付近です。

      ここに改めて記述すると、インストールのための方法は
      以下のようになります。

      手順1.
      WebIOPi-0.7.1.tar.gzをダウンロードし、
      ユーザーpiのホームに展開する。

      手順2.
      以下の4つのコマンドを順に実行する。

      (1) cd WebIOPi-0.7.1/
      (2) wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
      (3) patch -p1 -i webiopi-pi2bplus.patch
      (4) sudo ./setup.sh

      手順3.
      Do you want to access WebIOPi over Internet ? [y/n]
      という質問に「n」で回答する。

      手順4.
      もし、NOOBS 1.4.2以降を使っているならば、下記の2命令を順に実行する。
      (1) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
      (2) sudo mv webiopi.service /etc/systemd/system/

      以上でインストールは終わりです。

      ご質問の問題については、上記の「手順4」が直接関係するように思います。
      また、手順2のコマンド(2)、(3)も実行しないと、Raspberry Pi 2や3では
      正常動作しませんのでご注意ください。

      また、その問題とは別件となりますが、上記の「手順3」で「n」と
      入力すべきところを「y」と入力された、という点がやや気になります。

      この英語の質問は「家の外部のネットワークから家の内部にアクセスしますか?」
      という質問なので、「n」と回答すべきところなのでした。

      「y」と回答すると、weavedというソフトウェアがインストールされ、
      weavedに関する不要なサービスが起動されてしまいます。

      コンソールで

      ps ax |grep weaved

      を実行し、

      2353? S 0:03 /usr/bin/weavedConnectd -f (略)

      などと表示されれば、weavedに関するサービスが起動していることになります。

      そのため、weavedは削除してしまうのを個人的には推奨します。
      削除するには、以下の2命令をコンソールで実行します。
      (1) cd WebIOPi-0.7.1/weaved_for_webiopi
      (2) sudo sh uninstaller.sh
      実行すると、英語でメールアドレスやパスワードを聞かれますが、
      これは上記手順3でインストール時に入力したものを入れるべきものなので、
      何を入力すべきかは私はわかりません。
      削除が終わりそれが成功している場合、Raspberry Piの再起動後、
      「weavedConnectd」の表示は現れなくなるはずです。

      以上、よろしくお願いします。

      削除
  16. 金丸先生 maboです。
    本当に迅速で懇切なお返事吃驚しました。
    手順2のパッチにて確かにwebiopiは起動できました。
    大変有難うございました。

    返信削除
  17. 本を読んで勉強させてもらっております。
    質問させてください。
    06-04-spidev.py
    なのですが、
    commandout |= 0x08 # シングルエンドビット
    commandout = commandout<<4
    ret = spi.xfer2([1,commandout,0,0])
    の部分はチャンネル0を使う場合、送られるデータは
    00000001 10000000 00000000 00000000
    だと思っていますが、このデータですとMCP3208用では無いような気がしてなりません。
    MCP3208のデータシートを見ると
    00000110 00000000 00000000 00000000
    が正しい信号のような気がします。
    私の間違いかもしれませんが、よろしくご教授願います。

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

      SPI通信ですが、実際には、
      送信は「11CCC」の5ビット(CCCはチャンネル指定)でよく、
      受信はヌルビット+データ12ビットの13ビットで済みます。

      実際、06-01-print.pyではソフトウェアによるSPI実装で
      5ビット送信、13ビット受信を実現しています。

      それをspidevで実現したかったのですが、
      spidevの詳しいドキュメントが見当たらず、
      試行錯誤でデータ取得方法を決めた、というのが実情です。

      その過程でわかったのは、4バイト送信すると
      データも4バイト受信される、ということでした、

      それを利用し、下記の4バイトのデータを送っています。

      0000_0001 1CCC_0000 0000_0000 0000_0000

      この中に、「11CCC」が含まれていますから、
      MCP3208への入力として機能するわけです。

      そして、それに対して帰ってくるデータが下記の4バイトで
      あるとして計算しています。

      ret[0] ret[1] ret[2] ret[3]
      XXXX_XXXX XXXX_XNDD DDDD_DDDD XXXX_XXDD

      このプログラムは2年以上前に書いたのですが、
      今にして思えばちょっと不自然と言いますか、
      無駄が多い気がします。

      実際、送るのは4バイトではなく、
      3バイトでも良さそうに思えます。

      もともとのプログラムに下記の部分があります。

      ####
      commandout = adcnum
      commandout |= 0x08 # シングルエンドビット
      commandout = commandout<<4
      ret = spi.xfer2([1,commandout,0,0])
      adcout = ((ret[1]&0x03)<<10) | (ret[2]<<2) | ret[3]&0x03
      ####

      これを、下記に差し替えると、3バイト送信、3バイト受信となり、
      12ビットの出力が構成されます。

      #####
      command1 = 0x6 | (adcnum & 0x4)>>2
      command2 = (adcnum & 0x3)<<6
      ret=spi.xfer2([command1, command2,0])
      adcout = (ret[1]&0xf)<<8| ret[2]
      #####

      この場合、下記の3バイトを送信しています。

      0000_011C CC00_0000 0000_0000

      それに対し、帰ってくるのは下記の3バイトとなり、
      その下位12ビットを読むことでデータとすることができます。

      ret[0] ret[1] ret[2]
      XXXX_XXXX XXXN_DDDD DDDD_DDDD

      以上でいかがでしょうか。


      削除
    2. 先生のおっしゃる3バイト送信の方法で納得いたしました。
      ありがとうございました。

      削除
  18. 本を読みながら勉強しています。
    WebIOPiについての質問があります。Raspberry Pi3を使用し、デモアプリケーションの起動を確認することはできました。デモアプリケーションでは、ページは表示されましたがボタンが機能しません。40ピン表示されるのですがIN/OUTの部分が灰色です。Raspberry Pi3用に修正したのですがうまくいきません。サポートページの補足情報と全く同じコマンドでやっているつもりなのですが…

    返信削除
    返信
    1. お知らせ頂いた問題に対する
      確実な対処法は「WebIOPiを再インストールすること」
      ですので、行ってみましょう。

      下記にインストールコマンドを再掲しますので、順に試してみてください。
      コマンド自体は、補足ページに書かれたものと同一ですが、
      それぞれのコマンド後にどのような表示が現れるべきかの解説も追記していきます。
      異なる表示が出た場合、何か問題が起こっている可能性がありますので、
      お知らせいただくと問題が明らかになるかもしれません。

      ちなみに、「IN/OUT」が表示されない、というのは
      下記手順の(3)と(4)がうまくいっていないときに典型的に起こるエラーです。

      まず、ターミナルを起動します。
      以前にWebIOPi-0.7.1をインストールした名残のファイルがあれば
      以下のコマンドで削除しましょう。
      (先頭の「(0)」などの数字はコピーする必要がありません。以下同様です)

      (0) sudo rm -rf WebIOPi-0.7.1

      このコマンドを実行しても画面に何も表示は出ません。

      ここで、書籍p.227~p.228の指示に従い、WebIOPi-0.7.1.tar.gz を
      Raspberry Piのブラウザでダウンロードし、
      ユーザーpiのホームに移動しておきましょう。
      サイトでは「Cayenne」というソフトウェアが大きく表示されていますが、
      ダウンロードするのはWebIOPi-0.7.1.tar.gzです。

      次に、ファイルを展開するために下記のコマンドを実行します。

      (1) tar zxf WebIOPi-0.7.1.tar.gz

      このコマンドを実行しても画面に何も表示はでません。
      何か表示される場合、WebIOPi-0.7.1.tar.gzが存在しないか、
      圧縮ファイルが壊れている可能性があります。

      次に、下記のコマンドを実行してディレクトリを移動します。

      (2) cd WebIOPi-0.7.1/

      このコマンドを実行しても画面に何も表示はでません。

      次に、ネットワーク上のファイルをダウンロードするために以下のコマンドを実行します。
      Raspberry Piがインターネットに接続されてないと正しく実行されません。
      なお、このコマンドは1行なのですが、このスペースでは折り返される可能性があります。
      補足ページでコピーした方が安全かもしれません。

      (3) wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch

      このコマンドを実行すると画面に複数行の表示が出ます。最後の行は以下のようになります。
      「XX」などの部分は人により異なります。

      XXXX-XX-XX XX:XX:XX (X MB/s) - `webiopi-pi2bplus.patch' へ保存完了 [5260/5260]

      次に、ダウンロードしたファイルを適用するために、以下のコマンドを実行します。

      (4) patch -p1 -i webiopi-pi2bplus.patch

      このコマンドを実行すると画面に4行の表示が出ます。
      最後の表示は下記のようになります。

      patching file python/webiopi/utils/version.py

      次に、WebIOPiのビルドとインストールを行うために、以下のコマンドを実行します。
      Raspberry Piがインターネットに接続されてないと正しく実行されません。

      (5) sudo ./setup.sh

      たくさんの行がスクロールされて表示されます。
      1分くらい待つと、最後に下記のような表示が出て、処理が止まります。

      Do you want to access WebIOPi over Internet ? [y/n]

      ここで、キーボードで「n」をタイプしてEnterキーを押すと、
      WebIOPiのビルドとインストールが完了します。
      複数行の表示が現れますが、最後の行は下記のように表示されています。

      * Look in /home/pi/WebIOPi-0.7.1/examples for Python library usage examples

      引き続き、WebIOPi起動用ファイルのダウンロードと配置を行います。

      まず。下記のコマンドを実行して起動用ファイルのダウンロードを行います。
      Raspberry Piがインターネットに接続されてないと正しく実行されません。
      なお、このコマンドは1行なのですが、このスペースでは折り返される可能性があります。
      補足ページでコピーした方が安全かもしれません。

      (1) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service

      このコマンドを実行すると画面に複数行の表示が出ます。最後の行は以下のようになります。
      「XX」などの部分は人により異なります。

      XXXX-XX-XX XX:XX:XX (X MB/s) - `webiopi.service' へ保存完了 [272/272]

      最後に、ダウンロードしたファイルを適切な場所に移動するために、下記のコマンドを実行します。

      (2) sudo mv webiopi.service /etc/systemd/system/

      このコマンドを実行しても画面に何も表示はでません。

      以上で、WebIOPI 0.7.1 のインストールは終了です。

      以上の後、もう一度動作確認をしてみてください。

      ここまでを行い、なおかつ表示させたメッセージも上記と変わらないという場合、
      原因はわかりませんが、OSであるRaspbianが壊れているという可能性もないとは言えません。
      余力があればOSを再インストールしてみることも検討してみると良いかもしれません。
      (私自身、OSの再インストールが必要だったことはないのですが、
      読者の方にはそれで改善したという方もいらっしゃるようです)

      削除
  19. 返信有難うございます。とても丁寧に示してくださり助かりました。先生が教えてくださったように再度行ったのですが、やはりIN/OUTの部分が灰色のままです。これからOSの再インストールからやってみようと思います。

    返信削除
    返信
    1. 私の場合、NOOBSによるOSインストール直後にサンプルプログラムの動作検証をするようにしています。他の雑誌や本の演習を行った後だとその影響で副作用が出ることがあるのかもしれません。

      また、最近sudo rpi-updateを実行すると、カーネルが新しくなりすぎてトラブルが出がち、という話を聞いたことがあります。ですので、インストール後のOSアップデートも今は行わない方が無難かもしれません。

      林さんの場合に該当するかどうか分かりませんが、ご参考までに

      削除
    2. 追加コメントです。

      これまで、「IN/OUT」の文字が現れるべき部分に文字がなく灰色のまま、というトラブルは、下図のようにピンが26ピンしか表示されない際に起こっていました。

      http://1.bp.blogspot.com/-BXwMGeuHO_w/VUr0AhypPpI/AAAAAAAAD34/4Kmb8MVxl-g/s1600/rpi2_webiopi_failure.png

      林さんの場合のように、40ピンが表示されるにも関わらず「IN/OUT」の文字が現れない、というのは現象としては経験がありません。

      再インストール後も状況が変わらないようでしたら、お知らせください。
      その際、用いたNOOBSのバージョンもお知らせいただけると幸いです。

      削除
    3. 再インストールしたら成功しました!!しっかり40ピン表示でIN/OUTも表示されました。ありがとうございます。これからも先生の本で勉強していきます。

      削除
    4. こちらでも試してみましたが、「OSインストール後にrpi-updateを実行するとカーネルのバージョンが4.9になり、それでWebIOPiが動かなくなる」という問題のようですね。現在のRaspbianのカーネルは4.4なので、そのまま用いれば問題ない、ということのようです。

      カーネル4.9がRaspbianの標準になるまでには対策しておきます

      削除
  20. 度々申し訳ありません。
    先日は誠にありがとうございました。。
    また、ひとつ問題が発生しましたのでアドバイスをお願い致します。
    p.279 10.3.2 動作確認
    「クローラーの操作」画面はしっかり表示されるのですが、スマホでタッチできませんし、パソコンでもマウスでクリックできません。
    「myscript」は正しく記述できていると思うのですが他にどんな原因が考えられますか。ご教示願います。

    返信削除
    返信
    1. 画面(恐らくp.283の図10-5)が表示されているのだとすれば、少なくともWebIOPiが起動されていることを表します。
      また、一度でもp.237図9-6によるデモアプリケーションが正しく動作したのだとすれば、WebIOPiのインストールにも問題がないと思われます。
      となると、考えられる問題を思いつくままに挙げると以下の通りでしょうか。

      1. URLの末尾に「/」を入れていない
      p.282の最後の行に書いてあることですね。ただ、URL末尾に「/」をスラッシュを入れないと、図10-5の矢印の画面の表示にも問題が現れる気がしますので、
      この問題の可能性は低いかなと思います。
      (が、念のためご確認ください)

      2. myscriptの内容
      myscriptの番号が05か06でないとクローラーは動かないのでご確認ください。01や02などのままにしてしまう、ということはありがちです。

      3. 回路の問題
      上記以外で思いつくのは図10-4や図10-6の回路の問題でしょうか。
      ・GPIOのピンの位置
      ・回路の各種配線
      ・モータードライバの表裏(切り欠きの位置で判断)
      ・電池ボックスのスイッチはオンになっているか、
      ・電池ボックスは4本用か(少なくとも2本用の電池ボックスでは動きません)
      ・電池は空ではないか
      ・ブレッドボートの上下のマイナスのラインはジャンパワイヤで結ばれているか
      などがチェック項目として思いつきます。

      あと、10.3.2 のクローラーの話はp.262の9.6章の演習がベースとなっています。
      9.6章が正常動作したかどうかも気になるところです。
      また9.6章の動作を確かめていない場合、こちらを先にチェックすることをお勧めします。

      以上、ご確認ください。

      削除
    2. 申し訳ありません。正常に動作いたしました。
      丁寧に教えてくださり誠にありがとうございます。
      このような質問でお時間を割いていただき申し訳ありませんでした。

      削除
  21. 最新RaspberryPiで学ぶ電子工作から、実例で学ぶRaspberryPi電子工作の順で勉強しています。
    後者の8章に出てくるサーボドライバー(ACP9685)を使用するプログラム([bb2-03],[bb2-05],[bb2-06])をWebIOPi/configのscriptセクションに記述するだけで、WebIOPiが起動出来なくなるのですが、どの様なことが考えられるのでしょうか。
    ほかのWebIOPiのプログラムおよび、[bb2-08-02-6legs-pca9685.py]は問題なく動きます。
    NOOBSバージョンは2.4.1 カーネルバージョンは4.9.28にアップグレードし、各パッケージは補足情報通りにすべて更新して使用しています。
    その後の確認でも今までの各章の動作はほとんど元通りに動いている様です。

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

      まず、kernel 4.4からkernel 4.9にアップグレードした時点で、
      ・WiringPi2-Python(「実例で学ぶ」)
      ・WiringPi-Python(「カラー図解最新」)
      ・WebIOPi(「カラー図解最新」、「実例で学ぶ」)
      というツールをkernel4.9に対応したバージョンに入れ替える
      必要があります。
      全てそれぞれ補足ページに方法が記されています。

      ただし、お話を読む限り、それらは既に入れ替え済み、
      ということのように見えます。

      そうだとして、
      「PCA9685の制御が、通常のPythonプログラムからはできるが
      WebIOPiからできない」
      ということですと、「実例で学ぶ」のp.301で解説した、
      「I2CのPython3対応」
      が実行されていない、ということはあるかもしれません。
      通常のPythonプログラムではPython2が使われ、
      WebIOPiではPython3が使われるからです。

      なお、「I2CのPython3対応」がkernel 4.4からkernel 4.9に
      アップデートしたことによる影響を受けるかどうかは
      経験がないのでわかりません。
      (補足ページで述べました通り、基本的には
      「NOOBSでインストールした直後のRaspbian」を
      サポート対象としているためです)

      最新のNOOBSではデフォルトでkernel 4.9が入っていますので、
      そちらで動作確認することは可能ですが、
      少々お時間をください。

      そのようなわけで、私が気になる点は「I2CのPython3対応」です。

      削除
  22. 早々のご返信ありがとうございます。
    まず、バージョンの件ですが現在インストールしているのは、NOOBS 2.4.1でインストールしているので、最初からカーネルバージョンは、4.9です。
    次にPython3-smbusの件は再度インストールしてみましたが、すでに最新版になっています。
    カラー図解最新の[bb/02]でも同じPython3-smbusを使っていると思いますが、こちらの方のWebIOPiは問題なく起動していて、温度表示も正常に動作しています。
    よろしくお願いいたします。

    返信削除
    返信
    1. 検証有難うございます。
      私が動作チェックできるのは7/19(水)以降なので、
      それまでの間に出来そうなことを記しておきます。

      恐らく、
      sudo systemctl start webiopi
      コマンドや
      sudo service webiopi start
      コマンドでWebIOPiを起動した直後にWebIOPiが異常終了する、
      ということが起こっているのではないかと推測されます。

      その際、
      /var/log/webiopi
      という名前のテキストファイルにログが記録されていますので、
      その末尾付近にエラー(Error)がないかチェックしますと、
      解決のための糸口が見つかるかもしれません。

      削除
    2. ご指摘の通りログの中に、WebIOPi スタート後の bb2/05/script.py 実行後にWebIOPi-ERROR No121 のRemorte I/O errorがでています。

      削除
    3. ご報告ありがとうございます。

      上でお知らせしたとおり、私は7/19(水)までPCA9685の基板を触れる環境には
      ありませんので、その環境でわかる範囲の内容を記させて頂きますのでご了承ください。
      (Raspberry PiやI2Cの温度計やLCDなどは触れる環境にいます)

      お知らせ頂いた「Remote I/O error」ですが、
      「PCA9685がRasppberry Piから認識されていないときに出るエラー」
      に見えます。

      実際、私の環境でGPIOになんの回路も接続しない状態で
      『「bb2/03/script.py」を読み込む設定で「sudo service webiopi start」を実行』
      すると、/var/log/webiopi末尾に「Remote I/O error」が記され、
      WebIOPiが強制的に終了されます。

      さらに、この「PCA9685がRasppberry Piから認識されるかどうか」は
      「PCA9685をWebIOPiから制御する」か「PCA9685をPythonプログラムから制御する」か
      に影響しないと私は考えています。

      ですから、私の環境でGPIOになんの回路も接続しない状態で
      「python bb2-08-02-6legs-pca9685.py」を実行すると、やはり下記のような
      Remote I/O errorが出てプログラムが終了します。
      (IDLEからの起動でも同じ。管理者権限の有無はに影響せず。)

      Traceback (most recent call last):
      File "bb2-08-02-6legs-pca9685.py", line 151, in
      resetPCA9685()
      File "bb2-08-02-6legs-pca9685.py", line 7, in resetPCA9685
      bus.write_byte_data(address_pca9685, 0x00, 0x00)
      IOError: [Errno 121] Remote I/O error

      以上を元に、私が気になるのは、
      『「bb2/03/script.py」を読み込む設定で「sudo service webiopi start」を実行し、
      Remote I/O errorによりWebIOPiが強制終了した直後、回路を全く変更しないまま
      bb2-08-02-6legs-pca9685.pyを実行したとき、Remote I/O errorが出るかどうか』
      です。

      さらに、そのときに「カラー図解最新」のp.161で紹介した「i2cdetect -y 1」
      コマンドでPCA9685のアドレスである0x40が見えるか、も気になるところです。

      削除
    4. お忙しいところ速やかなご対応いただき感謝いたします。
      今回のごご指導により解決いたしました。
      私、今までPCA9685を使用しないプログラムの時、WebIOPiのscriptに登録する際、I/Oを何も繋がずに登録をして、Webでプログラムの画面の出るのを確認していました。
      今回WebIOPiを起動する前に、PCA9685の回路を接続してからスタートすると正常に起動してwebからも確認できました。
      いろいろとご指導いただき有り難うございました。

      削除