Arduinoをソーラーパネルだけで動かす(その3)

Raspberry側の処理を紹介します。






こちら
のページでRaspberryへのライブラリをダウンロード、インストール手順を紹介しています。
nRF24L01とRaspberryの結線はこ のページのままです。
Raspberry側のプログラムは以下の通りです。
受信した日時を「/home/pi/Log/nrfYYYYMMDD.txt」のファイルに追記で書き込んでいるだけです。
2.4GHz帯はノイズが多いので、受信したデータが05-15-25のときだけ、ProMiniからの有効な受信データとして扱います。

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>
#include <RF24/RF24.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>

#define DEBUG 0

using namespace std;
//
// Hardware configuration
//

// CE Pin, CSN Pin, SPI Speed

// Setup for GPIO 22 CE and CE1 CSN with SPI Speed @ 4Mhz
//RF24 radio(RPI_V2_GPIO_P1_22, BCM2835_SPI_CS1, BCM2835_SPI_SPEED_4MHZ);

// Setup for GPIO 22 CE and CE0 CSN with SPI Speed @ 4Mhz
RF24 radio(RPI_V2_GPIO_P1_22, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_4MHZ);

// Setup for GPIO 22 CE and CE0 CSN with SPI Speed @ 8Mhz
//RF24 radio(RPI_V2_GPIO_P1_22, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_8MHZ);

// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xD0D1D2D3D0LL, 0xD0D1D2D3D1LL };


int LogFile(char * fname,double dtime) {
  FILE *fp;

  struct tm *date;
  time_t now;
  int year, month, day;
  int hour, minute, second;

  time(&now);
  date = localtime(&now);
  year = date->tm_year + 1900;
  month = date->tm_mon + 1;
  day = date->tm_mday;
  hour = date->tm_hour;
  minute = date->tm_min;
  second = date->tm_sec;

//  fd=open("/tmp/nop.txt",O_RDWR | O_CREAT, 0666);
  fp=fopen(fname,"a+");
  if (fp == NULL) return 0;

  fprintf(fp,"%04d/%02d/%02d %02d:%02d:%02d %.1f\n",
          year,month,day,hour,minute,second,dtime);
  fclose(fp);
  return 0;
}


int main(int argc, char** argv){

  uint8_t len;
  uint8_t data[32];
  char fname[80];
  int start_flag = 0;
  time_t start_time;
  time_t end_time;
  double diff_time;
  struct tm *date;
  time_t now;
  int year, month, day;

  time(&now);
  date = localtime(&now);
  year = date->tm_year + 1900;
  month = date->tm_mon + 1;
  day = date->tm_mday;

//  strcpy(fname,"/tmp/nrf24l01.txt");
  sprintf(fname,"/home/pi/Log/nrf%04d%02d%02d.txt",year,month,day);

  radio.begin();                           // Setup and configure rf radio
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(0,pipes[1]);
  radio.startListening();
if(DEBUG)radio.printDetails();


  // forever loop
  while (1) {
    if(radio.available()){
      len = radio.getDynamicPayloadSize();
      radio.read(&data,len);
if(DEBUG)printf("data=%d-%d-%d\n",data[0],data[1],data[2]);
      if (data[0] == 5 && data[1] == 15 && data[2] == 25) {
        if (start_flag == 0) {
          start_flag = 1;
          start_time = time(NULL);
        } else {
          start_time = end_time;
        }
        end_time = time(NULL);
        diff_time = difftime(end_time,start_time);
if(DEBUG)printf("diff_time=%.1f\n",diff_time);
        LogFile(fname,diff_time);
      }
    }
  } // end while
}

次回はATtiny側のプログラムを紹介します。

続く...