2022-03-02 11:25:14 +00:00
|
|
|
|
/********* */
|
|
|
|
|
/** BME280 */
|
|
|
|
|
/********* */
|
|
|
|
|
Blockly.Blocks['ugj_bme280'] = {
|
|
|
|
|
init: function () {
|
|
|
|
|
this.appendDummyInput()
|
|
|
|
|
.appendField("BME280(アドレス")
|
|
|
|
|
.appendField(new Blockly.FieldDropdown([["0x76", "0x76"], ["0x77", "0x77"]]), "addr")
|
|
|
|
|
.appendField(")の計測値を取得");
|
|
|
|
|
this.setInputsInline(true);
|
|
|
|
|
this.setPreviousStatement(true, null);
|
|
|
|
|
this.setNextStatement(true, null);
|
|
|
|
|
this.setStyle('sensor_blocks');
|
|
|
|
|
this.setTooltip("環境センサーBME280で、気温(摂氏)、湿度(%)、気圧(hPa)を計測します。計測結果は計測値ブロックで参照します。");
|
|
|
|
|
this.setHelpUrl("");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
Blockly.JavaScript['ugj_bme280'] = function (block) {
|
|
|
|
|
var dropdown_addr = block.getFieldValue('addr');
|
|
|
|
|
Blockly.JavaScript.provideFunction_(
|
2022-05-24 13:11:10 +00:00
|
|
|
|
'require_gpio', [`const _pi = require('@ocoge.club/` + elutil.gpio_backend + `');`]
|
2022-03-02 11:25:14 +00:00
|
|
|
|
);
|
|
|
|
|
let modpath = elutil.path.join(elutil.blocks_sensors_dir, 'bme280', 'BME280x.js');
|
|
|
|
|
Blockly.JavaScript.provideFunction_(
|
|
|
|
|
'require_bme280', [`const _bme280 = require('${modpath}');`]
|
|
|
|
|
);
|
|
|
|
|
var code = `const options = {
|
|
|
|
|
i2cBusNo: ${elutil.i2c_bus},
|
|
|
|
|
i2cAddress: ${dropdown_addr}
|
|
|
|
|
};
|
|
|
|
|
await _bme280.init(options);
|
|
|
|
|
let _thp = await _bme280.readSensorData();
|
|
|
|
|
let _bmedata = [];
|
|
|
|
|
_bmedata[0] = Math.round(_thp.temperature_C * 10) / 10;
|
|
|
|
|
_bmedata[1] = Math.round(_thp.humidity * 10) / 10;
|
|
|
|
|
_bmedata[2] = Math.round(_thp.pressure_hPa);
|
|
|
|
|
await _bme280.cancel();
|
|
|
|
|
`;
|
|
|
|
|
return code;
|
|
|
|
|
};
|
|
|
|
|
Blockly.Blocks['ugj_bme280_data'] = {
|
|
|
|
|
init: function () {
|
|
|
|
|
this.appendDummyInput()
|
|
|
|
|
.appendField(new Blockly.FieldDropdown([["気温", "0"], ["湿度", "1"], ["気圧", "2"]]), "thp");
|
|
|
|
|
this.setInputsInline(true);
|
|
|
|
|
this.setOutput(true, null);
|
|
|
|
|
this.setStyle('sensor_blocks');
|
|
|
|
|
this.setTooltip("BME280 の計測値を返します。");
|
|
|
|
|
this.setHelpUrl("");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
Blockly.JavaScript['ugj_bme280_data'] = function (block) {
|
|
|
|
|
var dropdown_thp = block.getFieldValue('thp');
|
|
|
|
|
var code = `_bmedata[${dropdown_thp}]`;
|
|
|
|
|
return [code, Blockly.JavaScript.ORDER_ATOMIC];
|
|
|
|
|
};
|