2024年1月27日土曜日

読者の方々の声

本ページでは、読者の方々のレビューなどをご紹介したいと思います。

紹介記事


ご紹介に感謝



以下、twitterでの反応をまとめます。













48 件のコメント:

  1. 4章のLCD表示で使用する秋月の完成キット(M-09109、AQM0802A-RN-GBW)ですがPi2-Bと相性が悪いようです。SDAを2K程度でプルダウンしないとi2cdetectで認識しません。

    返信削除
  2. すいません、記述が間違っていました。
    変換基板上のプルアップ(10K)は有効になっています。(デフォールトのままです)この状態でADT7410は認識しますがLCDは認識しません。
    現状ではLCDのSDAのみに2kほどはさんでGNDに落とすとLCD、温度計とも正常に認識して動作しています。たびたび申しわけありませんが、ご報告まで。

    返信削除
    返信
    1. 私のほうにもLCDが届きましたので、検証してみました。

      結論から述べますと、KBJさんと全く同じ状況でした。すなわち、
      「i2cdetectで認識しない。SDAとGNDを2kΩで結ぶと正常動作する」です。

      これはKBJさんにお知らせいただけなければ知ることができなかったことですので、とても助かりました。ありがとうございます。

      原因は、LCDの仕様書などを見てもよくわからず、現時点ではLCDの個体差ではないか、としか言いようのない状況です。

      対処法については、少し調べた結果をお知らせします。

      まず、これまで述べてきたように、LCDには基板のプルアップを有効にした「PUあり」と無効にした「PUなし」という2状態が存在します。完成品を購入すると「PUあり」です。

      そして、SDAとGNDを結ぶ抵抗の大きさをRとしますと、Rとして許されるのはおよそ下記のようでした。
      PUあり:ほぼ2kΩのみ
      PUなし:2kΩ~4kΩ(5kΩにするとI2Cの通信エラーがやや増える)

      既に述べました通り、SDAとGNDを抵抗で結びますと、小さいながらも電流が流れ続けますので(「PUあり、R=2kΩ」で0.93mA、「PUなし、R=4kΩ」で0.57mA)、Rとしては大きい抵抗を用いるのが望ましいでしょう。

      以上から、私としましては、
      「LCDのPU部のはんだを除去し、SDAとGNDを結ぶ抵抗を4kΩか5kΩ程度にする」
      ことをお勧めします。

      ところで、「SDAとGNDを2kΩで結ぶ」というKBJさんの対処法はどのようにして思いついたのでしょうか?私では思いつきそうにありませんので、少し気になりました。

      削除
  3. 再現させていただいてありがとうございました。
    原因はよくわかりませんが、分圧してSDAの電圧を下げると
    ACKを認識するのはないかと考えました。
    Pi2-Bの応用可能性について、今後もご指導をお願いします。

    返信削除
  4. 突然おじゃまします。
    私も同じ問題で頭を悩ませていたのですが
    現時点での解決方法をまとめました。

    http://itoi.jp/raspberrypi.html

    返信削除
    返信
    1. 秋月の回答(FXMA2102を用いる方法)を試してみましたが、LCDは認識されませんでした。

      これを用いても「今まで動いていたLCDは動くが、動かないLCDはやはり動かないまま」という結果です。

      現時点ではKBJ様が上で書かれている方法でしか動作に成功していない、といったところです。

      削除
    2. いろいろ調べて頂いてありがとうございます。m(_ _)m

      FXMA2102を用いる方法を私も試したのですが
      認識しませんでした。
      2個作って複数の液晶で試しました。

      秋月の公式がクローズされた事と合わせると
      この対応では対処出来ないみたいですね。

      またKBJ様の対処方法で認識することは確認しました。
      ただし私の持っている個体ではチャージポンプが動作した後
      認識出来なくなりました。電源断で再度認識します。

      バックライトありの個体ではKBJ様の対処方法でも認識しませんでした。

      削除
    3. Raspberry Piで動作しないLCDについて、秋月電子より回答を頂きました。
      「LCDの新しいロットでは電流の引き込み能力が低いためACK信号が十分小さくならず、Raspberry Piで認識しない」、
      「Raspberry Piで動作させるには、Raspberry Piの基板上の1.8kΩのプルアップ抵抗を取り外し、別途10kΩのプルアップ抵抗を取り付ける(私は試すつもりはありませんが、ショップでは確認済だそうです)」、
      「今後Raspberry Piで動作するLCDが用意できれば(別商品かもしれません)、Webに明記して販売する」
      だそうです。

      ストロベリーリナックスで売られている類似のLCDで同じ問題が起こる可能性があるかどうかについては「わからない」とのことです。

      取り急ぎ以上です。

      削除
  5. 調査していただいてありがとうございます。
    ACKの仕様について結果がわかったら教えてください。

    返信削除
    返信
    1. Raspberry Piで動作しないLCDについて、秋月電子より回答を頂きました。
      「LCDの新しいロットでは電流の引き込み能力が低いためACK信号が十分小さくならず、Raspberry Piで認識しない」、
      「Raspberry Piで動作させるには、Raspberry Piの基板上の1.8kΩのプルアップ抵抗を取り外し、別途10kΩのプルアップ抵抗を取り付ける(私は試すつもりはありませんが、ショップでは確認済だそうです)」、
      「今後Raspberry Piで動作するLCDが用意できれば(別商品かもしれません)、Webに明記して販売する」
      だそうです。

      ストロベリーリナックスで売られている類似のLCDで同じ問題が起こる可能性があるかどうかについては「わからない」とのことです。

      取り急ぎ以上です。

      削除
    2. 情報ありがとうございます。秋月電子さまには長くお世話になっておりますが… 現時点で仕様?変更に近い状況に関して告知しないことはちょっと優しくない(らしくない)対応だと思います。ストロベリーリナックスの製品は数個確認しましたが同様の問題は起きていません。

      削除
    3. 中国のメーカーからの回答の直後に電話で取り急ぎ連絡を下さった、という形でしたので、Webにはいずれ掲載されるのではないかと思います。

      また、電話での口頭のみでのお話だったので書こうか迷ったのですが、Raspberry Piユーザーで動作しなかったという方には返金も考えている、というお話でしたので、アプローチしてみると良いかもしれません。
      (私は動作しないものは1つしか持っていませんので、資料として持っておこうと思っています)

      削除
    4. お久しぶりです。小型LCD(AQM0802)について、既に解決済みとは思いますが、小型LCD(AQM0802)の新しいロットがRaspberry Piで動作しない件について、正式な対処法が公開されましたのでお知らせします。

      本書発売後の追加情報
      http://raspibb2.blogspot.jp/2015/12/blog-post.html

      において、

      p.108:完成品のLCDを購入しても認識されない場合の対処法
      <LCD対処法:予備知識>
      <LCD対処法:暫定版>
      <LCD対処法:正式版(ただし上級者向け)>
      の順で記しましたので、ご参考ください。

      この「正式版」で用いられているI2Cリピーターは、トランジスタ技術8月号付録の基板でも用いられているものです。
      http://toragi.cqpub.co.jp/tabid/807/Default.aspx

      削除
    5. お久しぶりです。秋月電子通商さんより、Raspberry Piで正式に利用可能なLCDモジュールが発売されたので解説を追加しました。

      http://raspibb2.blogspot.jp/2015/12/blog-post.html
      の「4章全般:利用できるLCDについて1~秋月電子編」です。

      削除
  6. ご丁寧にありがとうございます。m(_ _)m 製品説明にも公式にコメントされていました。

    返信削除
    返信
    1. お久しぶりです。小型LCD(AQM0802)について、既に解決済みとは思いますが、小型LCD(AQM0802)の新しいロットがRaspberry Piで動作しない件について、正式な対処法が公開されましたのでお知らせします。

      本書発売後の追加情報
      http://raspibb2.blogspot.jp/2015/12/blog-post.html

      において、

      p.108:完成品のLCDを購入しても認識されない場合の対処法
      <LCD対処法:予備知識>
      <LCD対処法:暫定版>
      <LCD対処法:正式版(ただし上級者向け)>
      の順で記しましたので、ご参考ください。

      この「正式版」で用いられているI2Cリピーターは、トランジスタ技術8月号付録の基板でも用いられているものです。
      http://toragi.cqpub.co.jp/tabid/807/Default.aspx

      削除
    2. お久しぶりです。秋月電子通商さんより、Raspberry Piで正式に利用可能なLCDモジュールが発売されたので解説を追加しました。

      http://raspibb2.blogspot.jp/2015/12/blog-post.html
      の「4章全般:利用できるLCDについて1~秋月電子編」です。

      削除
  7. 前作に続き、今作も非常に楽しませてもらっています。ありがとうございます。
    しつもんなのですが、
    6.6.1 mjpeg-streamerのインストールと起動
    の、コマンド
    (3) git clone https://・・・
    を実行すると、ユーザー名とパスワードを求められます。ここには何を入力すればよいのでしょうか。

    返信削除
    返信
    1. (3)のコマンドですが、少し長いので、打ち間違えるとユーザー名とパスワードが求められます。コピーできるように以下に全てのコマンドを書いてみると以下のようになるでしょうか。
      (このスペースも横幅が狭いので折り返しが出来てしまうかもしれませんが)

      (1) sudo apt-get update
      (2) sudo apt-get install libjpeg8-dev cmake
      (3) git clone https://github.com/jacksonliam/mjpg-streamer.git
      (4) cd mjpg-streamer/mjpg-streamer-experimental
      (5) make
      (6) cd
      (7) sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer

      なお、この章ですが、「p.228:WebIOPiの起動に失敗する問題」に注釈を記しましたように、WiringPi2-Pythonを対策済みのものをインストールし直さないと動作しない可能性があります。合わせてご確認ください。

      削除
    2. 打ち間違えだったようです。大変ご迷惑をおかけしました。おかげでちゃんと動作するようになりました。
      お忙しい中ありがとうございました。

      削除
  8. 根本的な解決策ではないですが、ソフトウェアI2CによりRasPi3BでAQM0802Aを動かしてみました。
    AQM0802Aを購入されたのに動作をあきらめた方もいると思いましたので参考になればと考え公開してみました。
    ※直リンクに変更しました。
    http://firewall.asablo.jp/blog/2016/07/18/8133829

    返信削除
    返信
    1. お知らせ頂き、ありがとうございます。

      本ページのコメント欄、ややツリーが複雑化して見にくくなってきました。
      AQM0802AをRaspberry Piで動かすための情報は
      http://raspibb2.blogspot.jp/2015/12/blog-post.html
      の「p.171:完成品のLCDを購入しても認識されない場合の暫定的な対処法」にまとめておりますので、合わせてご覧ください。

      よろしくお願いします。

      削除
    2. お久しぶりです。秋月電子通商さんより、Raspberry Piで正式に利用可能にしたLCDモジュールが発売されたので解説を追加しました。

      http://raspibb2.blogspot.jp/2015/12/blog-post.html
      の「4章全般:利用できるLCDについて1~秋月電子編」です。

      削除
  9. 本ページのコメント欄ですが、ツリーがやや複雑化して見にくくなってきました。
    流れを損なわない範囲で、いくつかのコメントを削除させて頂きました。ご了承ください。

    また、LCDであるAQM0802AをRaspberry Piで動かすための情報は

    http://raspibb2.blogspot.jp/2015/12/blog-post.html

    の「p.108:完成品のLCDを購入しても認識されない場合の暫定的な対処法」にまとめましたので、合わせてご覧ください。

    返信削除
  10. はじめまして。
    lircのリモコン作れました。感動です!
    今はAmazon Alexaを入力にして、IFTTT、beebotteを経由して作ったラズパイリモコンでテレビを操作しています。快適です。

    ところで、一点質問があります。
    テレビリモコンではテレビがつくのに、ラズパイリモコンではテレビがつきません。
    ※テレビがついている状態で電源オフはできます。

    確認すべき点など、アドバイスいただけないでしょうか。

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

      テレビの電源はlircd.conf内で「power」というコマンドで制御するようにしています。
      ご質問の内容は、この「power」コマンドが、
      電源オフ時には機能するが、電源オン時には機能しない、ということでしょうか?

      経験のない状況ですので、どこに問題があるのかを特定したいところです。

      まず、Raspberry Piのみで、すなわち、ターミナルで以下のコマンドを実行したとき、
      テレビのオンオフの両方は行えるでしょうか?
      それともオフしか行えないのでしょうか?

      irsend SEND_ONCE TV power

      もし上記コマンドで、「オンオフの両方が行える」場合、
      Amazon AlexaからRaspberry Piへの処理の過程で何か問題が起こっていると考えられます。

      もし、上記コマンドでもやはり「オフしか行えない」場合、
      Raspberry Pi + LIRC側に問題がありそうです。

      まず、書籍にあるように、

      irsend -# 2 SEND_ONCE TV power

      と「-# 2」とオプションを付けてみると何か変わらないでしょうか。
      これは「powerに対応する波形を2回送る」という意味になるので、
      数字の部分は変更して構いません。

      ただし、テレビの機種によっては「-# 2」によって
      テレビのオンとオフが一回ずつ実行される、
      という挙動になるので、このオプションを使うか使わないか、
      お使いのテレビに応じて判断する必要があります。

      上記オプションでも状況が改善しない場合は、
      テレビの「オン信号」と「オフ信号」が異なる、という可能性はあるのかもしれません。
      その場合、「オン」の信号と「オフ」の信号を別々にLIRCに登録する必要があります。

      なお、「オン信号とオフ信号が異なるテレビ」が実際に存在するのか、
      私は聞いたことがないのですが、
      テレビ以外の家電(例えばオーディオ機器)ではそのような機種は存在するそうです。

      削除
    2. アドバイスありがとうございます。

      irsend -# 2 SEND_ONCE TV power
      をターミナルから実行することでテレビを
      起動する事ができました。

      使用しているテレビはSHARP製で
      「クイック起動設定」という機能があり、
      この設定とLIRCコマンドが関係してるように
      みえましたので、ご報告いたします。

      以下、ターミナルからコマンド実行した結果です。

      ▪️クイック起動設定がオンの場合
      ⇒ irsend SEND_ONCE TV power を使用
      電源オン:◯ 電源オフ:◯

      ▪️クイック起動設定がオフの場合
      ⇒ irsend SEND_ONCE TV power を使用
      電源オン:X 電源オフ:◯

      ⇒ irsend -# 2 SEND_ONCE TV power を使用
      電源オン:◯ 電源オフ:◯

      理由はわかりませんが、このような結果になりました。

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

      確かに、「クイック起動設定」の内部の仕組みがわからないと
      なんとも言えませんが、それでも期待した動作が得られたようで
      良かったです。

      削除
  11.  初心者の私には「実例で学ぶRaspberry Pi電子工作}と「カラー図解 最新 Raspberry Piで学ぶ電子工」とてもわかりやすい書籍いろいろと参考にさせて頂いております。
     今回はアドバイスが頂けたらと思い投稿させて頂きました。
     解析したテレビリモコンの信号を利用してRaspberryのGPIOを制御する。例えば「Raspberry Piで学ぶ電子工作」のキャタピラ式模型をテレビリモコンで動かしたいのですがどのようにすればよいのかアドバイスをお願いします。
     /etc/lirc/lircrc に
    begin
    prog = irexec
    button = POWER
    config = sudo shutdown -h now
    end
    のように設定しておくと、LIRCの起動と同時にirexecというプログラムが起動し、赤外線の信号を受け付けるというのもネットから調べしたが、それぞれのリモコンキーに対応させて、模型を前後左右に動かすようなところまではこれではむずかしいのではないか。解析した信号をPythonのプログラムで利用できる方法を是非教えてください。よろしくお願いします。

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

      書籍の範囲外の内容ですので、アイディアのみのお知らせになること、
      そして、私はlircrcを使ったことがないので動作の保証はできないこと、
      の2点をご了承ください。

      lircrcの方式に従うのであれば、
      「実行すると機体が前進するプログラム (例えば forward.py)」
      「実行すると機体が後退するプログラム (例えば backward.py)」
      「実行すると機体が停止するプログラム (例えば stop.py)」

      のように、一つ一つの動作に対応するプログラムが個別に必要になります。

      そして、リモコンのコマンド一つ一つに上記のプログラムの動作を割り当てます。
      例えば、下記のように実行したいコマンドの分だけ
      begin~endを列挙することになるでしょうか。
      (button 名は仮のものです)

      begin
      prog = irexec
      button = POWER
      config = python /home/pi/forward.py
      end

      begin
      prog = irexec
      button = VOLUME
      config = python /home/pi/backward.py
      end

      begin
      prog = irexec
      button = CHANNEL
      config = python /home/pi/backward.py
      end


      問題は、forward.py、backward.pyなどをどう作るかですが、
      これには、以下に示すように
      Pythonプログラミングと電子工作についての知識が
      それなりに必要になります。

      まず、これらのプログラムは
      「プログラムはモーターに指令を出した後に終了し、
      その後モーターはその指令に従って動き続ける」
      という条件を満たす必要があります。

      この条件を満たし、なおかつ最も簡単な実現方法は、
      「速度制御をせず(PWM制御を行わず)、
      HIGH/LOWの組み合わせのみで制御を行う」という方式です。
      PWMを用いようとすると難易度が一気に上がります。

      さて、キャタピラ式模型の場合、前進のためのfoward.pyプログラムは、
      モーター2個に4つの入力が必要になりますので下記のようになるでしょう。

      import RPi.GPIO as GPIO

      GPIO.setmode(GPIO.BCM)

      GPIO.setup(25, GPIO.OUT)
      GPIO.setup(24, GPIO.OUT)
      GPIO.setup(23, GPIO.OUT)
      GPIO.setup(22, GPIO.OUT)

      GPIO.output(25, GPIO.HIGH)
      GPIO.output(24, GPIO.LOW)
      GPIO.output(23, GPIO.HIGH)
      GPIO.output(22, GPIO.LOW)

      25ピンから22ピンに対するHIGH/LOWの組み合わせは
      カラー版Raspberry Piで学ぶ電子工作のp.199図8-10に
      基づいています。HIGH(1)とLOW(0)の組み合わせで
      モーターを正転させているわけです。

      なお、この正転ではモーターの回転が速すぎるという場合、
      乾電池の数を4個から3個に減らすなどすると良いでしょう。
      PWMで速度調整しようとすると難易度が上がってしまいますので、
      電池の数で速度を調節するわけです。

      同様に、静止用のstop.pyは下記のようになるでしょう。

      import RPi.GPIO as GPIO

      GPIO.setmode(GPIO.BCM)

      GPIO.setup(25, GPIO.OUT)
      GPIO.setup(24, GPIO.OUT)
      GPIO.setup(23, GPIO.OUT)
      GPIO.setup(22, GPIO.OUT)

      GPIO.output(25, GPIO.LOW)
      GPIO.output(24, GPIO.LOW)
      GPIO.output(23, GPIO.LOW)
      GPIO.output(22, GPIO.LOW)

      LOW(0)とLOW(0)の組み合わせでモーターは静止します。

      なお、LIRCと組み合わせる場合、
      「実例で学ぶRaspberry Pi電子工作」ではLIRCを用いる際に
      25番ピンと24番ピンをLIRC用途で用いていますので、
      かぶらないよう、別のピンに振り替える必要がありますので
      ご注意ください。

      以上、アイディアのみをお示ししました。

      削除
  12. 「カラー図解 最新 Raspberry Piで学ぶ電子工作」補足情報
    p.209:WiringPi-Pythonのインストールコマンド
    (1) sudo apt-get update
    (2) sudo apt-get install python-dev python-setuptools swig
    (3) git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
    (4) cd WiringPi-Python/WiringPi
    (5) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/wp-pwm-warning.patch
    (6) patch -p2 -i wp-pwm-warning.patch
    (7) sudo ./build
    (8) cd ..
    (9) swig -python wiringpi.i
    (10) sudo python setup.py install
    PDF20:Python3用WiringPi-Pythonのインストールコマンド
    (1) sudo apt-get update
    (2) sudo apt-get install python3-dev python3-setuptools
    (3) cd WiringPi-Python
    (4) swig -python wiringpi.i
    (5) sudo python3 setup.py install

    「実例で学ぶRaspberry Pi電子工作」補足情報
    p.193:WiringPi2-Pythonのインストールコマンド
    (1) sudo apt-get update
    (2) sudo apt-get install python-dev python-setuptools
    (3) sudo apt-get install python3-dev python3-setuptools
    (4) git clone https://github.com/neuralassembly/WiringPi2-Python.git
    (5) cd WiringPi2-Python
    (6) sudo python setup.py install
    (7) sudo python3 setup.py install

    質問1
     上記のgit clone --recursive https://github.com/WiringPi/WiringPi-Python.gitとgit clone https://github.com/neuralassembly/WiringPi2-Python.gitの部分で使用しているものは
    共にPython2用のWiringPi-Pythonのようなのですが、別物なのでしょうか。
     「カラー図解 最新 Raspberry Piで学ぶ電子工作」と「実例で学ぶRaspberry Pi電子工作」でPython2用のWiringPi-Pythonが違うのでしょうか。出来れば、Python2用のWiringPi-Pythonを一箇所にインストールして利用したいと考えますが、「カラー図解 最新 Raspberry Piで学ぶ電子工作」でのインストールだけでは「実例で学ぶRaspberry Pi電子工作」のプログラムはうごかないのでしょうか。うまく統一する方法があれば教えてください。

    質問2
     OpenCV を Python 3 で用いる方法を教えていただけないでしょうか。

    変な質問で申し訳ありませんが、よろしくお願いします。

    返信削除
    返信
    1. ご質問ありがとうございます。
      WiringPi-PythonとWiringPi2-Pythonは
      Python2/Python3のバージョンと関係があるわけではなく、
      下記のような意味があります。

      WiringPi2-Python:WiringPiをPythonで用いるツールの旧バージョン
      (Python2でもPython3でも使える)

      WiringPi-Python:WiringPiをPythonで用いるツールの新バージョン
      (Python2でもPython3でも使える)

      WiringPi2-Pythonの方が旧バージョンというのは奇異に思えるかもしれませんが、
      それが正しいです。

      ですから、統一するならカラー版で紹介した新バージョン、すなわち
      WiringPi-Pythonが良いでしょう。

      2つのバージョン用のプログラムの違いは、import文のみです。

      WiringPi2-Python用のimport文:
      import wiringpi2 as wiringpi

      WiringPi-Python用のimport文:
      import wiringpi

      ですから、「実例で学ぶRaspberry Pi電子工作」のプログラムの中の
      「import wiringpi2 as wiringpi」の行を「import wiringpi」と
      書き換えることで、WiringPi-Pythonのみのインストールで済みます。


      次に、Python3用のOpenCVですが、
      Python2用のような「簡単な」インストール方法はありません。
      ただし、Googleなどで「Raspberry Pi Python3 OpenCV」で検索することで、
      いくつか方法は見つかるでしょう。
      しかしそれらは、難易度が高かったり、
      実行するタイミングで成功したり失敗したりするため、
      書籍で紹介する方法としては適切ではないと私は考えています。

      ですので、本書では、Python3でのOpenCVの利用はサポートせず、
      OpenCVはPython2での利用に限らせて頂いております。
      (OpenCVを用いないプログラムでしたら、Python2とPython3の両方で
      動作するよう記述しています)

      この方針は、
      「沢山いらっしゃる読者の方が途中で挫折することなく最後の演習までたどり着けること」
      を目指して決定させて頂きました。ご理解頂けますと幸いです。

      削除
    2. 今後、OpenCVをPython3で利用したいという要望が増えるかもしれませんので、以下のページで解説することにしました。


      画像処理の演習をPython3用のOpenCV3で実行する方法
      https://raspibb2.blogspot.com/2018/08/opencv3.html

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

      削除
  13. bb2-06-01-zero.pyをThonny Oython IDE(NOOBS 2.8.2使用)で実行したのですが?

    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    from time import sleep
    import wiringpi

    PWM0 = 18
    PWM1 = 19

    wiringpi.wiringPiSetupGpio() # GPIO名で番号を指定する
    wiringpi.pinMode(PWM0, wiringpi.GPIO.PWM_OUTPUT) # PWM出力を指定
    wiringpi.pinMode(PWM1, wiringpi.GPIO.PWM_OUTPUT) # PWM出力を指定
    wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS) # 周波数を固定するための設定
    wiringpi.pwmSetClock(375) # 50 Hz。18750/(周波数) の計算値に近い整数
    # PWMのピン番号18とデフォルトのパルス幅をデューティ100%を1024として指定
    # ここでは6.75%に対応する69を指定
    wiringpi.pwmWrite(PWM0, 69)
    wiringpi.pwmWrite(PWM1, 69)

    try:
    while True:
    sleep(1)

    except KeyboardInterrupt:
    pass



    >>> %Run bb2-06-01-zero.py
    Backend terminated (returncoe: 1)
    Resetting ...
    というメッセージが表示され、実行できません。どういうエラーなのでしょうか。よろしくお願いします。

    ちなみに、wiringpiを使用した以下のプログラムは実行できます。

    # -*- coding: utf-8 -*-

    import wiringpi # WiringPi ライブラリをインポート
    import time

    LED = 25 # 使用するピン番号を代入

    wiringpi.wiringPiSetupGpio() # GPIOを初期化
    wiringpi.pinMode( LED, wiringpi.OUTPUT ) # LEDを接続したピンを出力に設定
    wiringpi.softPwmCreate( LED, 0, 100 )

    while True: # 無限ループ
    value = 0
    while ( value < 100 ):
    wiringpi.softPwmWrite( LED, value )
    time.sleep( 0.1 )
    value = value + 2

    while ( value > 0 ):
    wiringpi.softPwmWrite( LED, value )
    time.sleep( 0.1 )
    value = value - 2

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

      まずは原則から述べさせていただきます。

      本書でサポートする実行環境、およびPythonのバージョンは
      下記の通りです。

      #####
      実行環境:
      ・idle (python2用)からの実行
      ・コマンドからの実行

      Pythonのバージョン:
      ・バージョン2
      #####

      そういう意味では、Thonny Python IDEでの実行は
      原則としてはサポート対象外となります。ご了承ください。


      以上をご理解いただいた上で、いくつかコメントします。

      今回の件で問題になりうるのは下記の2点だろうと考えられます。

      (1) Thonny Python IDEがPython3実行用の環境であること

      Thonny Python IDEは読み込んだプログラムをPython3で実行します。
      そのため、今回の場合、「bb2-06-01-zero.pyがPython3に対応していること」
      「wiringpiがPython3用にインストールされていること」の2点が必要となります。

      今回の場合、記して頂いた後半プログラムが動いていることから、
      上記2点はともに満たされていると考えられます。


      (2) wiringpiでハードウェアPWMを利用するプログラムは管理者権限が必要なこと

      これは、本書2.4.2章とp.196で解説していることです。
      恐らく、今回はこちらの問題が該当するのではないかと考えています。

      管理者権限のThonny Python IDEを起動するには、ターミナルで
      sudo thonny
      というコマンドを実行します。
      そうして開いたIDEでプログラムを読みこんで実行すると、
      管理者権限でwiringpiを用いるプログラムが実行されると考えられます。

      もし、プログラムを管理者権限で実行していないことが原因だとすると、
      上記の方法で問題が解決すると思われます。
      ただし、私自身はThonny Python IDEでプログラムを
      実行したことはありませんのでご了承ください。

      なお、wiringpiのインストール方法について一つコメントがあります。
      wiringpiのインストールは、pipなどではなく、下記のページの
      「p.209:WiringPi-Pythonのインストールコマンド」に記した方法で
      インストールすることを推奨します。
      (Python3用ならば最後のコマンドは sudo python3 setup.py installとなります)

      https://raspibb1.blogspot.com/2016/07/blog-post_19.html

      この方法でインストールしたwiringpiには、
      管理者権限なしでwiringpiのハードウェアPWMを利用しようとすると
      「Must be root. (Did you forget sudo?)」という警告を出して
      プログラムを終了させる変更が適用されているからです。

      以上のコメントでいかがでしょうか。

      削除
  14.  「実例で学ぶRaspberry Pi電子工作}と「カラー図解 最新 Raspberry Piで学ぶ電子工作」を参考にさせていただきながら、工作を楽しんでおります。最新の情報をこまめに発信していただけるのも大変助かっています。ありがとうございます。
     作りながらこんなことが追加できればと思っていることがあるのですが、アドバイスを是非よろしくお願いします。
    ①サンプルファイル09-samples/bb/08でカメラからの映像に重なって表示された矢印をタッチあるいはクリックすることでどの矢印がアクティブ状態なのかを4つのLEDをモータ制御基板上に配置してモニター用に点灯表示させたいのですが、プログラムをどのように追加すればよいのでしょうか。
    ②ラスベリーパイにマイクを接続しておき、サンプルファイル09-samples/bb/08で映像だけでなく、音声も操作しているスマフォやPCから聞くことはできないでしょうか。

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

      2つのご質問がありますが、どちらも書籍の範囲外の内容ですので、
      コメントのみとさせていただきます。ご了承ください。

      まず、2つ目の方からコメントします。
      音声配信については「Raspberry Pi 音声配信」などで検索すれば
      情報はいくつか見つかりますが、それらを「09-samples/bb/08」に追加するのは
      恐らく難易度が高いと思われます。

      次に1つめの内容です。こちらは技術的には可能ではありますが、
      実現にはPythonとJavaScriptにある程度慣れている必要があります。

      何故かというと、
      タブレットからの命令を受け付けキャタピラ式模型を制御するプログラム(Python)と
      操作用タブレットから模型に命令を送るプログラム(JavaScript)の
      両方を変更する必要があるためです。

      まず、「命令を受け付けキャタピラ式模型を制御するプログラム(Python)」について
      コメントします。変更すべきファイルは
      /usr/share/webiopi/htdocs/bb/08/script.py
      です。
      このファイルの末尾に、タブレットからの命令を受け付けるマクロを
      定義する必要があります。

      例えば、

      @webiopi.macro
      def changeLED(gpio, state):
          if int(state)==1:
              GPIO.digitalWrite(int(gpio), GPIO.HIGH)
          else:
              GPIO.digitalWrite(int(gpio), GPIO.LOW)

      と定義します。

      これをJavaScriptから

      webiopi().callMacro("changeLED", [27, 1]);

      と呼び出せばGPIO 27がHIGHになり、

      webiopi().callMacro("changeLED", [27, 0]);

      と呼び出せばGPIO 27がLOWになるはずです。

      ただし、このようにGPIO 27を出力として使いたい場合、
      /usr/share/webiopi/htdocs/bb/08/script.py
      の「def setup():」内で
      GPIO.setFunction(27, GPIO.OUT)
      と書いてGPIO 27を出力にしておく必要があります。

      さて、JavaScript側ですが、こちらは変更すべきファイルは
      /usr/share/webiopi/htdocs/bb/08/javascript.js
      となります。

      このファイルを見ると、速度を変更するための信号を送信するところで
      webiopi().callMacro
      が呼び出されている箇所が複数あります。
      (画面タッチ用とマウスクリック用がありますのでご注意ください)

      それらの近くの適切な位置に
      webiopi().callMacro("changeLED", [27, 1]);

      webiopi().callMacro("changeLED", [27, 0]);
      などを記せばよいでしょう。

      以上のコメントでご容赦ください。

      よろしくお願いします。

      削除
  15. 「実例で学ぶRaspberry Pi電子工作を参考にして」raspberry piをテレビのリモコンにするためLIRCでボタンを27個学習させてGoogle Assistant APIで音声操作するのに
    controlTV-ga.pyの内容を、追加したボタンに対応するように追記して、すべてのボタンが音声で操作できるようになりました。
    次のステップとして、本書5.4.3ブラウザでの操作をしようと思っていますが、操作画面のボタンの数が足りません。
    ボタン数やサイズ、配置の変更をするにはどうすればよいでしょうか?

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

      まず、ブラウザ上でボタンを増やすには、HTMLの知識が必要になります。

      編集すべきファイルは、
      bb2/01/index.html
      です。

      このファイルは、本書339ページに基づいて
      サンプルファイルをコピーした後は、
      /usr/share/webiopi/htdocs/bb2/01/index.html
      として存在しています。

      この中に14個のボタンが記述されています。

      原則的には、一つのボタンは
      <button id="input" onClick="sendCommand('TV', 'input')">入力切替</button>
      のような一行で記述されます。

      <tr>や<td>は、HTMLの表(テーブル)機能を用いて配置を行うためのものですので、
      調べてみてください。

      また、ボタンのサイズを変更するには、CSSと呼ばれるものの知識が必要になります。

      編集すべきファイルは
      /usr/share/webiopi/htdocs/bb2/01/styles.css
      となります。

      中身を編集した後、ブラウザで再読み込みを行うと、変更が反映されます。

      HTMLやCSSの詳細な解説は本書の範囲を超えますので、
      解説はこの程度とさせてください。

      よろしくお願いします。

      削除
  16. 先日は前書に関する質問で大変お世話になりました。
    今回は「実例で学ぶRaspberry Pi電子工作」で勉強させていただいております。

    さて、本書5章の「ブラウザによるテレビの操作」の部分で詰まっております。
    具体的には、以前は接続できたWebIOPiですが、今回接続できない状態です。

    本書や当HPの教え通り、
    「sudo service webiopi start」や
    「sudo systemctl start webiopi」で接続を行いましたが、
    「ps ax | grep webiopi」で確認しても、
    「1790 pts/0 S+ 0:00 grep --color=auto webiopi」のように、1行しか表示されません。
    さらに念の為、インストールし直したのですが、結果は変わりません。
    また、ルーターも特に問題ありません。

    もはや何が問題なのか見当がつきません。
    問題点をご指摘いただきたいと存じます。
    何卒よろしくお願い致します。

    返信削除
    返信
    1. 「起動したはずのWebIOPiが起動していない」というのは、
      多くの場合、
      「/etc/webiopi/config に記した設定に問題があり、
      WebIOPiが起動直後に終了した」
      ことが原因です。

      その原因は
      /var/log/webiopiというテキストファイルの
      末尾に記されているエラーメッセージを
      読むとわかることが多いでしょう。

      さて、今回起こった「WebIOPiの設定の問題」は、
      設定ファイル内で起動を指示したPythonプログラムに
      問題があったことが原因であると予想されます。

      Pythonプログラム自体は、サンプルファイルから
      変更していないならば問題がないはずです。
      ですから、考えられるのは下記の2点です。
      ・呼び出したPythonプログラムが存在しない
      ・Pythonプログラムの呼び出しの記述に問題がある。

      補足ページに書かれている以下の二点をチェックしてみてください。

      「p.339:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー」
      に記した内容のチェック。

      すなわち、下記のコマンドで演習用のサンプルファイルを
      「/usr/share/webiopi/htdocs」ディレクトリに
      コピーしているかを確認してください。

      cp -r bb2 /usr/share/webiopi/htdocs

      「p.341:/etc/webiopi/config の myscript行」
      に記した内容のチェック。

      すなわち、/etc/webiopi/config の myscript行が
      下記のようにセットされているかチェックしてください。

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

      あともう一点、設定ファイル「/etc/webiopi/config 」
      のどこかの行に余計な文字を挿入してしまった、
      などということもあり得ます。合わせてご確認ください。

      削除
    2. ご返信ありがとうございます。
      サンプルファイルをディレクトリにコピーしておりませんでした。
      初歩的なミスでした。失礼致しました。

      削除
  17. 最新RaspberryPiで学ぶ電子工作 に続き、本書でも色々と楽しみながら勉強しております。
    7章で躓いておりましてご教示お願いしたくコメントしました。

    Rasppbian Buster + Python3 + OpenCV3 の場合に従いOpenCV3をインストールしましたが、
    bb02-07-01-preview.pyを実行すると

    Traceback (most recent call last):
    File "bb2-07-01-preview.py", line 4, in
    import cv2
    ImportError: /usr/lib/arm-linux-gnueabihf/neon/vfp/libavcodec.so.58: undefined symbol: bcm_host_is_fkms_active
    のエラーとなります。

    bb02-07-01-preview.pyが最新でないと思われるのですが、2019/6/25に更新されたサンプルファイルraspi2-sample.zipが見つけられません。http://bluebacks.kodansha.co.jp/books/9784062579506/appendix/attachments/raspi2-sample.zip
    が最新版なのでしょうか?
    お手数おかけします。

    返信削除
    返信
    1. まず、サンプルファイルは公式サイトからダウンロードすれば常に最新ですので、
      気にされる必要はありません。

      次に、エラーについてですが、以下のフォーラムと同じエラーに見えます。

      i'm Using two usb Camera but return error #1319
      https://github.com/raspberrypi/firmware/issues/1319

      上のページの内容に基づくと、下記の環境でテストされているのではないかと推測できます。

      (a) 2019年9月以前の古いRaspbianを用いている
      (b) OpenCV を「sudo apt install python3-opencv」ではなく
      「sudo pip3 install opencv-python」
      でインストールしている

      (a) は可能性が高いように思えますが、
      (b) は少し自信がありません。必要に応じて、
      「sudo apt install python3-opencv」と 「sudo pip3 install opencv-python」
      のどちらでインストールしたかお知らせください。

      さて、以上の推測に基づき、以下の3通りの改善案を考えました。

      <改善案1>
      (a) が正しい場合に有効と思われる案です。(b) が正しいかどうかは影響しません。

      「sudo apt update」、「sudo apt dist-upgrade」により、
      OS のカーネルを最新にする。

      以上でこの問題が改善する可能性は高いと思っていますが、
      本書以外の著者の書籍やブログを参考に実施した演習が
      動作しなくなる可能性はゼロではありません
      (本書の演習は大丈夫なはずですが)。
      それを納得できる場合はこの改善案1をお試しください。


      <改善案2>
      こちらは、(a) と (b) の両方がが正しい場合に有効と思われる案です。
      こちらは、カーネルを更新しないので、他のソフトウェアに与える影響が少ない案です。

      まず「sudo pip3 uninstall -y opencv-python」でこのバージョンの OpenCV を削除します。
      そして、「sudo apt update」、「sudo apt install python3-opencv」で
      別バージョンのOpenCVをインストールしなおす、という案です。


      <改善案3>

      最後は、最新のRaspbian (現在では2020年2月版)をインストールしなおし、
      OpenCV を「sudo apt update」、「sudo apt install python3-opencv」でインストールする、
      という案です。
      面倒ではありますが、環境が整理され、トラブルは減ると思われます。

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

      削除
  18. ありがとうございました。
    (b)は間違えておりませんでしたので、改善案1でうまくいきました。

    返信削除
  19. AI初心者、ラズパイ初心者にも拘わらず楽しく学習させていただいております。
    ところで、第10章で
    >python3 ml-10-05-digits-cnn-gui.py ml-digits-cnn.h5
    を実行すると
    File "ml-10-05-digits-cnn-gui.py", line 2, in
    import keras
    ImportError: No module named 'keras'
    のようになって、karas がインポートできない、というエラーが出てしまいます。
    python3 ではなくて python ではうまくいくので、karas はインストールされていると思います。
    どうしたらよいでしょうか?
    よろしくお願いします。 

    返信削除
    返信
    1. まず、「Raspberry Piではじめる機械学習」へのご質問のようですので、
      今後は下記のページを参照されるようお願いしたします。

      https://mlbb1.blogspot.com/

      さて、ご質問の件ですが、まず、Python2とPython3の違いについて
      解説いたします。

      pythonというコマンドで実行されるのは、Python2、
      python3というコマンドで実行されるのは Python3です。

      そして、scikit-learn、keras、などのライブラリは、
      Python2 用と Python3 用で別になっておりますので、
      それぞれで別々にインストールする必要があります。

      現在ですと、Thonny という開発環境を用いるために
      Python3 を用いるのがお勧めとなっております。

      さて、具体的にどうするかですが、
      9章までに必要なツールを下記コマンドで以下の2コマンドで全て Python3 用にインストールします。

      sudo apt update

      sudo apt install python3-sklearn python3-pil.imagetk mpg321 python3-opencv

      そして、以下の2つのコマンドでPython3 用の keras と theano をインストールします。

      sudo apt install liblapack-dev libhdf5-dev python3-h5py

      sudo pip3 install keras theano

      以上で、Python3 で 10 章の演習が行えるようになります。
      .keras/keras.json の編集も忘れないようにしてください。

      以上のことは、下記ページの項目の中に記されておりますので、
      ご参照ください。

      書籍で用いたコマンドおよび追加情報
      https://mlbb1.blogspot.com/2018/03/blog-post.html
      p.70:開発環境IDLEの代替としてThonny Python IDEを用いる方法
      p.70:Python2とPython3について
      p.308 kerasとtheanoの利用の前に
      p.308 kerasとtheanoの利用に必要なツールをインストールするためのコマンド
      p.309 kerasとtheanoをインストールするためのコマンド
      p.311 kerasの設定ファイルを編集するためのコマンド

      削除
    2. 金丸様、三輪です。

      早速の返事ありがとうございます。即答でびっくりしました。

      教えていただいた通りやってみたら解決しました。
      ありがとうございました。

      削除