質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

3479閲覧

08-04-servo.py実行時のエラー

yama286

総合スコア34

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/04/07 08:57

関係者殿
yama286です
『最新RaspberryPiで学ぶ電子工作』金丸隆志著(講談社)
1.いきさつ
年明けより上記本で勉強している初心者です。
1~7章は実機でうまくいきました。8章のLEDのPWM制御もうまくいきました。
8.5のPWM信号によるDCモータの速度制御もうまくいきました。
ところが8.6のサーボモータの角度制御 08-04-servo.py を実行すると
で下記エラーが出てうまくいきません。
ImportError:No module named 'wiringpi'

2.内容
画像の貼り付け方がまだわかりませんので詳細を書きします。以下はTH Thonnyの画面の一部です。
------------------------------------------------------------------ 
1)プログラム
行番は左の数字です
1 # -- coding: utf-8 --
2 import RPi.GPIO as GPIO
3 from time import sleep
4 import wiringpi
5
6
7 # MCP3208からSPI通信で12ビットのデジタル値を取得。0から7の8チャンネル使用可
8 def readadc(adcnum, clockpin, mosipin, misopin, cspin):
9 if adcnum > 7 or adcnum < 0:
10 return -1
11 GPIO.output(cspin, GPIO.HIGH)
12 GPIO.output(clockpin, GPIO.LOW)
13 GPIO.output(cspin, GPIO.LOW)
14
15 commandout = adcnum
16 commandout |= 0x18 # スタートビット+シングルエンドビット
17 commandout <<= 3 # LSBから8ビット目を送信するようにする
中間省略
81 GPIO.cleanup()

 2)Shell メッセージ

%Run 08-04-servo.py

Traceback (most recent call last):
File "/home/pi/bluebacks/08-04-servo.py", line 4, in <module>
import wiringpi
File "/usr/lib/python3/dist-packages/thonny/backend.py", line 317, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named 'wiringpi'

3)Assistant メッセージ
ImportError: No module named 'wiringpi'
backend.py, line 317

No specific suggestions for this error (yet).
Let Thonny developers know
Search the web

上記2)Shell メッセージ及び3)Assistant メッセージに示すように
No module named 'wiringpi'
というエラーメッセージが出てしまいます。

3.疑問点1
冒頭にも書きましたが、8章のLEDのPWM制御もうまくいきました。ここでは
RPi.GPIOを利用しています。今回の8.6のサーボモータの角度制御から
wiringPiを使用しています。プログラムを動かす前にターミナルで9行のコマンド  を入れました。
しかしswig2.0コマンドが見つかりません
というものが出てうまくいきません。市販の本の通りにやってもなぜうまくいかな  いのかわかりません。
ただ初心者ですので、何かミスをしているのかもしれません。
4.試したこと
1)webでいろいろ調べてやっているうちに、3.で示した”swig2.0コマンドが見つか
りません”は出なくなりました。
2)wiringpi_wrap.cというファイルに原因があります。という記事があり下記のよ  うにviエディタで修正しました。下記行を追加しました。
#define PyString_FromStringAndSize(x,len)PyUnicode_FromStringAndSize(x,len)

 3)その後 import wiringpi2 を実行することになっていたので、実行するとエ   ラーは出ませんでした。
4)wiringPiのコマンドラインテストを実施
gpio -g mode 18 out
gpio -g write 18 1 LED 点灯
gpio -g write 18 0 LED 消灯
以上のようにgpioコマンドは正常の動作していると思われます。

5.疑問点2
その後、問題の08-04-servo.py を実行するとNo module named 'wiringpi'が出 てしまいます。
上記4-4)のgpioの出力制御はうまくいっているのに、なんで上記エラーが出るの でしょうか?

6.依頼事項
まだどこか抜けているところがあると思います。
以上よろしくご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

yama286さん、

ImportErrorですが、wiringpiのpythonモジュールが導入されますか?
sudo pip3 install wiringpiをしてみてください。

  • RaspberryPi 3B + 2018-11-13-raspbian-stretch-full にて確認。Thonny上でも、ImportErrorはでなくなりました。
pi@raspberrypi:~ $ python3 Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import wiringpi Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'wiringpi' >>> exit() pi@raspberrypi:~ $ pi@raspberrypi:~ $ sudo pip3 install wiringpi Collecting wiringpi Downloading https://files.pythonhosted.org/packages/ce/1f/74901a3c842daeb22447c07c48826d2c6aeb0d988370792e2aa2221f7a36/wiringpi-2.46.0-cp35-cp35m-linux_armv7l.whl (262kB) 100% |████████████████████████████████| 266kB 665kB/s Installing collected packages: wiringpi Successfully installed wiringpi-2.46.0 pi@raspberrypi:~ $ pi@raspberrypi:~ $ python3 Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import wiringpi >>> exit() pi@raspberrypi:~ $

投稿2019/04/07 17:17

編集2019/04/07 17:22
mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yama286

2019/04/08 11:39

mt08 様                               yama286です 早速ご返事ありがとうございます。 下記を実行しました。   sudo pip3 install wiringpi その後、08-04-servo.pyを実行しました。 確かに、ImportErrorはでなくなりました。 しかし、shellには下記赤字のエラーが出ます。 >>>%Run 08-04-servo.py pinMode PWM: Unable to do this when using /dev/gpiomem. Try sudo? Backend terminated (returncode: 1) Use 'Stop/Restart' to restart the backend ... pinMode PWMが使えないといっているようですが、どうしたら良いのか解りません。 よろしくご教示お願いいたします。
mt08

2019/04/08 16:23

Thonnyを起動した後、ターミナルで、sudo chmod +s /usr/bin/python3 で実行するとどうでしょうか? 使い終わったら、sudo chmod -s /usr/bin/python3 してください。(+s / -s)。
yama286

2019/04/09 05:43

mt08 様 yama286です ありがとうございました。正常に動きました。 このプログラムはボリュームの回転角度に対応して、SG90を角度制御するものです。 RPi.GPIOまでの例はすんなりとできたのですが、wiringpiはいろいろとトラブルがありました。 やはり難しいのですね。これで先のページに進めます。 今後ともよろしくお願いいたします。
mt08

2019/04/09 07:31

yama286さん、 動きましたか。よかったですね !!! とはいかず、+s を付ける場合は注意が必要です。 `chmod +s` を実行ファイルへ行うと、その実行ファイルの所有者のユーザ・グループで、実行されます。 なので、/usr/bin/python3 に +s をつけるということは、rootで実行される、ということになります。 wiringpiで、PWMを使う場合は、rootで実行していないと、エラーで弾かれるようで、python3をrootで実行させるために、chmod +sをしました。 # https://git.drogon.net/?p=wiringPi;a=blob;f=wiringPi/wiringPi.c;h=3db6866fdda124ea58438a92ef2c3f6154055a5d;hb=HEAD#l696 # のusingGpioMemCheck()は、PWM関係のところからしか呼ばれていない?? ラズパイでお勉強のために自分で動かす分には `chmod +s` ~ で大丈夫だと思いますが、普通のユーザがpython3を使うだけで、rootでいろいろできてしまう(どんなファイルでも削除できちゃう、とか)、ということなので、他で使うとかの場合は注意してください。
yama286

2019/04/13 00:54

mt08 様                           yama286です ありがとうございます。気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問