今日やること: 温度センサを使って、温度を測定します。
キーワード: C言語、GPIO、wiringPi、温度センサ、ラズベリーパイ、ビギナーズボード、Rabyy
ハードウェア
こちら↓のように、ハードウェアを接続します。
[回路図]
(*ビギナーズボードを使えばハードウェアの配線は不要です。)
I2Cでデータの送受信ができるADT7410という温度センサを使っています。
ソフトウェア
今回もC言語でプログラムを書きます。
さて今回は、I2C(あい・すくえあ・しー または あい・つー・しー と呼ぶ)を使うということで、ちょこっと準備することがあります。
1.raspi-configでI2Cを有効にします。
1 |
pi@raspberrypi ~ $ sudo raspi-config |
「8 Advanced Options」-「A7 I2C」-<Yes> -<OK>-<Yes> -<OK> -<Finish>とします。
2./etc/module というファイルに1行「i2c-dev」と追記します。
1 |
pi@raspberrypi ~ $ sudo vi /etc/modules |
3.ここで再起動します。
1 |
pi@raspberrypi ~ $sudo reboot |
4.I2C動作確認ツールをインストールします。
1 2 |
pi@raspberrypi ~ $sudo apt-get update pi@raspberrypi ~ $sudo apt-get install i2c-tools |
温度センサーの動作を確認します。
1 |
pi@raspberrypi ~ $ sudo i2cdetect -y 1 |
I2Cデバイス(今回の温度センサー)のアドレスが表示されます。このばあい「4b」がアドレスです。
これで準備完了です。
今回のプログラムは以下です。ソースコードをコピペして、適当なところに適当な名前で保存します。
ここでは /home/pi/sample_programs_woodbox/ というディレクトリに get_temp.c という名前で保存するとしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/***************************************************************************** * Description: 温度センサから温度を取得する。 * Last Update: 2015/10/01 mariko.N @woodbox (thanks to hiroshi.K) * * This software is a free software and there is NO WARRANTY. * サンプルなのでご自由にどうぞ。ただし保証はしませんm(。・ω・。)m *****************************************************************************/ #include <stdio.h> #include <wiringPi.h> #include <wiringPiI2C.h> #define I2Caddress 0x4b float getTemp(int); /***************************************************************************** * Function: main *****************************************************************************/ int main(){ int fd,ret; float temp; //I2C setup fd = wiringPiI2CSetup(I2Caddress); printf("setup return : %d\n",fd); temp = getTemp(fd); printf("temperature : %lf\n",temp); return 0; } /***************************************************************************** * Function: getTemp * Description: get temperature from the sensor *****************************************************************************/ float getTemp(int fd){ float temp; int ret; //read data from I2C (13bit) ret = wiringPiI2CReadReg16(fd,0x00); //swap upper 8bit for lower 8bit ret = ret << 8 | ret >> 8; ret = ret >> 3; ret = ret & 0x1fff; //highest bit = 1 -> minus if(ret & 0x1000){ ret = ret-8192; } temp = (float)(ret)/16; } |
プログラムをコンパイルして実行します。
1 2 |
pi@raspberrypi ~ $ gcc -o get_temp get_temp.c -lwiringPi -lpthread pi@raspberrypi ~ $ sudo ./get_temp |
温度がディスプレイに表示されました。
おつかれさまです。
おまけ
coming soon
【参考】
半田付け日記 Rabyyで温度センサ: https://ryusakura.wordpress.com/page/2/