diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 7a69df1..707bb64 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -562,3 +562,31 @@ Blockly.Blocks["sensebox_sensor_dps310"] = { } }, }; + +/** + * Sensirion SPS30 Fine Particular Matter Sensor + * added 02.12.2022 + */ + + Blockly.Blocks["sensebox_sensor_sps30"] = { + init: function () { + this.appendDummyInput().appendField(Blockly.Msg.senseBox_sps30); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_LEFT) + .appendField(Blockly.Msg.senseBox_value) + .appendField( + new Blockly.FieldDropdown([ + [Blockly.Msg.senseBox_sps30_1p0, "1p0"], + [Blockly.Msg.senseBox_sps30_2p5, "2p5"], + [Blockly.Msg.senseBox_sps30_4p0, "4p0"], + [Blockly.Msg.senseBox_sps30_10p0, "10p0"], + ]), + "value" + ) + .appendField(Blockly.Msg.senseBox_sps30_dimension); + this.setOutput(true, Types.DECIMAL.typeName); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_sps30_tooltip); + this.setHelpUrl(Blockly.Msg.senseBox_sps30_helpurl); + }, +}; \ No newline at end of file diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 9d053c5..da46ec3 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -693,3 +693,52 @@ Blockly.Arduino.sensebox_sensor_dps310 = function () { } return [code, Blockly.Arduino.ORDER_ATOMIC]; }; + + +/** + * Sensirion SPS30 Fine Particlar Matter + * + */ + + Blockly.Arduino.sensebox_sensor_sps30 = function () { + var dropdown_name = this.getFieldValue("value"); + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_[ + "sps30" + ] = `#include // http://librarymanager/All#`; + Blockly.Arduino.variables_["sps30_measurement"] = "struct sps30_measurement m;"; + Blockly.Arduino.variables_["sps30_auto_clean_days"] = "uint32_t auto_clean_days = 4;"; + Blockly.Arduino.variables_["sps30_ret"] = "int16_t ret;"; + Blockly.Arduino.variables_["sps30_interval_intervalsps"] = "const long intervalsps = 1000;"; + Blockly.Arduino.variables_["sps30_time_startsps"] = "unsigned long time_startsps = 0;"; + Blockly.Arduino.variables_["sps30_time_actualsps"] = "unsigned long time_actualsps = 0;"; + Blockly.Arduino.codeFunctions_["sps30_getData"] = ` +void getSPS30Data(){ + +uint16_t data_ready; +int16_t ret; + +do { + ret = sps30_read_data_ready(&data_ready); + if (ret < 0) { + } else if (!data_ready) {} + else + break; + delay(100); /* retry in 100ms */ + } while (1); + ret = sps30_read_measurement(&m); +} + `; + + Blockly.Arduino.setupCode_["sps30_begin"] = "sensirion_i2c_init();"; + Blockly.Arduino.setupCode_["sps30_setFanCleaningInterval"] = "sps30_set_fan_auto_cleaning_interval_days(auto_clean_days);" + Blockly.Arduino.setupCode_["sps30_startMeasurement"] = "sps30_start_measurement();"; + Blockly.Arduino.loopCodeOnce_["getSPS30Data();"] = ` +time_startsps = millis(); +if (time_startsps > time_actualsps + intervalsps) { + time_actualsps = millis(); + getSPS30Data(); +}`; + var code = `m.mc_${dropdown_name}`; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; \ No newline at end of file diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index 64d0baa..fe4b37f 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -175,7 +175,7 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver * Feinstaubsensor (SDS011) */ - senseBox_sds011: "Feinstaubsensor", + senseBox_sds011: "Feinstaubsensor SDS011", senseBox_sds011_dimension: "in µg/m³ an", senseBox_sds011_pm25: "PM2.5", senseBox_sds011_pm10: "PM10", @@ -200,4 +200,24 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver - "wurde gedrückt": Mit diesem Modus kannst du abfragen ob der Block gedrückt wurde. Erst wenn der Knopf gedrückt und wieder losgelassen wurde erhältst du TRUE zurück - "als Schalter": Wenn du diesen Block verwendest kannst du den Knopf wie ein Lichtschalter verwenden. Der Status wird gespeichert bis der Button erneut gedrückt wird`, senseBox_button_helpurl: "", -}; + + + + /** + * Feinstaubsensor Sensirion SPS30 + */ + + senseBox_sps30: "Feinstaubsensor Sensirion SPS30", + senseBox_sps30_dimension: "in µg/m³", + senseBox_sps30_1p0: "PM1.0", + senseBox_sps30_2p5: "PM2.5", + senseBox_sps30_4p0: "PM4.0", + senseBox_sps30_10p0: "PM10", + senseBox_sps30_tooltip: + "Dieser Block gibt dir den Messwert des Feinstaubsensor. Schließe den Feinstaubsensor an einen der 2 **Serial/UART** Anschlüssen an. Im Dropdown Menü zwischen PM2.5 und PM10 auswählen. Der Messwert wird dir als **Kommazahl** in µg/m3", + senseBox_sps30_helpurl: + "https://docs.sensebox.de/hardware/sensoren-feinstaub/", + + + + }; \ No newline at end of file diff --git a/src/components/Blockly/msg/en/sensebox-sensors.js b/src/components/Blockly/msg/en/sensebox-sensors.js index 94f698a..c6e872f 100644 --- a/src/components/Blockly/msg/en/sensebox-sensors.js +++ b/src/components/Blockly/msg/en/sensebox-sensors.js @@ -205,4 +205,23 @@ The measured values for temperature, humidity and air pressure can be used direc * */ senseBox_watertemperature: "Water Temperature", + + + /** + * Feinstaubsensor Sensirion SPS30 + */ + + senseBox_sps30: "Feinstaubsensor Sensirion SPS30", + senseBox_sps30_dimension: "in µg/m³", + senseBox_sps30_1p0: "PM1.0", + senseBox_sps30_2p5: "PM2.5", + senseBox_sps30_4p0: "PM4.0", + senseBox_sps30_10p0: "PM10", + senseBox_sps30_tooltip: + "Dieser Block gibt dir den Messwert des Feinstaubsensor. Schließe den Feinstaubsensor an einen der 2 **Serial/UART** Anschlüssen an. Im Dropdown Menü zwischen PM2.5 und PM10 auswählen. Der Messwert wird dir als **Kommazahl** in µg/m3", + senseBox_sps30_helpurl: + "https://docs.sensebox.de/hardware/sensoren-feinstaub/", + + + }; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 7fa9f5a..68c100a 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -61,6 +61,7 @@ class Toolbox extends React.Component { +