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

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

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

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

Q&A

解決済

2回答

1506閲覧

Raspberry Piをインターネットに接続させない環境で、かつ、起動が数ヶ月に1回程度の場合でも正確な時間間隔を取得したい

skmt33

総合スコア11

Raspberry Pi

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

0グッド

0クリップ

投稿2019/12/11 17:10

前提・実現したいこと

タクトスイッチを押した瞬間にLED1が点灯し、30秒後にLED2が自動点灯するようなものを作りたいです。

現在、インターネットに接続した環境で(NTPで時刻同期済み)、これを実現するPythonスクリプトを作成しました。(Pythonのdatetime.timedelta関数を利用して差分時間を計測し、30秒以上の値になったときにLED2を点灯させる仕組み)

Raspberry Piをインターネットに接続させない環境で、かつ、Raspberry Piの起動が数ヶ月に1回程度の場合でも、30秒など時間を計測しながら上記動作を実現させる事は可能でしょうか?

ネット上の記事にRaspberry Piはクロック(RTC)を持たないと書いてある記事がありました。
インターネットに接続せず、かつ、電源は数ヶ月に1回程度という事は、おそらくクロック(RTC)は狂うのではないかと予想しています。しかし、狂った時刻でも30秒間という時間間隔(差分)は取得できるような気がするので、上記の実現したい事は可能なようにも思えますが、実際どうでしょうか?

このへん知見をお持ちの方がいれば教えて下さい。
(Raspberry Pi用RTCモジュールは使用しない前提で教えて下さい)

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

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

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

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

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

guest

回答2

0

ベストアンサー

skmt33さん、

ネットなしに時刻だと、GPS!?!、と思ったんですが、
実際の日付時刻が必要でなく、ある時点からの時間の間隔計測であれば、特に必要ないと思います。

RaspberryPiでは、fake-hwclockというパッケージが導入されていて、シャットダウン時に現在の時間を記録、起動時(直後)にその時間から始める、といったようになっています。

↓のような感じで、時間が入っていて、デフォルトでは、システムの時刻と比較して、新しい時刻が使われます。

pi@raspberrypi:~ $ cat /etc/fake-hwclock.data 2019-12-11 19:17:01
  • (追記) 処理としてこんな感じでしょうか。
#!/usr/bin/env python # -*- coding: utf-8 -*- import time #ダミー関数: スイッチをチェックして、result = 1押している / 0:押していないを返す処理 def UserCheckSwitch(): result = 0 return result #ダミー関数:LED点灯消灯 def UserLed(LedNo,bOn): # LedNo =LED指定 - 1:LED1, 2:LED2 # bOn = 1で点灯、0で消灯する処理 return #-- 処理開始 -- # LED消灯 UserLed(1, 0) UserLed(2, 0) StartTime = 0 # メインループ while True: if (StartTime > 0) and (time.time() - StartTime > 30) : # 計測中で現在時刻が30秒以上なら StartTime = 0 # 計測停止 UserLed(2, 1) # LED2点灯 if (StartTime == 0) and (UserCheckSwitch() == 1): StartTime = time.time() # 計測開始 UserLed(1, 1) # LED1点灯 time.sleep(1) # 1秒スリープ (1秒ごとにチェック)

ただ、インターネットを使わないで、"タクトスイッチを押した瞬間にLED1が点灯し、30秒後にLED2が自動点灯する"、という比較的単純な処理なら、Arduino系の方ほうがよいかもしれません。起動時間もほぼ一瞬ですし。

投稿2019/12/11 19:30

編集2019/12/11 19:54
mt08

総合スコア1825

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

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

skmt33

2019/12/11 23:28 編集

mt08さん ご回答と、ご丁寧にサンプルコードを記載頂きありがとうございます。 インターネットに接続させず時刻が狂った状態であっても、Raspberry Piにデフォルトで組み込まれているfake-hwclockという仕組み(パッケージ)で、差分の時刻は取得できるということですね。 意図した事が実現できるうえ、Raspberry Piの活用範囲も広がりそうです。 大変参考になったうえ勉強になりました。 ありがとうございました。御礼申し上げます。
guest

0

インターネットに接続しない状態で date コマンドで ラズパイ の時刻を数ヶ月後に変更し、
LEDが期待通り点灯するか試してみてはどうでしょうか。

投稿2019/12/11 18:12

scsi

総合スコア2840

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問