Up ソースファイル 作成: 2022-05-25
更新: 2022-11-24


    <?php

     /* 撮影画像保存ディレクトリ */
     $dir = "/home/pi/sky/storage/";

     /* 撮影回数の最大 */
     $max = 36;

     /* 撮影間隔 (分) ─ 60 の約数であること */
     $interval = intval( $argv[1] );

     /* 現地の東経(度) */
     $longitude = [‥‥];

     /* 日本標準時との時差 */
     $d_min0 = round( ( 60 * ( $longitude - 135 ) / 15 ), 0 );
     $d_min = $d_min0 % 60;
     $d_hour = ( $d_min0 - $d_min )/ 60;

     /* 現地現在時 */
     $hour = intval( date( "H" ) );
     $min = intval( date( "i" ) );
     $min = $min + $d_min;
      
     if( $min < 0 ){
      $min = $min + 60;
      $hour = $hour - 1;
     }
     elseif( $min >= 60 ){
      $min = $min - 60;
      $hour = $hour + 1;
     }


     /* 分が $interval で割り切れる時刻まで,待つ */
     $min0 = intval( date( "i" ) );
     while(1) {
      if( ( $min % $interval ) == 0 ){
       break;
      }
      if( $min0 != intval( date( "i" ) ){
       $min0++;
       $min++;
       if( $min == 60 ){
        $min = 0;
        $hour++;
       }
      }
     }

     /* $interval 間隔で撮影 */
     $counter = 0;
     while(1) {

      /* 撮影 */
      $file_name = sprintf( '%02d', $hour )."-".sprintf( '%02d', $min ).".jpg";
      $cmd = "raspistill -w 1600 -h 1500 -o ".$file_name;
      exec( $cmd );
      echo $file_name."\n";

      $counter++;
      if( $counter > $max ){
       exit;
      }

      $min = $min + $interval;
      if( $min == 60 ){
       $min = 0;
       $hour++;
      }

      /* $interval が経過するのを待つ */
      $n = 0;
      $min0 = intval( date( "i" ) );
      while(1) {
       if( $min0 != intval( date( "i" ) ){
        $n++;
        $min0++;
        if( $n == $interval ){
         break;
        }
       }
       /* sleep */
       $sec0 = intval( date( "s" ) );
       $sleep_time = 55 - $sec0;
       if( $sleep_time > 0 ){
        sleep( $sleep_time );
       }
      }
     }

    ?>


    「<?php」を「<?」に代えることはできない。
    ──「<?」にして php -e で実行すると,ソースファイルの表示になる。