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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8321閲覧

RaspberryRaspberry Pi ZeroとPythonでのタイマ割り込みの方法

TANAKA.HIROSHI

総合スコア8

Raspberry Pi

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/27 07:04

(1)質問の大枠内容
Raspberry Pi Zeroを用いてセンサデータ(これは取得できています)を一定時間間隔で取得する方法を教えてください。開発環境はPython2.7系です。RPI.GPIO、WiringPiライブラリともに利用可能な前提です。

(2)前提、当方の状況など
**(A)**time.sleep関数を用いた場合は、他の処理の影響によって正確な時間間隔での取得が困難であり、この方法は除外します。

**(B)**割り込み(コールバック関数)を利用する方法は、WEBサイトなどでも紹介されているのですが、ピンへの入力に対する割り込みになっています。
GPIO.add_event_detect(pin, GPIO.RISING, bouncetime=1000)
などがその一例と思います。しかし、これは一定時間間隔を指定するものではありません。

**(C)**wait for edge関数なるものがあり、これを用いるとタイムアウト設定した時間経過と、割り込みが来た時にイベント待ちが解除されるということなので、例えば

import RPi.GPIO as GPIO pin = 4 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP) try: while(True): isr = GPIO.wait_for_edge(pin, GPIO.FALLING, timeout=50) if isr is None: print("100msec Interrupt nothing") else: print("Interrupt") except KeyboardInterrupt: pass GPIO.cleanup()コード

と記述すれば、常にピンに一定電圧を加えることによって、等価的には50ms間隔での処理("50msec Interrupt nothing"の表示)ができますが、ピンへの電圧入力が必要になります(50msの確認は行っていません)。

(3)具体的な質問
マイコンではタイマ割り込みがあり、これを用いることによって一定時間間隔での処理が可能になりますが、これと同じような機能はどのようなコードになるのでしょうか?
**具体的に、50msの時間間隔でHello Worldを出力するという、サンプルコードはどうなるのでしょうか? **
Raspberry PiでPythonを用いた場合は、タイマ割り込みのような機能は実装できない、という解を含めて、ご教示いただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そのようなことをするなら、ラズパイではなくてArduinoを使いましょう。

CPUにタイマが載っている、といってもハードウエアデバイスはすべてOSの管理下に置かれ、ユーザが自由には使えません。
どうしても、というなら、OSなしで直接コードを走らせるということになろうかと思います。

投稿2020/03/27 08:16

y_waiwai

総合スコア88042

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

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

TANAKA.HIROSHI

2020/03/27 08:22

ありがとうございます。PWMに関してはハード処理を利用できるようですが、マイコンのタイマ割り込みのようなものはない、と理解しました。確かに、ご回答のようにラズパイとArduinoを用途に応じて使い分ける必要があるようです。
y_waiwai

2020/03/27 08:31

そのPWMに関しても、OS上からコントロールできるように、ドライバやらが整備され、OS上からも使えるようになってます。(GPIOもいっしょ) もしかすれば、LinuxやBIOSのシステムコールを漁ると使えそうなものが見つかるかもしれませんが、一般的ではなさそうです
TANAKA.HIROSHI

2020/03/27 08:39

追加説明ありがとうございます。 実に深いものですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問