15. I2C
I2Cオブジェクトは、I2C通信機能を提供する組み込みオブジェクトです。
機能概要:
- I2Cマスタモード機能を提供します。
Abstracts
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
new I2C() | I2Cインスタンスを生成します。 | 00.00.15+ |
{I2C} Instance
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
.open() | 通信を開始します。 | 00.00.15+ | |
.close() | 通信を終了します。 | 00.00.15+ | |
.write() | データを書き込みます。 | 00.00.15+ | |
.read() | データを読み込みます。 | 00.00.15+ | |
.writeRead() | データを書き込み後にデータを読み込みます。 | 00.00.23+ |
Details
new I2C(nodeNo)
I2Cインスタンスを生成します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
nodeNo | number | mandatory | 使用するI2Cインタフェースのノード番号を指定します。 Pinoutを参照してください。 | |
return | {I2C} | - | {I2C} : 生成された{I2C} |
.open(baudrate)
通信を開始します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
baudrate | number | mandatory | 通信速度 通信ボーレート[bps]を指定します。 設定範囲: 100000、400000 | |
return | boolean | - | true: 成功 false: 失敗 |
.close()
通信を終了します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | true: 成功 false: 失敗 |
.write(slaveAddr,buff)
データを書き込みます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
slaveAddr | number | mandatory | I2Cデバイスのスレーブアドレス 設定範囲: 0~127 (7ビット) | |
buff | ArrayBuffer | mandatory | 書き込みデータ ArrayBufferサイズ分、書き込まれます。 | 一度に書き込み可能なサイズは255バイトです。 |
return | boolean | - | true: 成功 false: 失敗 |
データ長が1バイトの時はUint8Arrayを用いて以下のようにします。
var buff = new ArrayBuffer(1);
var arr = new Uint8Array(buff);
arr[0] = your_data;
var ret = i2c.write(slave_address, buff);
.read(slaveAddr,len)
データを読み込みます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
slaveAddr | number | mandatory | I2Cデバイスのスレーブアドレス 設定範囲: 0~127 (7ビット) | |
len | number | mandatory | 読み込みデータ長を指定します。 | 一度に読み込み可能な最大サイズは255バイトです。 |
return | Arraybuffer | - | 読み込んだデータ 読み込みに失敗した場合は、サイズが0となります。 |
.writeRead(slaveAddr,buff,len)
データを書き込み後にデータを読み込みます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
slaveAddr | number | mandatory | I2Cデバイスのスレーブアドレス 設定範囲: 0~127 (7ビット) | |
buff | ArrayBuffer | mandatory | 書き込みデータ ArrayBufferサイズ分、書き込まれます。 | 一度に書き込み可能なサイズは255バイトです。 |
len | number | mandatory | 読み込みデータ長を指定します。 | 一度に読み込み可能な最大サイズは255バイトです。 |
return | Arraybuffer | - | 読み込んだデータ 読み込みに失敗した場合は、サイズが0となります。 |
オブジェクトの使用例
Sample 1
スレーブアドレスが0x3AのI2Cデバイスで、レジスタ0x05に0x03を書き込み、次にレジスタ0x06から1バイト読み込むサンプルです。
var NODE_NO = 1;
var BAUDRATE = 400000;
var SLAVE_ADDR = 0x3A; //slave address
//I2C write function
var write = function(i2c, reg, data) {
var buf = new ArrayBuffer(2);
var arr = new Uint8Array(buf);
arr[0] = reg;
arr[1] = data;
var ret = i2c.write(SLAVE_ADDR, buf);
if (!ret) print('I2C write error');
return ret;
};
//I2C read function
var read = function(i2c, reg) {
var buf = new ArrayBuffer(1);
var arr = new Uint8Array(buf);
arr[0] = reg;
if(!i2c.write(SLAVE_ADDR, buf)) {
print('I2C read error');
return 0;
}
var retBuf = i2c.read(SLAVE_ADDR, 1);
if (!retBuf.byteLength) print('I2C read error2');
var ret = new Uint8Array(retBuf);
return ret[0];
};
var i2c = new I2C(NODE_NO);
i2c.open(BAUDRATE);
write(i2c, 0x05, 0x03);
read(i2c, 0x06);
i2c.close();
Sample 2
スレーブアドレスが0x3AのI2Cデバイスで、レジスタ0x05に0x03を書き込み、1バイト読み込むサンプルです。
var NODE_NO = 1;
var BAUDRATE = 400000;
var SLAVE_ADDR = 0x3A; //slave address
//I2C writeRead function
var writeRead = function(i2c, reg, data) {
var buf = new ArrayBuffer(2);
var arr = new Uint8Array(buf);
arr[0] = reg;
arr[1] = data;
var retBuf = i2c.writeRead(SLAVE_ADDR, buf, 1);
if (!retBuf.byteLength) print('I2C write read error');
var ret = new Uint8Array(retBuf);
return ret[0];
};
var i2c = new I2C(NODE_NO);
i2c.open(BAUDRATE);
writeRead(i2c, 0x05, 0x03);
i2c.close();
Updated: 2020-09-18