ともさんの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の間でシリアル通信

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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