Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
53 lines (45 sloc) 1.86 KB
/*******************************************************************************
Raspberry Pi用 I2C 温湿度センサ aosong AM2320
本ソースリストおよびソフトウェアは、ライセンスフリーです。(詳細は別記)
利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
I2C接続のセンサから測定値を取得する
Arduino標準ライブラリ「Wire」は使用していない(I2Cの手順の学習用サンプル)
Copyright (c) 2014-2017 Wataru KUNINO
https://bokunimo.net/raspi/
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include "../libs/soft_i2c.h"
typedef unsigned char byte;
int16_t temp,hum=-1;
int i2c_temp(){
/* 温湿度センサ AM2320 I2Cアドレス 0xB8(8bit) -> 0x5C(7bit) */
byte i2c_address=0x5C;
byte data[8];
byte config[3];
i2c_write(i2c_address,config,0); // 起動コマンド
delay(15); // 起動待ち
config[0]=0x03; // readコマンド
config[1]=0x00; // 開始アドレス
config[2]=0x04; // データ長
i2c_write(i2c_address,config,3); // レジスタ 0x03設定
delay(15); // 測定待ち15ms
i2c_read(i2c_address,data,6); // 読み出し
temp = (((int16_t)data[4])<<8)+((int16_t)data[5]);
hum = (((int16_t)data[2])<<8)+((int16_t)data[3]);
return (int)temp;
}
int i2c_hum(){
if(hum==-1) i2c_temp();
return (int)hum;
}
int main(void){
i2c_init();
printf("%3.1f ",((float)i2c_temp())/10.);
printf("%3.1f\n",((float)i2c_hum())/10.);
i2c_close();
return 0;
}