2024年2月16日金曜日

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

はじめに

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

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

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

補足情報一覧


追加コンテンツ


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


感想など



106 件のコメント:

  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からも確認できました。
      いろいろとご指導いただき有り難うございました。

      削除
  23. 金丸様  

    はじめまして、全くの初心者です。
    「カラー図解 最新 RaspberryPiで学ぶ電子工作」の書籍を購入
    しなんとか進めています。(以下書籍と記述)

    質問はi2cに関する事です。

    温度センサーの箇所(書籍P158~)を実施し温度が画面に
    出力されていることを確認しています。
    (温度モジュールは、書籍で紹介されている秋月様で購入)
    (書籍P250も確認できました)
    (NOOBS_v2_3_0でinstall)


    その後いろいろあってOSを再度インストールし直しています。

    後日、改めて温度関係のソフトを起動したところ基板がi2c経由で
    温度モジュールを認識できません。(sudo i2cdetect -y 1)
    GUI画面での設定は有効としています。

    配線やブレッドボード等何度も確認済みです。
    故障も考え再度同製品に加え別の温度モジュール(i2c)で
    確認しましたが認識できません。

    仮に基板(pi3)がダメな場合、再度購入して確認したいと思いますが
    ソフト的に認識しないことはあるのでしょうか
    (OSの偶発的な欠損等ではなく、設定で認識しないケースです)
    一度確認できたのに再現できないことがわかりません。
    アドバイスをお願いします。

    以下環境
    Raspberripi3
    OS Ver Debian 8.0
    Kernel Ver 4.45

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

      症状としては、

      ・I2C温度計の正常動作を一度確認したが、OS再インストール後に正常動作しない
      ・I2C自体が動かないので、温度計というよりはOSやRaspberry Piの問題と考えられる

      ということでよろしいでしょうか?

      書籍で取り扱ったI2C温度計は比較的トラブルが少ないものなので、
      原因はあまり思いつきません。

      念のため、Raspbianインストール直後、
      I2Cを利用可能にするための手続きをまとめると以下の通りです。

      (1)設定ツールでI2Cを有効化
      (2)パッケージ i2c-toolsとpython-smbusをインストール
      (3)Raspberry Piを再起動

      あと、起こりうる問題点としては、

      (a)ジャンパワイヤは利用状況によっては端子部が接触不良となるので、
       その場合、ジャンパワイヤを交換する必要がある
       (ジャンパワイヤは消耗品と考えた方がよいです)
      (b)OSのインストールや設定をRaspberry Pi 1(やPi Zero)で行ったSDカードを
       Raspberry Pi 3で使っている(あるいはその逆)
       (「Pi 1/Pi Zero」と「Pi 2/Pi 3」間でSDカードを交換するとトラブルの元)

      などが考えられます。

      また、OSの再インストールの際は、
      SD FormatterでSDカードをフォーマットしてから行ったでしょうか?
      あるいは新品のSDカードを用いたでしょうか?

      なお、「基板(pi3)がダメな場合」とありますが、個人的には、
      「基板(Pi 3)のI2C機能のみが動作不良を起こす」ということを
      経験したことがないので何とも言えません。
      OSのインストールに問題があることはあり得ますので、
      Pi 3を購入しなおすよりは、
      OSの再インストールを先に試した方が良いと思います。

      また、今回のケースに該当するかわかりませんが、
      SDカードも消耗品であり、駄目になることはありますので
      SDカードを交換することも検討しても良いかもしれません。

      最後に、一つ気になったのは、動作環境における
      「OS Ver Debian 8.0、Kernel Ver 4.45」
      です。

      OSはRaspbianではないでしょうか?
      また、NOOBS 2.3.0でRaspbianをインストールした場合、
      kernelは4.4.50ではないかと思います。

      以上、ご確認ください。

      削除
    2. 金丸様

      早速のご回答ありがとうございます。

      SDカードは新品を購入しNOOBS_v2_3_0で再度installしましたが同様な症状でした。

      一度つまずくとどうしてもそこが気になってしまいます。
      今後も色々な可能性を試したいと思います。

      ありがとうございました。

      削除
  24. はじめまして。
    初心者なので基本的な質問かもしれませんがよろしくお願いいたします。
    9.6章(例えば04のフォルダー)でブラウザーに矢印の画像DCMotorController.pngが表示されず、調べてみるとブラウザ側に下記のエラーが出ていました。(IE11,firefox等)
    Error code: 403
    Message: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte.
    Error code explanation: 403 - Request forbidden -- authorization will not help.

    どのように対処すれば分からず、ご教示よろしくお願い致します。
    9.5章までは問題なく進んできました。

    返信削除
    返信
    1. 画像が表示されない問題に対応しました。まずターミナルを起動して下記のコマンドで過去のインストールファイルを一旦削除します。

      sudo rm -rf WebIOPi-0.7.1

      その後、補足ページの「p.224:WebIOPiのインストールコマンド」に記されたインストールコマンドに基づいてもう一度WebIOPiをインストールしてください。 設定ファイル /etc/webiopi/config や /usr/share/webiopi/htdocs 以下にあるサンプルファイルはそのままで構いません。

      お知らせ頂きありがとうございました。

      削除
    2. 補足ページでインストールコマンドが書かれた項目は「p.227:WebIOPiのバージョンとインストール」でしたね。よろしくお願いします。

      削除
  25. 金丸先生

    早々のご対応ありがとうございました。
    無事に表示できました。
    (インストール後にRaspberry piを再起動が必要でした)

    返信削除
  26. 初心者で何とか、
    ご著作の本と補足情報をに助けられて、9章のWebIOPiをインストール後、LED点灯までは進むのですが、直後、次のテーマに移ろうとすると、WebIOPiが起動できません。
    何度か、OSをはじめからインストールを繰り返ししていますが、いつもここで同じ症状で止まってしまいます。
    ここ2週間、嵌まっています。原因や解決の糸口等、ご教授をよろしくお願いします。

    返信削除
    返信
    1. 2点質問がございます。

      まず、1つ目の質問です。
      「9章のWebIOPiをインストール後、LED点灯までは進むのですが」
      とは、下記(A)、(B)のどちらを指しているでしょうか。

      (A) 9.2.4のでもアプリケーションでLEDは点灯できたが、9.3のプログラムは動かない
      (B) 9.3のプログラムでLEDは点灯できたが、9.4の温度センサは動かない

      次に、2つ目の質問です。
      「WebIOPiが起動できません」とはどういう状態を指しているでしょうか。
      「9.2.3で解説した『ps ax | grep webiopi』コマンドで、起動した
      webiopiが表示されない状態」という理解で良いでしょうか?
      それとも別の状態を指しているのでしょうか。


      なお、上記の(A)のケースに該当する場合、下記の2点を確認する必要があります。

      (A-1) /etc/config/webiopiで、
      myscript = /usr/share/webiopi/htdocs/bb/01/script.py
      という行を一文字の誤りもなく記述している。

      (A-2) 9.2.5で解説したように、本書のサンプルファイルが適切に
      /usr/share/webiopi/htdocsディレクトリにコピーされている。
      これは、(A-1)で記した
      /usr/share/webiopi/htdocs/bb/01/script.py
      というファイルが実際にその位置に存在することを意味します。

      また、上記の(B)のケースに該当する場合、(A-1)、(A-2)に加え、
      下記も確認する必要があります。

      (B-1) デスクトップのメニュー→設定→Raspberry Piの設定
      で起動する設定アプリケーションで、
      インターフェイス→I2C
      が有効になっている

      以上、ご確認ください。

      削除
    2. 素早いご返答に驚きました。

      先生のご指摘のように、「インターフェイス」の設定で「I2C」を有効にしていませんでした。
      ご返答を見まして、「アッ!」思いました。 何度か初めからOSをインストールしているうちに、
      いきなり9章に飛ぶようになり、変に慣れて忘れていました。   反省しきりです。
      お陰様にて、その後は順調に進み、これから10章に入りキャタピラ式模型に挑戦するところです。
      本に記載の液晶やカメラはもちろん、そのほかに何を搭載しようかと思案し夢は膨らんでおります。

      本当に、懇切丁寧なご指導に感謝しております。
      ありがとうございます。

      削除
  27. 勉強になる書籍ありがとうございます。
    書籍209ページ以降のPMW信号によるサーボモータ制御で詰まっています。
    WiringPi-Pythonのインストールで(たぶん)つまずいています。
    といいますのは、サンプルの08-04-servo.piを起動しても
    import wiringpi
    ImportError: No module named wiringpi
    が出てしまいます。
    インストールがうまくいっていないと思うのですが、サポートページの
    p.213:wiringPiのダウンロードとインストールや
    p.214:WiringPi2-Pythonのインストール
    を試してみてもだめです。
    (そもそもP.213とかp.214でしょうか?P.209でなく?)

    なお、上記「WiringPi2-Pythonのインストール」にある
    sudo python setup.py install
    を行いますと、ワーニングがいっぱい出ます。

    解決策をお教えいただきたくよろしくお願いいたします。

    返信削除
    返信
    1. 追記ですいません。

      上でご質問した者です。いろいろ別サイトで調べて以下のコードを実行させたところではエラーは出ません

      import wiringpi
      import time

      out_pin = 23

      wiringpi.wiringPiSetupGpio()
      wiringpi.pinMode(out_pin, wiringpi.OUTPUT)

      for i in range(0, 5):
      wiringpi.digitalWrite(out_pin, 1)
      time.sleep(1)
      wiringpi.digitalWrite(out_pin, 0)
      time.sleep(1)

      頭の部分、先生のサンプルコードと大した違いは無いと思うのですが、何が問題なのでしょうか??

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

      一つ目の書き込みに対する回答です。
      まず、こちらをお試しいただきたいと思います。

      まず、書籍には
      ・モノクロの旧バージョン

      ・カラーの新バージョン
      があります。

      そして、それぞれのバージョンごとに
      補足ページが異なります。

      モノクロの旧バージョン用の補足ページが
      今ご覧いただいているこのページ、

      カラーの新バージョン用の補足ページが
      https://raspibb1.blogspot.jp/

      となります。
      まず上記をご確認ください。

      さらに、サンプルファイルも異なります。
      モノクロの旧バージョンのサンプルファイルは
      raspi-sample.zip
      であり、
      カラーの新バージョンのサンプルファイルは
      raspi1-sample.zip
      です。

      (カラーの新バージョンには「1」という数字がついています)

      次に、WiringPi-Pythonについてです。
      モノクロの旧バージョンでは、「WiringPi-Python2」
      を用いました。一方、
      カラーの新バージョンでは、「WiringPi-Python」というものを
      用いています(数字の有無が異なります)。

      「ImportError: No module named wiringpi」
      というエラーから想像するに、恐らく、
      ・サンプルファイルはカラーの新バージョン用を用いている
      ・インストールは旧バージョン用の「WiringPi-Python2」に対して行っている
      という状況に見えます。

      ですから、カラーの新バージョン用のページ
      https://raspibb1.blogspot.jp/2016/07/blog-post_19.html
      の「p.209:WiringPi-Pythonのインストールコマンド」
      に基づき、「WiringPi-Python」をインストールすると
      問題が解決すると思われます。

      以上、お確かめください。

      削除
    3. 次に、2つ目の書き込みに対する回答です。

      話がややこしいのですが、
      1つ目の書き込み時と2つ目の書き込み時で状況が異なっているように思います。

      ・1つ目の書き込み時
      →WiringPi-Pythonが入っておらず、WiringPi-Python2
       のみが入っている状況に見える

      ・2つ目の書き込み時
      →WiringPi-Pythonが入っているが、インストールに問題があるように思える。

      そして、2つ目の書き込みにおけるプログラムが動作する理由は、
      PWM出力を行っていないからではないかと思われます。

      WiringPi-Pythonのインストールに問題がある場合、
      「PWM以外は動作するが、PWMは動作しない」ということは
      あり得るように思います。

      ですから、私のひとつ前の書き込みに記した方法で
      WiringPi-Pythonをインストールすることをお試しください。

      なお、その場合、WiringPi-Pythonの再インストールとなると思いますので、
      まず、
      rm -rf WiringPi-Python
      というコマンドで以前のインストールに用いたWiringPi-Pythonディレクトリを
      削除してから再インストールする必要があると思いますのでご注意ください。

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

      削除
    4. 先生。早いご回答ありがとうございました。

      ご指示いただいたとおりに再インストールしたところ、無事にエラーなく動かすことができました。

      これからも楽しませていただきます。本当にありがとうございました。

      削除
  28. はじめまして。勉強になる書籍をありがとうございます。

    質問なのですが、p250の「ブラウザへの温度センサの値の表示」で温度を表示することはできるのですが、数回表示されると更新されなくなります。
    Javascriptのコンソールを見るとサーバに接続できませんでしたと表示されており、GPIO headerにも繋がりません。

    /etc/init.d/webiopi statusで確認するとActive: deactivating (stop-sigterm)となっています。

    webiopiをstopしてその後startするとサーバは起動しますが、同じことの繰り返しになります。

    解決策等ご存知でしたらご教示お願いいたします。

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

      温度センサの表示が数回で止まるというのは
      これまで経験したことがないエラーですね。

      こちらでも色々試してみていますが、
      再現できていません。

      状況を特定したいのでた、いくつかの質問に
      ご回答いただけますでしょうか。

      #####(ここから)
      1. お使いのRaspberry Piのバージョン
       (Pi 2、Pi 3、Pi Zero、Pi Zero W、など)

      2. お使いのNOOBSまたはRaspbianのバージョン
       (インストール時のままか、upgradeしているかどうかも
       合わせてお知らせください)

      3. ソフトウェアのインストールについて、
       本書では入れていないソフトウェアをインストールしたかどうか、
       また、本書とは異なる設定を行わなかったかどうか、など

      4. WebIOPiは補足ページに書いた新しいコマンドに基づいてインストールしているか
      https://raspibb.blogspot.jp/2016/02/blog-post.html

      p.227:NOOBS 1.4.2以降におけるWebIOPiのダウンロードと展開
      p.227:WebIOPiのバージョンとインストール
      p.229:NOOBS 1.4.2以降(Jessie, Stretch)でのWebIOPI 0.7.1の起動について
      までがインストール法です。

      なお、このインストール法は2017年10月が最終更新となっています。
      その前後で「sudo apt-get upgrade」などでRaspbianを更新した場合、
      WebIOPiを再インストールする必要があるような気がします。

      5. 回路は図9-9のままかどうか。他のセンサなどを追加していないかどうか。
      #####(ここまで)

      伺いたいことは以上です。

      気になるのは、WebIOPiのサービスが途中で落ちていることです。
      そのことから、WebIOPiのインストールに何か問題があるのではないかという気がします。

      削除
    2. ご返信ありがとうございます。ご連絡が遅くなりまして申し訳ありません。

      他のソフトウェアなどいろいろ使用してるRaspberry Piだったため、再度NOOBS 2.8.1でRaspbianをインストールし、手順通りにWebIOPiをインストールしましたらサービスが途中で落ちることなく動き続けました。

      ありがとうございました。

      削除
  29. 初めまして。有益な本をありがとうございます。

    第9章について質問させてください。
    なお、小生は、
    Raspberry Pi3 Model B+
    を使用しております。

    図9-5のGPIO Headerを表示させ、GPIO25に接続されたLEDをON/OFFするところまでは進めたのですが、
    9.3ブラウザのボタンによるLEDの点灯について、
    図9-6のように、LEDボタンをクリックしても青色に変わらず、かつLEDも点灯しません。
    configのmyscript設定は恐らく正しいと考えております。
    小生はハード屋のため、javascriptやpythonのデバッグの手の付け方が分からず、先に進めない状態になっております。

    アドバイスいただけたら、幸甚に存じます。


    返信削除
    返信
    1. よくあるトラブルとしては、アドレス
      http://IPアドレス:8000/bb/01/
      を記述する際、「末尾の『/』(スラッシュ)を記述していない」場合があります。
      WebIOPiは簡易的なWebサーバーなので、スラッシュの自動補完は行われないのです。

      また、myscriptを記述した行
      myscript = /usr/share/webiopi/htdocs/bb/01/script.py
      が 01 以外を指している場合もLEDのオンオフは行われませんが、
      こちらはこの行を補足ページからコピーしたのだとすれば、問題ないでしょう。

      あとは、/etc/config/webiopiを編集した後は一度WebIOPiを停止してから
      再び起動しなす必要があることもご注意ください。

      まず思いつくことは以上となります。

      削除
    2. 迅速なご返信、誠にありがとうございます。
      ご指摘のように、末尾の/が原因でした。
      大変助かりました。次の演習に進みたいと思います。
      ありがとうございました。

      削除
  30. はじめまして。
    初心者です。4章のLチカをやっていますがうまくできません。

    図4-6管理者権限をターミナルでなく、Tera Term(講習会で手に入れた)使用しています。
    ターミナルでなければエラーになってしまうのでしょうか。

    第3章は点灯できました。raspberry Pi 3 Model Bです。

    ご教示お願いします。

    返信削除
    返信
    1. 「管理者権限」と記していることから、モノクロ版の書籍をお持ちだとして以下、話を進めます。

      まず、補足を先に述べます。
      「管理者権限」についてですが、モノクロ版の発売時は電子工作用プログラムの実行時に
      管理者権限が必要でした。しかし、現在のRaspbianでは、管理者権限が必要なのは
      8.6章以降のプログラムだけです。

      さて、ここからが本題です。
      Tera Termのみで本書のプログラムを全て実行するのは、
      Linuxの上級者であれば不可能ではありません。
      しかし、Linuxの経験が少ない方にとっては
      非常に困難なことだと思います。

      なぜLinuxの上級者でなければならないかというと、
      下記のことを全てTera Term上のコマンドで行う必要があるからです。

      (a) サンプルファイルのダウンロード (付録B)
      (b) サンプルファイルの展開 (付録B)
      (c) サンプルプログラムの閲覧 (4.3章)
      (d) コマンドによるプログラムの実行 (付録C.2)
      (e) leafpadによる設定ファイルの変更 (7.1章など)
      (f) カメラの有効化 (5.6章)
      (g) I2Cの有効化 (7.1章)
      (h) WebIOPiのダウンロード (9.2章)

      上記をTera Termで行う方法は、(d)以外は
      本書では解説しておらず、サポート対象外としております。

      本書では、Raspberry Piにディスプレイやキーボード、マウスを
      接続して利用する方法を解説しています。
      その理由は、全てをコマンドを用いて実行する方法では
      多くの方が途中で挫折してしまうだろうと考えられるからです。


      さて、以上をご理解いただいた上で、
      「Tera TermでLチカをする場合、何ができていなければならないか」
      のチェック項目を以下に記します。

      下記の(1)から(3)のチェック項目の全てが実現されていないと、
      Lチカは実現できませんのでご注意ください。

      #####チェック項目ここから
      (1) Raspberry Pi上にサンプルファイルraspi-sample.zipがダウンロードされ、
      さらにそのファイルが展開済であること。

      これは、Tera Termにログインした後、
      ls
      というコマンドを実行した結果を見ればわかります。「ls」は存在する
      ファイルのリストを表示するコマンドですので、その中に
      04-01-led.py
      というファイルが存在すれば、ダウンロードと展開は完了していると言えます。

      (2) 作成した回路は正しいか

      図4-4の回路ですが、3章と異なるのは、
      「3.3Vに接続されていたジャンパワイヤをGPIO 25につなぎ変える」
      ことです。GPIO 25は、GPIOポートが右上にくるようにRaspberry Piを配置した際、
      上から11番目のピンです。

      Raspberry Pi 3用の回路図はこちらからダウンロードすることができます。
      http://bluebacks.kodansha.co.jp/books/9784062578912/appendix/

      (3) 実行したコマンドは正しいか

      (1)で04-01-led.pyが存在することを確認できている場合、その実行コマンドは

      python 04-01-led.py

      です。これは付録C.2で解説していることです。
      #####チェック項目ここまで


      さて、解説は以上です。

      なお、Raspberry Piにディスプレイなどを接続せず、なおかつ
      GUIなどのグラフィックを用いた演習を行う方法はないわけではありません。

      下記で解説されていますが、上級者向けの内容であり、
      本書の9章くらいまでを終えた方でないと、理解しにくい内容だろうと思われます。

      ディスプレイ・マウス・キーボードを接続せずにRaspberry Piを利用する
      https://raspibb.blogspot.com/2016/04/raspberry-pi.html

      以上です。

      削除
    2. 早々にご連絡ありがとうございました。
      また、ご連絡遅くなりすみませんでした。

      Tera Tarmでls確認し「04-01-led.py」入っていないのに気付きました。
      SDカードを準備しRaspbianのダウンロードからはじめました。
      terminalで入力しLチカ出来ました。
      Raspbianの画面もja設定出来、見やすくなりました。

      サポート対象外ながらも丁寧なアドバイス頂きありがとうございました。
      先ずは本を元に一つ一つ進めていきます。

      削除
  31. お世話になります。
    本書7章の温度センサの部分で詰まっております。
    本書に記述されているとおりに進めた後、
    「07-01-temp.py」を実行しましたが、
    以下のようなエラーが生じてしまいます。

    Traceback (most recent call last):
    File "/home/pi/bluebacks/07-01-temp.py", line 21, in
    inputValue = read_adt7410()
    File "/home/pi/bluebacks/07-01-temp.py", line 6, in read_adt7410
    word_data = bus.read_word_data(address_adt7410, register_adt7410)
    OSError: [Errno 121] Remote I/O error

    本書や当HP等を用いて、私なりに解決を試みましたが、解決できません。
    お忙しいところ誠に恐縮ですが、解決方法についてご教授頂ければと存じます。
    何卒よろしくお願い致します。

    返信削除
    返信
    1. このエラーは「Raspberry Piと温度センサの間の通信が失敗している」
      際に出るエラーです。

      下記のような状況で上記のエラーが出ます。

      #####
      (1) Raspberry Piに温度センサが接続されていない場合。
       GPIOに何も接続されていない場合にも同じエラーが出ます。

      (2) Raspberry Piに温度センサが接続されているが、
       配線が間違っている場合。例えばSDAとSCLが逆だとか
       3.3VとGNDが逆だとかというときもこの場合に相当します。
       
      (3)温度センサのはんだづけに失敗している場合。
       はんだづけは4か所だけですので、成否はある程度目で確認できます。

      (4)何らかの理由で温度センサが壊れている場合。
       はんだづけの際に熱をかけすぎたとか、3.3VとGNDを逆に接続した
       などで壊れた場合が相当します。
      #####

      今回がどのケースに相当するかはわかりませんが、
      (2)を確認すると改善する場合は多いかもしれません。

      ご確認ください。

      削除
    2. ご返信いただきありがとうございました。
      温度センサのはんだづけに問題があったようで、
      はんだづけをやり直したところ、問題は解決いたしました。
      解決前は、ターミナルでアドレスが表示されたため、
      温度センサの接続は問題ないと思っていましたが、
      実際にははんだづけに問題があったようです。

      削除
  32. 度々申し訳ございません。
    本書8章のサーボモーターの部分で詰まっております。

    本書の手順通りに進め、「08-04-servo.py」を実行したのですが、
    下記のようなエラーが生じてしまいます。

    Warning (from warnings module):
    File "/home/pi/bluebacks/08-04-servo.py", line 4
    import wiringpi2 as wiringpi
    DeprecationWarning: The wiringpi2 module has been deprecated, please 'import wiringpi' instead.

    そのため、エラーの指示通り、「import wiringpi2 as wiringpi」の部分を「import wiringpi」に書き換えて、再度実行しましたが、今度はエラーが出ない代わりに回路が機能しません。配線を確認しましたが、特に問題はありませんでした。
    私なりに解決を試みましたが、手詰まり状態です。
    大変恐縮ですが、解決方法をご教授頂ければと存じます。
    よろしくお願い致します。

    返信削除
    返信
    1. 恐らく、書籍に記したWiringPi2-Pythonのインストールコマンドに
      従って頂いたのではないかと思います。

      書籍発売から長くたっていますので、WiringPi2-Pythonを使うための
      インストールコマンドが変更を受けています。

      その新しいインストール法でWiringPi2-Pythonを
      再インストールして頂けますでしょうか?

      そのためには、もしユーザーpiのホームディレクトリに
      「WiringPi2-Python」というディレクトリが存在する場合、
      下記のコマンドで削除する必要があります。

      rm -rf WiringPi2-Python

      その後、補足ページの「本書発売後の追加情報」
      https://raspibb.blogspot.com/2016/02/blog-post.html
      の「p.214:WiringPi2-Pythonのインストール」に記した方法で
      インストールを再度行ってください。
      (コマンドを一つ一つコピー&貼り付けで実行するのが確実です)

      具体的には、書籍に記したコマンドと
      ソースのダウンロード元が変わっています。

      同様に、9章でWebIOPiというツールを用いますが、
      そのインストールも、書籍に記したコマンドではなく、
      https://raspibb.blogspot.com/2016/02/blog-post.html

      「p.227:WebIOPiのバージョンとインストール」
      および
      「p.229:NOOBS 1.4.2以降(Jessie, Stretch)でのWebIOPI 0.7.1の起動について」
      に記した方法に従ってください。


      なお補足ですが、上記に記した方法は、「WiringPi2-Python」という
      古い(deprecatedな)ライブラリをそのまま使い続ける方法です。

      一方、より新しいバージョンの「WiringPi-Python」を使う方法もあります。

      本書のカラー新版ではそちらを使うようになっています。そのインストール法は
      https://raspibb1.blogspot.com/2016/07/blog-post_19.html
      の「p.209:WiringPi-Pythonのインストールコマンド」に記されています。

      しかし、その方法では、プログラム中の
      「import wiringpi2 as wiringpi」の部分を「import wiringpi」
      に書き直して使用する必要があります。

      古い「WiringPi2-Python」を使うか、
      新しい「WiringPi-Python」に乗り換えるかはお好みでお選びください。

      削除
  33. お世話になっております。
    「WiringPi-Python」を使って実行しましたが、やはりうまくいきません。

    補足情報に記載されたとおり、「WiringPi-Python」を念の為一度アンインストールした後、再インストールいたしました。
    そして「08-04-servo.py」のうち、「import wiringpi2 as wiringpi」の部分を「import wiringpi」に書き換えて実行しましたが、今度はエラーが出なくなった代わりに、回路が機能しません。
    ちなみに、「08-05-servo-swpwm.py」を実行した際には、回路は機能しましたので、回路の問題ではないようです。
    なお「WiringPi2-Python」のディレクトリも存在しないので、「WiringPi-Python」の動作を妨げている様子もありません。

    「WiringPi-Python」の問題だとは思いますが、原因が皆目検討もつきません。
    度々申し訳ございませんが、解決方法についてご教授頂ければと存じます。
    何卒よろしくお願い致します。

    返信削除
    返信
    1. カラー図解最新Raspberry Piで学ぶ電子工作補足情報
      「p.209:WiringPi-Pythonのインストールコマンド」
      https://raspibb1.blogspot.com/2016/07/blog-post_19.html
      に従ってWiringPi-Pythonがインストールされていると仮定します。

      下記を実行してその結果をお知らせ頂けますでしょうか。

      まずLXTerminalを起動し、08-04-servo.pyのあるディレクトリに移動してください。

      すなわち、08-04-servo.pyがホームディレクトリにあるのならば何もしなくて構いませんし、
      08-04-servo.pyがbluebacksディレクトリ内にあるのでしたら「cd bluebacks」を
      実行するのでした。

      さて、08-04-servo.pyを最新のWiringPi-Pythonで動かす場合、
      下記の2つの挙動が出るのが正常動作です。

      (1) 管理者権限なしに実行する
      python 08-04-servo.py
      というコマンドを実行すると、
      pinMode PWM: Unable to do this when using /dev/gpiomem. Try sudo?
      という、管理者権限が必要だというメッセージが出てプログラムが終了します。
      書籍に記したようにWiringPiの実行には管理者権限が必要だからです。
      逆に言えば、上記メッセージが出れば、最新のWiringPi-Pythonが
      インストールされていると言って良いと思います。

      (2) 管理者権限つきで実行する
      sudo python 08-04-servo.py
      というコマンドを実行すると、書籍に記した通りサーボモーターが動作します。
      なお、開発環境idleで管理者権限でプログラムを実行したい場合、
      sudo idle
      でidleを起動してからプログラムを開くのでした(書籍p.89)。

      まずは、(1)と(2)を試し、それぞれどうなったかをお知らせください。
      (1)の場合はどんなメッセージが出たかもお知らせください。

      なお、08-05-servo-swpwm.pyは動作したとのことですが、
      08-05-servo-swpwm.pyはGPIO 25
      08-04-servo.pyはGPIO 18、
      を使いますのでご注意ください。

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

      まず結果から申しますと、回路は機能いたしました。
      問題の原因はPythonのバージョンにあるようです。
      しかし、なぜ異なるバージョンが共存しているのか、そこがわかりません。

      さて、本件の経過についてですが、まず08-04-servo.pyはWiringPi2-Pythonが用いられているため、
      08-04-servo.pyのうち、import wiringpi2 as wiringpiの部分をimport wiringpiに書き換えたファイル(08-04-servo2.py)で確認を行いました。

      管理者権限なしに実行した場合、
      pi@raspberrypi:~/bluebacks $ python 08-04-servo2.py
      pinMode PWM: Unable to do this when using /dev/gpiomem. Try sudo?
      と表示され、WiringPi-Pythonが適切にインストールされていることが確認できます。

      次に管理者権限つきで実行した場合、
      pi@raspberrypi:~/bluebacks $ python 08-04-servo2.py
      pinMode PWM: Unable to do this when using /dev/gpiomem. Try sudo?
      pi@raspberrypi:~/bluebacks $ sudo python 08-04-servo2.py
      08-04-servo2.py:55: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(SPICLK, GPIO.OUT)
      08-04-servo2.py:56: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(SPIMOSI, GPIO.OUT)
      08-04-servo2.py:58: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(SPICS, GPIO.OUT)
      と表示され、サーボモーターが無事動作いたしました。

      しかし、今度は翻って、スタートメニューからPythonを起動し、同ファイルを実行した場合、回路は機能しませんでした。

      つまり、LXTerminalから実行した場合、Python 2.7.13 Shellにおいてファイルは実行され、回路は機能いたしましたが、
      スタートメニュー(プログラミング→Python3(IDLE))から実行した場合、Python3.5.3 Shellにおいてファイルは実行され、回路は機能しませんでした。

      これらのことから、Pythonのバージョンの違いが問題に関係しているようなのですが、それがなぜなのか、またなぜ異なるバージョンが共存しているのか、私にはわかりません。
      これが今後進める上で障害になるのなら、解決したいと存じます。
      ご確認のほど何卒よろしくお願い致します。

      削除
    3. Raspberry Piにはデフォルトでpython2 と python3 の両方、
      すなわち2つのバージョンがインストールされています。
      現在のRaspbianでは、お試しいただいたようにコマンド「python」を実行すると
      python2が実行されるようになっています。

      次に、開発環境のidleについてですが、こちらについても
      python2用とpython3用が存在します。
      これらをコマンドで実行する場合、
      python2用のidleはコマンド「idle」で
      python3用のidleはコマンド「idle3」で起動します。

      ややこしいのはここからなのですが、メニューから起動できるidleは
      2018年6月より「python3用であるidle3のみ」となっています。

      メニューから「python2用であるidle」を起動する方法は残されていて、
      下記のページで解説されています。
      本書の内容は、python3でも動作確認していますが、
      python2での実行を推奨しています。
      (その理由は本コメントの末尾で記します)

      Raspberry Piで学ぶ電子工作補足情報
      p.89:NOOBS 2.8.2以降におけるIDLEの起動について
      https://raspibb.blogspot.com/2016/02/blog-post.html

      なお、昨日記しました通り、WiringPi-Pythonを用いるプログラムの実行には
      管理者権限が必要です。
      そのため、メニューから起動したidleではWiringPi-Pythonを用いるプログラムを
      実行できません。
      python2用でしたらコマンド「sudo idle」で、
      python3用でしたらコマンド「sudo idle3」で
      起動しなければなりません。
      これは、(python2用については)旧版(白黒版)書籍のp.89に記されてていることです。

      最後に、昨日紹介したWiringPi-Pythonのインストール法は、
      python2用のインストール方法でした。

      python3用にWiringPi-Pythonをインスト―ルするには、
      以下を追加で実行する必要があります。
      昨日のインストール後にWiringPi-Pythonディレクトリが残っていると仮定します。
      その後、下記の2コマンドを順に実行してください。

      cd WiringPi-Python
      sudo python3 setup.py install

      1つ目のコマンドで既存のWiringPi-Pythonディレクトリ内に移動し、
      2つ目のコマンドでインストールを行っています。このコマンドが
      「python」ではなく「python3」で実行されていることがポイントです。

      なお、上で「python2での実行を推奨」と書いたのは、
      このWiringPi-Pythonのように、ツールのインストール方法を
      python2用のインストール方法しか書籍に記していないためです。

      削除
  34. ご返信ありがとうございます。
    引き続き本書で勉強させていただきます。

    返信削除
  35. こんにちは。
    RaspberryPi電子工作に関する著書2冊を読み終え、大変勉強になっております。
    それを踏まえて2点質問がございます。

    本書10章では、タクトスイッチによるシャットダウン機能が紹介されていますが、個人的には、それに加えて、電源を入れる機能も付加したいと考えております。
    そこで本書で紹介された方法(ファイル/etc/rc.local にファイルを保存する)以外に、ディスプレイやキーボード等を接続せずにラズパイを運用する方法はございますか。
    個人的にはラズパイを(ディスプレイやキーボード等を接続せずに)IoT機器のように運用したいと考えているので、もし有益な方法がございましたらご教授頂ければと存じます。

    また、2冊の著書を通じてハード面での理解は進んだのですが、ソフト面(プログラム)については理解が及ばない点も多々ございます。
    そこでラズパイ電子工作でのプログラム(プログラミング)を習得するにあたって、有益な書籍等がございましたらご教授いただければと存じます。

    よろしくお願い致します。

    返信削除
    返信
    1. 電源をオンする方法は、検索すれば
      「GPIO3(SCL)とGNDを接続する」という方法が出てきます。

      一度Raspberry Piをシャットダウンし、
      その状態で
      「GPIO3(SCL)とGNDを接続→接続を離す」
      とすることでRaspberry Piの電源が入ることを確認できました。

      また、電子工作とは関係ない範囲での
      Pythonプログラミングでしたら、下記は学びやすいのではないでしょうか。

      実践力を身につける Pythonの教科書
      https://www.amazon.co.jp/dp/4839960240/
      入門者のPython
      https://www.amazon.co.jp/dp/4065131634/

      Pythonの基礎を身に着けた上で本書の電子工作プログラムを見直せば
      新たな発見があるのではないかと思います。

      なお、HTML/JavaScriptについては
      私は体系的な知識を持っているわけではないので、
      お勧めできる勉強法などはお伝えできません。
      ご了承ください。

      削除
  36. raspberry piで学ぶ電子工作を昨年から購読して、第一章〜九章まで行いました。10章は部品を購入して、無く実施しておりません。
    そのおかげでpythonを勉強する事が出来ました。ありがとうございます。そこでプログラムソースコードで教えて頂きたい事があります。
    07-02-LCD.pyの一部のプログラムソースになります。
    1) c_lower = (contrast & 0xf)
    2) c_upper = (contrast & 0x30)>>4
    3) 0x70|c_lower
    4) 0x54|c_upper

    1)c_lower = (contrast & 0xf)
      (contrast=36)は0b100000と思います
    st7032データシートを確認しても0xfの記載を発見出来ませんでした
      0xfは、chracter codeの下位bit(b3-b0)からの0fでしょうか?
    また、計算は下記の意味でしょうか
       0b100000
     &0b1111
    (0b100000) =c_lower

    2) c_upper = (contrast & 0x30)>>4
    0x30は,st7032データシートのどのコマンド命令なりますか
    計算式も教えて下さい
      0b100000
    &0b00110000
            ・・・?その後に右シフト4

    下記の計算式も教えて下さい
    3) 0x70|c_lower
    4) 0x54|c_upper
       それと、失礼ながら0x54は、0x56では無いでしょうか
    contrast設定のc5 c4 c3 c2 c1 c0(0b100000)から0x56と推測します

    *投稿すると2進数の位置がズレることをお詫び致します

    返信削除
    返信
    1. 結論としましてはプログラムは正しいです。

      注意すべきことは、仕様書ではcontrast=32を送る例が記されていますが、
      プログラムでは任意のcontrastを送ることにできるようになっていることです。

      そして、プログラムでは変更可能なcontrastのデフォルト値として
      contrast=36を採用しています。
      (それくらい大きな値にしないと文字が読みにくいLCDがあるからです)

      このcontrastは、仕様書の中の
      C5, C4, C3, C2, C1, C0
      の6ビットに対応します。

      仕様書中で見てほしい位置を以下の写真に記します。
      長いアドレスをうまくコピーして見ていただくとわかりやすいと思います。

      https://1.bp.blogspot.com/-6DJWbYIWb3U/XQyR2Y_BGhI/AAAAAAAAGzE/5PDqrEv0vecP7y0fbb-13n3Mykr513VdgCLcBGAs/s1600/IMG_20190621_170555%257E2.jpg


      順に解説します。

      contrast(36) = 0010_0100
      0xf = 0000_1111
      0x3 = 0011_0000

      ですので、

      c_lower = (contrast & 0xf)

      0010_0100 & 0000_1111 = 0000_0100
      のように、contrastの下位4ビットのみを取り出します。
      これが、仕様書でいうC3, C2, C1, C0になります。

      また、
      c_upper = (contrast & 0x30)>>4
      はまず
      0010_0100 & 0011_0000 = 0010_0000
      のように上位4ビット(実際には上位4ビット中の2ビット)を抜き出します。
      それを>>4により右に4ビットシフトしますので、
      c_upper = 0010
      となります。このうち下位二ビットの01が仕様書のC5, C4になります。

      そのようなわけで、仕様書に書かれているのは
      あくまでcontrast=32の時の例にすぎないことにご注意いただければ
      理解しやすいかと思います。

      削除
    2. 上の長いアドレスは一行ですのでご注意ください

      削除
    3. 質問のご返答ありがとうございます。 また、返信が遅れまして申し訳ありません。
      詳細の説明をありがとうございます。
      0x54|c_uppeは、0x54でした。誠に失礼致しました。
      contrast=36=0010_0100がポイントでした。
      また、0xf = 0000_1111を1111_0000と勘違いしておりました。
      これで、初期化のcontrast set=0x74と
      power/icon/contrast control=0x56が
      contrast=36を送信していると理解致しました。

      初期化のcontrast set=0x74になる
      初期化のpower/icon/contrast control=0x56になる
      認識で宜しいでしょうか?それとも、間違いでしょうか

      以上、宜しくお願い致します。



                

      削除
    4. > 初期化のcontrast set=0x74になる
      > 初期化のpower/icon/contrast control=0x56になる
      > 認識で宜しいでしょうか?それとも、間違いでしょうか

      contrast=36の場合はそれで正しいと思います。

      削除
  37. ご返信ありがとうございます。
    これからも、少しづつになりますが、
    pythonや本書を勉強させて頂きます。

    以上、宜しくお願い致します

    返信削除
  38. 08-04-servo.pyにてこのようなエラーが出ました。Unable to do this when using /dev/gpiomem. Try sudo? wiringpiは入れてあるのですがどうもできません

    返信削除
    返信
    1. エラーメッセージに書かれておりますように、08-04-servo.pyの実行には
      sudo (管理者権限)が必要でs。

      https://raspibb.blogspot.com/2016/02/blog-post.html
      p.216:WiringPi2-Pythonを用いたプログラムの実行について

      に記されているように、下記のどちらかの方法で管理者権限で 08-04-servo.py を実行してください。

      (1)管理者権限のThonnyで実行
      ターミナルで下記コマンドを実行し、管理者権限の Thonnyを開きます。

      sudo thonny &

      この Thonny で 08-04-servo.py を開いて実行すれば
      管理者権限での 08-04-servo.py の実行となります。

      (2) 管理者権限のPython3コマンドで実行
      ターミナルで以下のコマンドを実行すれば
      管理者権限での 08-04-servo.py の実行となります。

      sudo python3 08-04-servo.py

      削除
  39. 最近ラズベリーパイ3b+を購入したものです。ラズベリーパイで学ぶ電子工作の第4章のプログラミングによるLEDの点滅でThonnyでプログラムを本通りに書き、書き写しに間違いがないかを確認したうえで実行しようとすると、下のようなエラーが何回試しても出てしまいます。
    Traceback (most recent call last):
    File "/home/pi/circle2.py", line 5, in
    GPIO.setup(25, GPIO.out)
    AttributeError: module 'RPi.GPIO' has no attribute 'out'
    どうすれば実行できるでしょうか?

    返信削除
    返信
    1. outの部分は、下記のように大文字でお書きください。
      GPIO.setup(25, GPIO.OUT)

      このように、書き間違いがあり得ますので、本書では、
      サンプルファイルをダウンロードして利用することを推奨しています。

      もちろん、書き写す方が学習効果は高いのですが、
      正解が手元にあった方が効率は上がるのではないかと思います。

      ダウンロード元は、お手持ちの書籍により異なります。
      お手持ちの書籍に対応したサンプルファイルをダウンロードしないと
      動作しないことがあり得ますのでご注意ください。

      旧白黒版(2014/11刊)のサンプルファイル
      https://bluebacks.kodansha.co.jp/books/9784062578912/appendix/

      旧カラー版(2016/7刊)のサンプルファイル
      https://bluebacks.kodansha.co.jp/books/9784062579773/appendix/

      新カラー版(2020/6)のサンプルファイル
      https://bluebacks.kodansha.co.jp/books/9784065193396/appendix/


      なお、本コメント欄は、旧白黒版(2014/11刊)の補足ページ内にあります。
      もし違うバージョンの書籍をお持ちでしたら、
      対応した補足ページを利用されることをお勧めします。

      旧白黒版(2014/11刊)の補足ページ
      https://raspibb.blogspot.com/

      旧カラー版(2016/7刊)の補足ページ
      https://raspibb1.blogspot.com/

      新カラー版(2020/6)の補足ページ
      https://raspibb1a.blogspot.com/

      削除
  40. ラスパイ4で、第9章のwebiopのConfigを変更したあとに、webiopi動作できず、sudo webiopi -d -c /etc/webiopi/configで調べてみたら、AttributeError: module 'webiopi' has no attribute 'GPIO'となっています。どうしたらよろしいでしょうか?

    返信削除
    返信
    1. niuniupepeさんの状況をもう少し詳しくお知らせください。

      まず、用いているOSは、Raspberry Pi OS (32bit) の最新版でしょうか?

      また、「webiopのConfigを変更したあとに」とありますが、
      その前の内容、例えば
      「9.2.4 WebIOPiのデモアプリケーションの実行」
      は問題なくできたのでしょうか?

      つまり、
      「WebIOPiのデモアプリケーションは問題なく動いたが、
      configを書き替えた後に問題が起こった」のか、
      あるいは
      「WebIOPiのデモアプリケーションの時点で問題が起こった」
      のかどうかを知りたい、ということです。

      また、「sudo webiopi -d -c /etc/webiopi/config」というコマンドを実行した
      というのも気になります。なぜなら、上記コマンドは本書、
      およびそのサポートサイトでは紹介していないコマンドだからです。
      ネット上で WebIOPi の使用法を書いているサイトがあったとしても、
      その情報は古くなっているかもしれませんし、本書およびサポートサイトに
      記した内容と矛盾があるかもしれませんのでご注ください。

      さて、本書「Raspberry Pi で学ぶ電子工作」には、
      「白黒版 ( https://raspibb.blogspot.com )」
      「カラー版 ( https://raspibb1.blogspot.com )」
      「カラーラズパイ4対応版 ( https://raspibb1a.blogspot.com )」
      の3バージョンあり、サポートサイトはそれぞれ異なります。
      niuniupepeさんが質問を書いてくださったこのページは
      白黒版のサポートサイトですのでご注意ください。

      どのバージョンのサポートサイトでも、WebIOPiの正しいインストールと
      実行方法は記されておりますが、以下では、最新の
      「カラーラズパイ4対応版 ( https://raspibb1a.blogspot.com )」
      のサポートサイトの内容をベースに記していきます。

      さて、WebIOPiを正しく動作させるには、以下の3つが正確に実行されている必要があります。

      (1) サポートサイトに基づき、最新の方法でWebIOPiをインストールしていること
      (2) configを変更する場合、記述した myscript 行が正しいこと
      (3) Pythonファイル script.py が myscript 行に指定した位置に存在すること

      これらの条件を満たす方法を以下に記します。

      まず、
      「(1) サポートサイトに基づき、最新の方法でWebIOPiをインストールしていること」
      について。

      これは、下記ページをもとにWebIOPiのインストールすれば実現できます。

      書籍で用いたコマンドおよび補足情報
      (p.228, WebIOPi のインストールコマンド)
      https://raspibb1a.blogspot.com/2020/04/blog-post.html

      該当箇所に「(1)~(6)の6コマンド」および「(1)~(2)の2コマンド」
      がありますので、これらをコピー&貼り付けなどにより
      ターミナルで確実に実行する必要があります。

      「もう一度やり直したい場合」の「(1)~(2)の2コマンド」は
      必要な時のみ実行してください。

      次に
      「(2) configを変更する場合、記述したmyscript行が正しいこと」
      について。

      本書では、myscript行として

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

      を記すことになっております。

      この内容を一文字でも間違うと実行できませんので、
      コピー&貼り付けにより、myscriptの行を正確に書き換えるのが確実です。

      最後に、「(3) Pythonファイル script.py が myscript 行に指定した位置に存在すること」について。

      上記のmyscript行を書き込んだ状態で
      WebIOPiが正常に起動するためには、

      「script.py」というPythonファイルが、
      「/usr/share/webiopi/htdocs/bb/01/」という位置に存在すること
      が満たされる必要があります。

      それを実現するのは、上記補足ページ
      (p.241, サンプルファイルを WebIOPi のフォルダにコピーするコマンド)
      にコピーできる形で記した

      sudo chown -R pi /usr/share/webiopi/htdocs
      cp -r 09-samples/bb /usr/share/webiopi/htdocs

      の2コマンドです。こちらはターミナル上で実行するものであり、
      コピー&貼り付けで確実に実行するのが安全です。

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

      削除