ともさんのHP >ものつくり >ラズパイ(Raspberry Pi)で電子工作 >ラズパイとArduinoの間でシリアル通信

ラズパイとArduinoの間でシリアル通信

Arduinoに気象センサーをつけて家の外の観測箱に設置、家の中から計測できるようにしました。最初はパソコンとArduinoを繋いでいましたが、24時間計測したいのでパソコンをラズパイに差し替えました。

ラズパイ楽天 とアルディの間は10mのUSBケーブルでつないであります。Arduinoの電源もこのUSBケーブルから供給されています。ラズパイとArduino間はシリアル通信でデータをやり取りをしています。

ラズパイ側のプログラム

定期的に時刻を調べて30分ごとにArduinoへ気象センサーのデータを出すよう指令を出します。USBテーブルには他にUSBカメラもつけてあって、こちらは10秒ごとに撮影して雲のタイムラプス画像を作るようにしています。
ラズパイとArduinoラズパイとArduino


Arduino側のプログラム

シリアルケーブルから特定の文字が送られてきたらセンサーの温度湿度気圧データを取得して返信します

#include <Wire.h>
#include "SparkFunBME280.h"



BME280 sensor;
//気温
float tmp=-1.;
//湿度
float hum=-1.;
//気圧
float hpa=-1.;
boolean serialreceived= false;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.beginI2C();  // Wire を用いて I2C 接続開始
}

void loop() {
 if( serialreceived ){
  sokutei();
  send();
  serialreceived= false;
 }
}

//シリアル割り込み処理
void serialEvent(){
  if(Serial.available()>0) {
    int incomingByte = Serial.read(); // 受信データを読み込む
    if( incomingByte==72 ){ serialreceived= true; }//Hを受け取っていたら
  }
}





//データを発送する
void send(){
//  Serial.print( 'G' );
//  Serial.print( ',' );
 //気温湿度気圧の送信
  Serial.print( tmp , 2 );
  Serial.print( ',' );
  Serial.print( hum , 2 );
  Serial.print( ',' );
  Serial.print( hpa / 100.0, 1);
 return;
}



//センサーから気象情報を得る
void sokutei(){
//  Serial.print("Temp: ");
  tmp = sensor.readTempC();
//  Serial.print( tmp[i] , 2);

  hum = sensor.readFloatHumidity();
//  Serial.print(" °C, Humidity: ");
//  Serial.print( hum[i] , 2);

  hpa = sensor.readFloatPressure();
//  Serial.print(" %, Pressure: ");
//  Serial.print( hpa[i] / 100.0, 1);
//  Serial.println(" hPa");
 return;
}


ラズパイだけで十分なのでは

家の中にラズパイを置いて10mのUSBケーブルの先にある観測箱のディノと UBSカメラ 楽天 を設置していますが、観測箱の中にラズパイをおけばArduinoは不要になります。
データの引き抜きはwi-fiで行なっているので外とwi-fi通信ができれば、観測箱へUSBケーブルの代わりに充電ケーブルを繋げばOKです。
今回の場合先にUSB カメラ 楽天 をつけていてUSBケーブルが既に設置済みでした。なのでわざわざ充電ケーブルに差し替えるのが手間だったのです。
今の方式だとラズパイの代役としてパソコンを使うことも可能です。こちらの方が汎用性も高いしということでこんな構成になりました。

mport datetime


def add():
    ser = serial.Serial('/dev/ttyACM0', 9600,timeout=5)#ACM0
    #setuzokujini Arduinogarisettosurunode 2byoumatu
    time.sleep(2)

    ser.write(b'H')
    time.sleep(1)
    str = ser.readline()
    str2 = str.decode()
    print(str2)
    #print( str2.split(',') )
    #close suruto Arduinoga risetto suru
    ser.close()
    #print("aaa")

    dt_now = datetime.datetime.now()


    with open('/home/pi/workspace/test.csv' , mode='a') as f:
        f.write('\n')
        f.write(dt_now.strftime('%Y/%m/%d %H:%M:%S'))
        f.write(',')
        f.write(str2)
        
    return

if __name__ == "__main__":
    add()


観測結果

こんな感じで温度をグラフ化できます。欠測しているところは、USBカメラとの通信に失敗して停まってしまったためです。
温度グラフ温度グラフ

ちなみに雲のタイムラプス動画はこんな感じになります。

最終更新日: 2021-10-21 06:09:29

ともさんのHP >ものつくり >ラズパイ(Raspberry Pi)で電子工作 >ラズパイとArduinoの間でシリアル通信

広告
新着ページ

柿畑で見つけたコケや地衣類の写真  
ミツバチ科学に掲載していただきました  
ミツバチに逃げられてしまった  
ミツバチ用電気柵の構造  
2021年の柿の収穫  
マムシに咬まれない対策  
五右衛門風呂の風呂釜を修理  
MES覚え書き  
柿酢の作りかた  
養蜂用手袋  
ミツバチの毒によるアナフィラキシーショック  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます