Mongoose js の I2C ライブラリの使い方で手間取ったのでメモを残しておきます。
SHT31 というセンサーを使い、気温と湿度を取ります。
Mongoose OS + mjs の git 管理開発環境構築 - Qiita で作った環境を使います。
fs/init.js
load("api_config.js");
load("api_mqtt.js");
load("api_net.js");
load("api_sys.js");
load("api_timer.js");
load("api_i2c.js");
let address = 0x44;
let bus = I2C.get_default();
let get_temps = function() {
let d = "\x2C\x06";
I2C.write(bus, address, d, d.length, true);
Sys.usleep(1000);
let data = I2C.read(bus, address, 6, true);
print(data);
let temp = data.at(0) * 256 + data.at(1);
let cTemp = -45 + 175 * temp / 65535.0;
let fTemp = -49 + 315 * temp / 65535.0;
let humidity = 100 * (data.at(3) * 256 + data.at(4)) / 65535.0;
return [temp, cTemp, fTemp, humidity];
};
Timer.set(
1000 * 5,
true /* repeat */,
function() {
let res = get_temps();
print("t:");
print(res[1]);
print("h:");
print(res[3]);
// MQTT.pub('home/livingroom/brightness', JSON.stringify(lux), 0);
},
null
);
SHT31 のデータシートはこれです。http://akizukidenshi.com/download/ds/sensirion/Sensirion_Humidity_Sensors_SHT3x_DIS_Datasheet_V3_J.pdf
つまづいた所
公式ライブラリの api_i2c.js のドキュメント
コード: https://github.com/mongoose-os-libs/i2c/blob/master/mjs_fs/api_i2c.js
- I2C.write の使い方
- sleep が必要
- I2C.read の使い方
I2C.write(bus, address, "\x2C\x06", 2, true);
Sys.usleep(1000);
let data = I2C.read(bus, address, 6, true);
Python と比較
bus.write_i2c_block_data(address, 0x2C, [0x06])
time.sleep(0.5)
data = bus.read_i2c_block_data(address, 0x00, 6)
address は 0x44 です。
buf はデータシートにあるように指定します。
6byte 読めます。
参考
ControlEverythingCommunity/SHT31: Humidity and Temperature Sensor
Python や Arduino での実装サンプルなど↑