Raspberry Pi Model B Revision 2.0 (512MB)本体のみ
posted with amazlet at 13.03.24
kalron
売り上げランキング: 3,803
売り上げランキング: 3,803
Raspberry Piを利用して、いろいろつくりたいと思ってるんですが、なかなか手を付けられずにおります。^^;
I2C接続のLCDと電圧・電流測定モジュールを買って積み基板にしていたもので、それをRaspberry Piから叩いて電流・電圧測定ができるちょっとしたテスターっぽいものを作ってみることにしました。
こんな感じで繋ぎました。
LCDは、1.5mmピッチで、2.54mmピッチにはそのままささらないのと、外付けのコンデンサを3つ必要としていたため、秋月の小基板(http://akizukidenshi.com/catalog/g/gP-02516/)を中継基板にすることにしました。
電圧・電流測定モジュールは、Strawberry-linuxの以下のものを使用しました。
http://strawberry-linux.com/catalog/items?code=12031
LCDも同様、Strawberry-linuxの以下のものを使用しました。
http://strawberry-linux.com/catalog/items?code=27031
Raspbian wheezyはそのままではi2cのデバドラ(ローダブルモジュール)が登録されません。以下のサイトの通りに設定すれば使えます。
http://d.hatena.ne.jp/NeoCat/20120926/1348684357
で繋いで作ったようすはこちら:
i2cへのお試しでのアクセスは、i2c-toolsを使用するとかなり簡単便利です。Raspbian "wheezy"では、「sudo apt-get install i2c-tools」だけでセットアップ出来ます。
試しにデバイスをI2Cに接続の後、i2cdetectというコマンドで接続状況を確認してみましょう。
# i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
上記結果は、I2C-1のスレーブアドレス3Ehと40hにデバイスが見えている事をあらわしています。スレーブアドレスは同一I2Cバス上のデバイスの中で重複することがないようにしてください(デバイス上にスレーブアドレスを変更する為のジャンパーなどがあったりするので、そういったものを使用して変更します。固定で変更出来ない場合もありますが)
I2C LCDへの書き込みは、/dev/i2c-1をopenし、そのfdにwriteするだけで制御出来ます。 コードのlcd_のプレフィックスの関数を御覧ください。
電流・電圧測定モジュールのデータの読み込みは、ina_getValue関数を御覧ください。やりとりは、ioctl I2C_RDWRを使用します。コードの該当部は以下。既にデバイスがopenされた状態で使用します。フルのソースコードはgithubにアップしています(後述)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <unistd.h>
#define I2C_SLAVEADDR_INA 0x40
static int ina_getValue(int fd,int addr,int* val)
{
struct i2c_rdwr_ioctl_data data;
struct i2c_msg msg[2];
int result;
unsigned char buff[2] = { 0 };
unsigned char buff2[2] = { 0 };
memset((void*)&data,0,sizeof(struct i2c_rdwr_ioctl_data));
memset((void*)msg,0,sizeof(msg));
buff[0] = addr;
msg[0].addr = I2C_SLAVEADDR_INA;
msg[0].flags = 0;
msg[0].len = 1;
msg[0].buf = buff;
msg[1].addr = msg[0].addr;
msg[1].flags = I2C_M_RD;
msg[1].len = 2;
msg[1].buf = buff2;
data.msgs = msg;
data.nmsgs = 2;
result = ioctl(fd,I2C_RDWR,&data);
*val = buff2[0]<<8 | buff2[1];
return(0);
}
ソースは以下にアップしました!です。
https://github.com/yishii/raspberrypi_i2c_simple_v_i_meter/
Raspberry Piユーザーガイド
posted with amazlet at 13.03.24
Eben Upton Gareth Halfacree
インプレスジャパン
売り上げランキング: 4,169
インプレスジャパン
売り上げランキング: 4,169



