diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 6a7e4bbb..7b7ee9e7 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -740,14 +740,14 @@ Blockly.Blocks["sensebox_esp32s2_light"] = { }; /** - * senseBox-MCU ESP32-S2 onBoard MPU6050 + * senseBox-MCU ESP32-S2 onBoard accelerometer * * */ -Blockly.Blocks["sensebox_esp32s2_mpu6050"] = { +Blockly.Blocks["sensebox_esp32s2_accelerometer"] = { init: function () { - this.appendDummyInput().appendField("ESP32-S2 MPU6050"); + this.appendDummyInput().appendField(Blockly.Msg.senseBox_accelerometer); this.appendDummyInput() .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg.senseBox_value) @@ -762,9 +762,9 @@ Blockly.Blocks["sensebox_esp32s2_mpu6050"] = { ); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_mpu6050_tooltip); - this.setHelpUrl(withBoardParam(Blockly.Msg.senseBox_mpu6050_helpurl)); - this.data = { name: "mpu6050" }; + this.setTooltip(Blockly.Msg.senseBox_accelerometer_tooltip); + this.setHelpUrl(withBoardParam(Blockly.Msg.senseBox_accelerometer_helpurl)); + this.data = { name: "acceleration" }; }, }; @@ -805,8 +805,8 @@ Blockly.Blocks["sensebox_sensor_icm20948"] = { ); this.setOutput(true, Types.DECIMAL.typeName); this.setColour(getColour().sensebox); - this.setTooltip(Blockly.Msg.senseBox_mpu6050_tooltip); - this.setHelpUrl(Blockly.Msg.senseBox_mpu6050_helpurl); + this.setTooltip(Blockly.Msg.senseBox_accelerometer_tooltip); + this.setHelpUrl(Blockly.Msg.senseBox_accelerometer_helpurl); this.data = { name: "icm20948" }; }, }; diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index b876a3a3..184e9bf9 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -1037,56 +1037,102 @@ Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_light"] = function () { }; /** - * senseBox MCU-S2 onboard MPU6050 + * senseBox MCU-S2 onboard accelerometer * **/ -Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_mpu6050"] = function () { - var code = ""; - var dropdown = this.getFieldValue("value"); - Blockly.Generator.Arduino.libraries_["esp32s2_mpu6050"] = - `#include `; - Blockly.Generator.Arduino.libraries_["Adafruit_Sensor"] = - `#include `; - Blockly.Generator.Arduino.libraries_["library_wire"] = `#include `; - Blockly.Generator.Arduino.definitions_["define_Adafruit_mpu6050"] = - "Adafruit_MPU6050 mpu;"; - Blockly.Generator.Arduino.definitions_["define_sensor_events"] = - "sensors_event_t a, g, temp;"; - Blockly.Generator.Arduino.setupCode_["Wire1.begin()"] = "Wire1.begin();"; - Blockly.Generator.Arduino.setupCode_["mpu.begin()"] = - "mpu.begin(0x68, &Wire1);"; - Blockly.Generator.Arduino.setupCode_["mpu.setAccelerometerRange()"] = - "mpu.setAccelerometerRange(MPU6050_RANGE_8_G);"; - Blockly.Generator.Arduino.loopCodeOnce_["mpu.getEvent"] = - "mpu.getEvent(&a, &g, &temp);"; - switch (dropdown) { - case "accelerationX": - code = "a.acceleration.x"; - break; - case "accelerationY": - code = "a.acceleration.y"; - break; - case "accelerationZ": - code = "a.acceleration.z"; - break; - case "gyroscopeX": - code = "g.gyro.x"; - break; - case "gyroscopeY": - code = "g.gyro.y"; - break; - case "gyroscopeZ": - code = "g.gyro.z"; - break; - case "temperature": - code = "temp.temperature"; - break; - default: - code = ""; - } - return [code, Blockly.Generator.Arduino.ORDER_ATOMIC]; -}; +Blockly.Generator.Arduino.forBlock["sensebox_esp32s2_accelerometer"] = + function () { + var code = ""; + var dropdown = this.getFieldValue("value"); + Blockly.Generator.Arduino.libraries_["esp32s2_mpu6050"] = + `#include `; + Blockly.Generator.Arduino.libraries_["esp32s2_icm42670"] = + `#include "ICM42670P.h"`; + Blockly.Generator.Arduino.libraries_["esp32s2_icm20948"] = + `#include `; + Blockly.Generator.Arduino.libraries_["Adafruit_Sensor"] = + `#include `; + Blockly.Generator.Arduino.libraries_["library_wire"] = `#include `; + Blockly.Generator.Arduino.definitions_["define_Adafruit_mpu6050"] = + "Adafruit_MPU6050 mpu;"; + Blockly.Generator.Arduino.definitions_["define_ICM42670P"] = + "ICM42670 icm = ICM42670(Wire1, 0);"; + Blockly.Generator.Arduino.definitions_["define_ICM20948"] = + "ICM20948_WE myIMU = ICM20948_WE(&Wire1, 0x68);"; + Blockly.Generator.Arduino.definitions_["define_acceleration_switch"] = + "int sensorActive = 0; // 0: none, 1: MPU6050, 2: ICM42670P, 3: ICM20948"; + Blockly.Generator.Arduino.setupCode_["Wire1.begin()"] = "Wire1.begin();"; + Blockly.Generator.Arduino.setupCode_["begin_acceleration"] = + "if (mpu.begin(0x68, &Wire1)) // Try MPU6050 first\n" + + " {\n" + + " mpu.setAccelerometerRange(MPU6050_RANGE_8_G);\n" + + " mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);\n" + + " sensorActive = 0;\n" + + " }\n" + + " else if (icm.begin() == 0) // If MPU6050 fails, try ICM42670P\n" + + " {\n" + + " icm.startAccel(21, 8); // Accel ODR = 100 Hz, Range = 8G\n" + + " sensorActive = 1;\n" + + " }\n" + + " else\n" + + " {\n" + + " myIMU.init();\n" + + " myIMU.autoOffsets();\n" + + " myIMU.setAccRange(ICM20948_ACC_RANGE_8G);\n" + + " myIMU.setAccSampleRateDivider(4); // 100 Hz sample rate\n" + + " sensorActive = 2;\n" + + " }"; + Blockly.Generator.Arduino.codeFunctions_["sensebox_requestAcceleration"] = + "float getAcceleration(String sensorValueType) {\n" + + "if (sensorActive == 0) {\n" + + "sensors_event_t a, g, temp;\n" + + "mpu.getEvent(&a, &g, &temp);\n" + + 'if (sensorValueType == "accelerationX") {\n' + + "return a.acceleration.x;\n" + + '} else if (sensorValueType == "accelerationY") {\n' + + "return a.acceleration.y;\n" + + '} else if (sensorValueType == "accelerationZ") {\n' + + "return a.acceleration.z;\n" + + '} else if (sensorValueType == "temperature") {\n' + + "return temp.temperature;\n" + + "} else {\n" + + "return 0.0;\n" + + "}\n" + + "} else if (sensorActive == 1) {\n" + + "inv_imu_sensor_event_t imu_event;\n" + + "icm.getDataFromRegisters(imu_event);\n" + + 'if (sensorValueType == "accelerationX") {\n' + + "return (imu_event.accel[0]*9.81)/4096.0;\n" + + '} else if (sensorValueType == "accelerationY") {\n' + + "return (imu_event.accel[1]*9.81)/4096.0;\n" + + '} else if (sensorValueType == "accelerationZ") {\n' + + "return (imu_event.accel[2]*9.81)/4096.0;\n" + + '} else if (sensorValueType == "temperature") {\n' + + "return (imu_event.temperature/132.48)+25.0;\n" + + "} else {\n" + + "return 0.0;\n" + + "}\n" + + "} else {\n" + + "myIMU.readSensor();\n" + + "xyzFloat accRaw;\n" + + "myIMU.getAccRawValues(&accRaw);\n" + + 'if (sensorValueType == "accelerationX") {\n' + + "return accRaw.x * 9.81 / 4096.0;\n" + + '} else if (sensorValueType == "accelerationY") {\n' + + "return accRaw.y * 9.81 / 4096.0;\n" + + '} else if (sensorValueType == "accelerationZ") {\n' + + "return accRaw.z * 9.81 / 4096.0;\n" + + '} else if (sensorValueType == "temperature") {\n' + + "return myIMU.getTemperature();\n" + + "} else {\n" + + "return 0.0;\n" + + "}\n" + + "}\n" + + "}\n"; + var code = 'getAcceleration("' + dropdown + '")'; + return [code, Blockly.Generator.Arduino.ORDER_ATOMIC]; + }; /** * Block for Truebner STM50 on MCUS2 diff --git a/src/components/Blockly/msg/de/sensebox-sensors.js b/src/components/Blockly/msg/de/sensebox-sensors.js index ee12bca0..f27231b3 100644 --- a/src/components/Blockly/msg/de/sensebox-sensors.js +++ b/src/components/Blockly/msg/de/sensebox-sensors.js @@ -243,17 +243,12 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver senseBox_esp32_photodiode_helpurl: "https://docs.sensebox.de/docs/hardware/sensors/photodiode", /** - * MPU6050 */ - senseBox_mpu6050_tooltip: - "Der MPU6050 ist ein Beschleunigungs- und Gyroskopsensor. Schließe den Sensor an einen der I2C Anschlüsse an. Der Sensor gibt dir die Beschleunigung in m/s² und die Winkelgeschwindigkeit in °/s zurück.", - senseBox_mpu6050_helpurl: "https://docs.sensebox.de/docs/hardware/sensors/mpu6050", - - /** - * MPU6050 */ - senseBox_mpu6050_tooltip: - "Der MPU6050 ist ein Beschleunigungs- und Gyroskopsensor. Schließe den Sensor an einen der I2C Anschlüsse an. Der Sensor gibt dir die Beschleunigung in m/s² und die Winkelgeschwindigkeit in °/s zurück.", - senseBox_mpu6050_helpurl: - "https://docs.sensebox.de/docs/hardware/sensors/mpu6050/", + * accelerometer MCUS2(ESP32) */ + senseBox_accelerometer: "ESP32-S2 Beschleunigungssensor", + senseBox_accelerometer_tooltip: + "Die senseBox MCU S2 hat einen der folgenden Beschleunigungssensoren an Bord: MPU6050, ICM-42670-P oder ICM-20948. Diese Sensoren geben dir die Beschleunigung in m/s² zurück.", + senseBox_accelerometer_helpurl: + "https://docs.sensebox.de/docs/hardware/sensors/mpu6050", // TODO: mpu6050 is just one of the supported acceleration sensors of this block /** * ToF Imager @@ -272,5 +267,4 @@ Die Messwerte für Temperatur, Luftfeuchtigkeit und Luftdruck können direkt ver * ICM Accel/Gyro */ senseBox_icm20948: "Beschleunigungs-/Gyroskopsensor (ICM20948)", - }; diff --git a/src/components/Blockly/msg/en/sensebox-sensors.js b/src/components/Blockly/msg/en/sensebox-sensors.js index 4c4f785b..40288b5a 100644 --- a/src/components/Blockly/msg/en/sensebox-sensors.js +++ b/src/components/Blockly/msg/en/sensebox-sensors.js @@ -250,6 +250,14 @@ The measured values for temperature, humidity and air pressure can be used direc senseBox_esp32_photodiode_helpurl: "https://docs.sensebox.de/en/docs/hardware/sensors/photodiode", + /** + * accelerometer MCUS2(ESP32) */ + senseBox_accelerometer: "ESP32-S2 Accelerometer", + senseBox_accelerometer_tooltip: + "The senseBox MCU S2 has one of the following accelerometers on board: MPU6050, ICM-42670-P or ICM-20948. These sensor gives you the acceleration in m/s².", + senseBox_accelerometer_helpurl: + "https://docs.sensebox.de/docs/hardware/sensors/mpu6050", // TODO: mpu6050 is just one of the supported acceleration sensors of this block + /** * ToF Imager * diff --git a/src/components/Blockly/toolbox/ToolboxEsp.jsx b/src/components/Blockly/toolbox/ToolboxEsp.jsx index 538c6b94..a557c041 100644 --- a/src/components/Blockly/toolbox/ToolboxEsp.jsx +++ b/src/components/Blockly/toolbox/ToolboxEsp.jsx @@ -17,7 +17,7 @@ export const ToolboxEsp = () => { - +