diff --git a/boards/default_src/micropython/blocks/actuator_onboard.js b/boards/default_src/micropython/blocks/actuator_onboard.js
index 57076e65..03ee04ae 100644
--- a/boards/default_src/micropython/blocks/actuator_onboard.js
+++ b/boards/default_src/micropython/blocks/actuator_onboard.js
@@ -951,7 +951,7 @@ export const set_power_output = {
this.appendDummyInput()
.appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.ME_GO_MOTOR_EXTERN)
.appendField(Blockly.Msg.PIN_NUMBERING)
- .appendField(new Blockly.FieldDropdown([["1", "1"], ["2", "2"], ["3", "3"]]), "index");
+ .appendField(new Blockly.FieldDropdown([["1", "1"], ["2", "2"], ["3", "3"],["4", "4"]]), "index");
this.appendValueInput('duty')
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
diff --git a/boards/default_src/micropython/blocks/ai_local.js b/boards/default_src/micropython/blocks/ai_local.js
new file mode 100644
index 00000000..302f7168
--- /dev/null
+++ b/boards/default_src/micropython/blocks/ai_local.js
@@ -0,0 +1,474 @@
+import * as Blockly from 'blockly/core';
+const AI_LOCAL_VOICE_HUE = '#D1D431';
+const AI_LOCAL_GRAPH_HUE = '#90A244';
+
+//voice part
+export const CI130X_IDENTIFY_AND_SAVE_SANT = {
+ init: function () {
+ this.setColour(AI_LOCAL_VOICE_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const CI130X_GET_WHETHER_IDENTIFY_SANT = {
+ init: function () {
+ this.setColour(AI_LOCAL_VOICE_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MIXLY_HELLO_XIAOZHI, "1"],
+ [Blockly.Msg.MIXLY_XIAOZHIXIAOZHI, "2"],
+ [Blockly.Msg.MIXLY_THE_FIRST, "3"],
+ [Blockly.Msg.MIXLY_THE_SECOND, "4"],
+ [Blockly.Msg.MIXLY_THE_THIRD, "5"],
+ [Blockly.Msg.MIXLY_THE_FOURTH, "6"],
+ [Blockly.Msg.MIXLY_THE_FIFTH, "7"],
+ [Blockly.Msg.MIXLY_THE_SIXTH, "8"],
+ [Blockly.Msg.MIXLY_THE_SEVENTH, "9"],
+ [Blockly.Msg.MIXLY_THE_EIGHTH, "10"],
+ [Blockly.Msg.MIXLY_THE_NINTH, "11"],
+ [Blockly.Msg.MIXLY_THE_TENTH, "12"],
+ [Blockly.Msg.MIXLY_THE_ELEVENTH, "13"],
+ [Blockly.Msg.MIXLY_THE_TWELFTH, "14"],
+ [Blockly.Msg.MIXLY_THE_13TH, "15"],
+ [Blockly.Msg.MIXLY_THE_14TH, "16"],
+ [Blockly.Msg.MIXLY_THE_15TH, "17"],
+ [Blockly.Msg.MIXLY_THE_16TH, "18"],
+ [Blockly.Msg.MIXLY_THE_17TH, "19"],
+ [Blockly.Msg.MIXLY_THE_18TH, "20"],
+ [Blockly.Msg.MIXLY_THE_19TH, "21"],
+ [Blockly.Msg.MIXLY_THE_20TH, "22"],
+ [Blockly.Msg.MIXLY_Turn_on_the_lights, "23"],
+ [Blockly.Msg.MIXLY_Turn_off_the_lights, "24"],
+ [Blockly.Msg.MIXLY_Turn_up_the_brightness, "25"],
+ [Blockly.Msg.MIXLY_Turn_down_the_brightness, "26"],
+ [Blockly.Msg.MIXLY_Set_it_to_red, "27"],
+ [Blockly.Msg.MIXLY_Set_it_to_orange, "28"],
+ [Blockly.Msg.MIXLY_Set_it_to_yellow, "29"],
+ [Blockly.Msg.MIXLY_Set_it_to_green, "30"],
+ [Blockly.Msg.MIXLY_Set_it_to_cyan, "31"],
+ [Blockly.Msg.MIXLY_Set_it_to_blue, "32"],
+ [Blockly.Msg.MIXLY_Set_it_to_purple, "33"],
+ [Blockly.Msg.MIXLY_Set_it_to_white, "34"],
+ [Blockly.Msg.MIXLY_Turn_on_the_fan, "35"],
+ [Blockly.Msg.MIXLY_Turn_off_the_fan, "36"],
+ [Blockly.Msg.MIXLY_First_gear, "37"],
+ [Blockly.Msg.MIXLY_Wind_speed_second, "38"],
+ [Blockly.Msg.MIXLY_Third_gear, "39"],
+ [Blockly.Msg.MIXLY_Previous, "40"],
+ [Blockly.Msg.MIXLY_Next_page, "41"],
+ [Blockly.Msg.MIXLY_Show_smiley_face, "42"],
+ [Blockly.Msg.MIXLY_Show_crying_face, "43"],
+ [Blockly.Msg.MIXLY_Show_love, "44"],
+ [Blockly.Msg.MIXLY_Close_display, "45"],
+ [Blockly.Msg.MIXLY_Start_execution, "46"],
+ [Blockly.Msg.MIXLY_FORWARD, "47"],
+ [Blockly.Msg.MIXLY_BACKWARD, "48"],
+ [Blockly.Msg.MIXLY_TURNLEFT, "49"],
+ [Blockly.Msg.MIXLY_TURNRIGHT, "50"],
+ [Blockly.Msg.MIXLY_STOP, "51"],
+ [Blockly.Msg.MIXLY_Accelerate, "52"],
+ [Blockly.Msg.MIXLY_retard, "53"],
+ [Blockly.Msg.ROTATION_FORWARD, "54"],
+ [Blockly.Msg.ROTATION_BACKWARD, "55"],
+ [Blockly.Msg.MIXLY_Query_temperature, "56"],
+ [Blockly.Msg.MIXLY_Query_humidity, "57"],
+ [Blockly.Msg.MIXLY_Query_brightness, "58"],
+ [Blockly.Msg.MIXLY_Query_sound, "59"],
+ [Blockly.Msg.MIXLY_Query_time, "60"],
+ [Blockly.Msg.MIXLY_Query_distance, "61"],
+ [Blockly.Msg.MIXLY_Query_pressure, "62"],
+ [Blockly.Msg.MIXLY_Query_key, "63"],
+ [Blockly.Msg.MIXLY_Query_touch, "64"],
+ [Blockly.Msg.MIXLY_Query_color, "65"]
+ ]), "cmd")
+ .appendField(Blockly.Msg.MIXLY_WHETHER + Blockly.Msg.MIXLY_BE_IDENTIFIED);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const CI130X_GET_THE_RECOGNIZED_CMD_SANT = {
+ init: function () {
+ this.setColour(AI_LOCAL_VOICE_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MIXLY_RECOGNIZED_STATE, "status1"],
+ [Blockly.Msg.MIXLY_WHETHER_BROADCAST, "status2"],
+ [Blockly.Msg.MIXLY_THE_RECOGNIZED_CMD, "result"]
+ ]), "key")
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(Blockly.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);
+ }
+};
+
+export const CI130X_BROADCAST_SANT = {
+ init: function () {
+ this.setColour(AI_LOCAL_VOICE_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_MP3_PLAY)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE, "None"],
+ [Blockly.Msg.MIXLY_WIND_SPEED, "154"],
+ [Blockly.Msg.MIXLY_HYETAL, "155"],
+ [Blockly.Msg.MIXLY_TEMPERATURE, "156"],
+ [Blockly.Msg.MIXLY_Humidity, "157"],
+ [Blockly.Msg.MIXLY_Altitude, "158"],
+ [Blockly.Msg.MIXLY_SOUND, "159"],
+ [Blockly.Msg.MIXLY_BRIGHTNESS, "160"],
+ [Blockly.Msg.ME_GO_HALL_SENSOR_DISTANCE, "161"],
+ [Blockly.Msg.MIXLY_SERVO, "162"],
+ [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "163"],
+ [Blockly.Msg.MIXLY_BUTTON2, "164"],
+ [Blockly.Msg.MIXLY_ESP32_TOUCH, "165"],
+ [Blockly.Msg.MIXLY_PAY, "166"],
+ [Blockly.Msg.MIXLY_CARSH_CHANGE, "167"],
+ [Blockly.Msg.MIXLY_COUNTDOWN, "168"],
+ [Blockly.Msg.MIXLY_TIMING, "169"],
+ [Blockly.Msg.MIXLY_AT_THE_MOMENT, "170"],
+ [Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE, "171"],
+ [Blockly.Msg.MIXLY_FORWARD, "172"],
+ [Blockly.Msg.MIXLY_BACKWARD, "173"],
+ [Blockly.Msg.MIXLY_TURNLEFT, "174"],
+ [Blockly.Msg.MIXLY_TURNRIGHT, "175"],
+ [Blockly.Msg.MIXLY_STOP, "176"],
+ [Blockly.Msg.MIXLY_Accelerate, "177"],
+ [Blockly.Msg.MIXLY_retard, "178"],
+ [Blockly.Msg.ROTATION_FORWARD, "179"],
+ [Blockly.Msg.ROTATION_BACKWARD, "180"],
+ [Blockly.Msg.TUPLE_JOIN, "181"],
+ [Blockly.Msg.MIXLY_SHOW, "182"],
+ [Blockly.Msg.MIXLY_LAMPLIGHT, "183"],
+ [Blockly.Msg.MIXLY_ACCELERATION, "184"]
+ ]), "star");
+ this.appendValueInput('NUM')
+ .appendField(Blockly.Msg.MIXLY_NUMBER);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_UNIT)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE, "None"],
+ [Blockly.Msg.MIXLY_YEAR, "117"],
+ [Blockly.Msg.MIXLY_MONTH, "118"],
+ [Blockly.Msg.MIXLY_DAY, "119"],
+ [Blockly.Msg.MIXLY_HOUR, "120"],
+ [Blockly.Msg.MIXLY_MINUTE, "121"],
+ [Blockly.Msg.MIXLY_SECOND, "122"],
+ [Blockly.Msg.MIXLY_WEEK2, "123"],
+ [Blockly.Msg.MIXLY_RMB_UNIT, "124"],
+ [Blockly.Msg.blockpy_setheading_degree, "125"],
+ [Blockly.Msg.MIXLY_GEAR, "126"],
+ [Blockly.Msg.MIXLY_LAYER, "127"],
+ [Blockly.Msg.MIXLY_GRAM, "128"],
+ [Blockly.Msg.MIXLY_METER, "129"],
+ [Blockly.Msg.MIXLY_CENTIMETER, "130"],
+ [Blockly.Msg.MIXLY_MILLIMETER, "131"],
+ [Blockly.Msg.MIXLY_LUMEN, "132"],
+ [Blockly.Msg.MIXLY_DECIBEL, "133"],
+ [Blockly.Msg.MIXLY_hectopascal, "134"],
+ [Blockly.Msg.MIXLY_PERCENT, "135"],
+ [Blockly.Msg.MIXLY_CELSIUS, "136"],
+ [Blockly.Msg.MIXLY_METER_PER_SEC, "137"],
+ [Blockly.Msg.MIXLY_MICROBIT_Turn_on_display, "138"],
+ [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, "139"],
+ [Blockly.Msg.MIXLY_SUCCESS, "140"],
+ [Blockly.Msg.MIXLY_FAILED, "141"],
+ [Blockly.Msg.MIXLY_WRONG, "142"],
+ [Blockly.Msg.MIXLY_GOOD, "143"],
+ [Blockly.Msg.MIXLY_blockpy_set_add, "144"],
+ [Blockly.Msg.MIXLY_DECREASE, "145"],
+ [Blockly.Msg.COLOUR_RGB_RED, "146"],
+ [Blockly.Msg.COLOUR_RGB_ORANGE, "147"],
+ [Blockly.Msg.COLOUR_YELLOW, "148"],
+ [Blockly.Msg.COLOUR_RGB_GREEN, "149"],
+ [Blockly.Msg.COLOUR_CYAN, "150"],
+ [Blockly.Msg.COLOUR_RGB_BLUE, "151"],
+ [Blockly.Msg.COLOUR_RGB_PURPLE, "152"],
+ [Blockly.Msg.COLOUR_RGB_WHITE, "153"]
+ ]), "end");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+export const CI130X_SET_SYSTEM_CMD_SANT = {
+ init: function () {
+ this.setColour(AI_LOCAL_VOICE_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SYSTEM + Blockly.Msg.MIXLY_CMD)
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MILXY_ENTER_WAKE_UP, "1"],
+ [Blockly.Msg.MIXLY_INCREASE_VOLUME, "202"],
+ [Blockly.Msg.MIXLY_REDUCE_VOLUME, "203"],
+ [Blockly.Msg.MIXLY_MAX_VOLUME, "204"],
+ [Blockly.Msg.MIXLY_MINIMUM, "205"],
+ [Blockly.Msg.MIXLY_OPEN_RESPONSE, "206"],
+ [Blockly.Msg.MIXLY_CLOSE_RESPONSE, "207"],
+ [Blockly.Msg.MIXLY_QUIT_WAKE_UP, "208"]
+ ]), "cmd")
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+
+
+
+//graph part
+export const CREATE_CAMERA = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_SMARTCAMERA)
+ .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SHOOTING_SIZE)
+ .appendField(new Blockly.FieldDropdown([
+ ['VGA : 640px*480px', "VGA"],
+ ['QVGA : 320px*240px', "QVGA"],
+ ['LCD : 240px*240px', "LCD"],
+ ['QQVGA : 160px*120px', "QQVGA"]
+ ]), "cmd")
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const SHOOT_AND_SAVE_PICTURE = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendValueInput('direct')
+ .appendField(Blockly.Msg.MIXLY_SHOOT_AND_SAVE_PICTURE)
+ .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_PICTURE_DATA = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_PICTURE_DATA);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const SCREEN_SHOW_CAM_GRAPH_SHOOT = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXlY_SCREEN_SHOW_CAM_SHOOT);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const STOP_SCREEN_DISPLAY = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXlY_STOP_SCREEN_DISPLAY);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const INIT_QR_CODE_RECOGNITION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_QR_CODE_RECOGNTITION);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+
+
+export const START_QR_CODE_RECOGNITION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_MSTIMER2_START + Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXLY_RECOGNITION);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_QR_CODE_RECOGNITION_DATA = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_QR_CODE_RECOGNITION_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(Blockly.Msg.MIXLY_GET_QR_CODE_RECOGNITION_RESULT_TOOLTIP);
+ }
+};
+
+export const INIT_COLOR_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_ESP32_APDS9960_COLOR);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.COLOUR_RGB_RED,"0"],
+ [Blockly.Msg.COLOUR_RGB_ORANGE,"1"],
+ [Blockly.Msg.COLOUR_RGB_YELLOW,"2"],
+ [Blockly.Msg.COLOUR_RGB_GREEN,"3"],
+ [Blockly.Msg.COLOUR_RGB_CYAN,"4"],
+ [Blockly.Msg.COLOUR_RGB_BLUE,"5"],
+ [Blockly.Msg.COLOUR_RGB_PURPLE,"6"],
+ [Blockly.Msg.COLOUR_RGB_WHITE,"7"],
+ [Blockly.Msg.COLOUR_RGB_GREY,"8"],
+ [Blockly.Msg.MIXLY_CUSTOM_STUDY,"9"]
+ ]),'color')
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const START_COLOR_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_MSTIMER2_START + Blockly.Msg.HTML_COLOUR + Blockly.Msg.MIXLY_RECOGNITION);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_COLOR_DETECTION_RESULT = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_COLOR_DETECTION_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(Blockly.Msg.MIXLY_GET_COLOR_DETECTION_RESULT_TOOLTIP);
+ }
+};
+
+export const INIT_CAT_FACE_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_CAT_FACE +Blockly.Msg.MIXLY_RECOGNITION);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const START_CAT_FACE_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_MSTIMER2_START + Blockly.Msg.MIXLY_CAT_FACE + Blockly.Msg.MIXLY_RECOGNITION);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_CAT_FACE_DETECTION_RESULT = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_CAT_FACE_DETECTION_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const INIT_PEOPLE_FACE_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_FACE_CLASSIFIER);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const START_PEOPLE_FACE_DETECTION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_MSTIMER2_START + Blockly.Msg.MIXLY_FACE_CLASSIFIER + '/' + Blockly.Msg.MIXLY_AipFace);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_PEOPLE_FACE_DETECTION_RESULT = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_PEOPLE_FACE_DETECTION_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(Blockly.Msg.MIXLY_GET_PEOPLE_FACE_DETECTION_RESULT_TOOLTIP);
+ }
+};
+
+export const INIT_PEOPLE_FACE_RECOGNITION= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput("")
+ .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AipFace);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const PEOPLE_FACE_ENROLL = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.FACE_ENROLL);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+export const GET_PEOPLE_FACE_RECOGNITION_RESULT = {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET_PEOPLE_FACE_RECOGNITION_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(Blockly.Msg.MIXLY_GET_PEOPLE_FACE_RECOGNITION_RESULT_TOOLTIP);
+ }
+};
+
+export const DELETE_PEOPLE_FACE_ID= {
+ init: function () {
+ this.setColour(AI_LOCAL_GRAPH_HUE);
+ this.appendValueInput("ID")
+ .appendField(Blockly.Msg.MIXLY_DELETE_PEOPLE_FACE_ID);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
\ No newline at end of file
diff --git a/boards/default_src/micropython/blocks/display_onboard.js b/boards/default_src/micropython/blocks/display_onboard.js
index 8f52b8b6..a5ecb4d9 100644
--- a/boards/default_src/micropython/blocks/display_onboard.js
+++ b/boards/default_src/micropython/blocks/display_onboard.js
@@ -1079,7 +1079,25 @@ export const onboard_tft_show_image_xy = {
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
- this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+export const onboard_tft_show_image_xy_direct = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField(Blockly.Msg.OLED_BITMAP)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("direct")
+ .setCheck(String)
+ .appendField(Blockly.Msg.MIXLY_AipImageClassify_Image + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
}
};
diff --git a/boards/default_src/micropython/blocks/sensor_onboard.js b/boards/default_src/micropython/blocks/sensor_onboard.js
index 0414e982..ac84b7a6 100644
--- a/boards/default_src/micropython/blocks/sensor_onboard.js
+++ b/boards/default_src/micropython/blocks/sensor_onboard.js
@@ -1575,221 +1575,6 @@ export const educore_rfid_sensor_scan_data = {
}
};
-export const CI130X_IDENTIFY_AND_SAVE_SANT = {
- init: function () {
- this.setColour(SENSOR_ONBOARD_HUE);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)
- this.setPreviousStatement(true);
- this.setNextStatement(true);
- this.setInputsInline(true);
- }
-};
-
-export const CI130X_GET_WHETHER_IDENTIFY_SANT = {
- init: function () {
- this.setColour(SENSOR_ONBOARD_HUE);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)
- .appendField(new Blockly.FieldDropdown([
- [Blockly.Msg.MIXLY_HELLO_XIAOZHI, "1"],
- [Blockly.Msg.MIXLY_XIAOZHIXIAOZHI, "2"],
- [Blockly.Msg.MIXLY_THE_FIRST, "3"],
- [Blockly.Msg.MIXLY_THE_SECOND, "4"],
- [Blockly.Msg.MIXLY_THE_THIRD, "5"],
- [Blockly.Msg.MIXLY_THE_FOURTH, "6"],
- [Blockly.Msg.MIXLY_THE_FIFTH, "7"],
- [Blockly.Msg.MIXLY_THE_SIXTH, "8"],
- [Blockly.Msg.MIXLY_THE_SEVENTH, "9"],
- [Blockly.Msg.MIXLY_THE_EIGHTH, "10"],
- [Blockly.Msg.MIXLY_THE_NINTH, "11"],
- [Blockly.Msg.MIXLY_THE_TENTH, "12"],
- [Blockly.Msg.MIXLY_THE_ELEVENTH, "13"],
- [Blockly.Msg.MIXLY_THE_TWELFTH, "14"],
- [Blockly.Msg.MIXLY_THE_13TH, "15"],
- [Blockly.Msg.MIXLY_THE_14TH, "16"],
- [Blockly.Msg.MIXLY_THE_15TH, "17"],
- [Blockly.Msg.MIXLY_THE_16TH, "18"],
- [Blockly.Msg.MIXLY_THE_17TH, "19"],
- [Blockly.Msg.MIXLY_THE_18TH, "20"],
- [Blockly.Msg.MIXLY_THE_19TH, "21"],
- [Blockly.Msg.MIXLY_THE_20TH, "22"],
- [Blockly.Msg.MIXLY_Turn_on_the_lights, "23"],
- [Blockly.Msg.MIXLY_Turn_off_the_lights, "24"],
- [Blockly.Msg.MIXLY_Turn_up_the_brightness, "25"],
- [Blockly.Msg.MIXLY_Turn_down_the_brightness, "26"],
- [Blockly.Msg.MIXLY_Set_it_to_red, "27"],
- [Blockly.Msg.MIXLY_Set_it_to_orange, "28"],
- [Blockly.Msg.MIXLY_Set_it_to_yellow, "29"],
- [Blockly.Msg.MIXLY_Set_it_to_green, "30"],
- [Blockly.Msg.MIXLY_Set_it_to_cyan, "31"],
- [Blockly.Msg.MIXLY_Set_it_to_blue, "32"],
- [Blockly.Msg.MIXLY_Set_it_to_purple, "33"],
- [Blockly.Msg.MIXLY_Set_it_to_white, "34"],
- [Blockly.Msg.MIXLY_Turn_on_the_fan, "35"],
- [Blockly.Msg.MIXLY_Turn_off_the_fan, "36"],
- [Blockly.Msg.MIXLY_First_gear, "37"],
- [Blockly.Msg.MIXLY_Wind_speed_second, "38"],
- [Blockly.Msg.MIXLY_Third_gear, "39"],
- [Blockly.Msg.MIXLY_Previous, "40"],
- [Blockly.Msg.MIXLY_Next_page, "41"],
- [Blockly.Msg.MIXLY_Show_smiley_face, "42"],
- [Blockly.Msg.MIXLY_Show_crying_face, "43"],
- [Blockly.Msg.MIXLY_Show_love, "44"],
- [Blockly.Msg.MIXLY_Close_display, "45"],
- [Blockly.Msg.MIXLY_Start_execution, "46"],
- [Blockly.Msg.MIXLY_FORWARD, "47"],
- [Blockly.Msg.MIXLY_BACKWARD, "48"],
- [Blockly.Msg.MIXLY_TURNLEFT, "49"],
- [Blockly.Msg.MIXLY_TURNRIGHT, "50"],
- [Blockly.Msg.MIXLY_STOP, "51"],
- [Blockly.Msg.MIXLY_Accelerate, "52"],
- [Blockly.Msg.MIXLY_retard, "53"],
- [Blockly.Msg.ROTATION_FORWARD, "54"],
- [Blockly.Msg.ROTATION_BACKWARD, "55"],
- [Blockly.Msg.MIXLY_Query_temperature, "56"],
- [Blockly.Msg.MIXLY_Query_humidity, "57"],
- [Blockly.Msg.MIXLY_Query_brightness, "58"],
- [Blockly.Msg.MIXLY_Query_sound, "59"],
- [Blockly.Msg.MIXLY_Query_time, "60"],
- [Blockly.Msg.MIXLY_Query_distance, "61"],
- [Blockly.Msg.MIXLY_Query_pressure, "62"],
- [Blockly.Msg.MIXLY_Query_key, "63"],
- [Blockly.Msg.MIXLY_Query_touch, "64"],
- [Blockly.Msg.MIXLY_Query_color, "65"]
- ]), "cmd")
- .appendField(Blockly.Msg.MIXLY_WHETHER + Blockly.Msg.MIXLY_BE_IDENTIFIED);
- this.setOutput(true);
- this.setInputsInline(true);
- }
-};
-
-export const CI130X_GET_THE_RECOGNIZED_CMD_SANT = {
- init: function () {
- this.setColour(SENSOR_ONBOARD_HUE);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)
- .appendField(new Blockly.FieldDropdown([
- [Blockly.Msg.MIXLY_RECOGNIZED_STATE, "status1"],
- [Blockly.Msg.MIXLY_WHETHER_BROADCAST, "status2"],
- [Blockly.Msg.MIXLY_THE_RECOGNIZED_CMD, "result"]
- ]), "key")
- this.setOutput(true);
- this.setInputsInline(true);
- this.setTooltip(Blockly.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);
- }
-};
-
-export const CI130X_BROADCAST_SANT = {
- init: function () {
- this.setColour(SENSOR_ONBOARD_HUE);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_MP3_PLAY)
- .appendField(new Blockly.FieldDropdown([
- [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE, "None"],
- [Blockly.Msg.MIXLY_WIND_SPEED, "154"],
- [Blockly.Msg.MIXLY_HYETAL, "155"],
- [Blockly.Msg.MIXLY_TEMPERATURE, "156"],
- [Blockly.Msg.MIXLY_Humidity, "157"],
- [Blockly.Msg.MIXLY_Altitude, "158"],
- [Blockly.Msg.MIXLY_SOUND, "159"],
- [Blockly.Msg.MIXLY_BRIGHTNESS, "160"],
- [Blockly.Msg.ME_GO_HALL_SENSOR_DISTANCE, "161"],
- [Blockly.Msg.MIXLY_SERVO, "162"],
- [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "163"],
- [Blockly.Msg.MIXLY_BUTTON2, "164"],
- [Blockly.Msg.MIXLY_ESP32_TOUCH, "165"],
- [Blockly.Msg.MIXLY_PAY, "166"],
- [Blockly.Msg.MIXLY_CARSH_CHANGE, "167"],
- [Blockly.Msg.MIXLY_COUNTDOWN, "168"],
- [Blockly.Msg.MIXLY_TIMING, "169"],
- [Blockly.Msg.MIXLY_AT_THE_MOMENT, "170"],
- [Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE, "171"],
- [Blockly.Msg.MIXLY_FORWARD, "172"],
- [Blockly.Msg.MIXLY_BACKWARD, "173"],
- [Blockly.Msg.MIXLY_TURNLEFT, "174"],
- [Blockly.Msg.MIXLY_TURNRIGHT, "175"],
- [Blockly.Msg.MIXLY_STOP, "176"],
- [Blockly.Msg.MIXLY_Accelerate, "177"],
- [Blockly.Msg.MIXLY_retard, "178"],
- [Blockly.Msg.ROTATION_FORWARD, "179"],
- [Blockly.Msg.ROTATION_BACKWARD, "180"],
- [Blockly.Msg.TUPLE_JOIN, "181"],
- [Blockly.Msg.MIXLY_SHOW, "182"],
- [Blockly.Msg.MIXLY_LAMPLIGHT, "183"],
- [Blockly.Msg.MIXLY_ACCELERATION, "184"]
- ]), "star");
- this.appendValueInput('NUM')
- .appendField(Blockly.Msg.MIXLY_NUMBER);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_UNIT)
- .appendField(new Blockly.FieldDropdown([
- [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE, "None"],
- [Blockly.Msg.MIXLY_YEAR, "117"],
- [Blockly.Msg.MIXLY_MONTH, "118"],
- [Blockly.Msg.MIXLY_DAY, "119"],
- [Blockly.Msg.MIXLY_HOUR, "120"],
- [Blockly.Msg.MIXLY_MINUTE, "121"],
- [Blockly.Msg.MIXLY_SECOND, "122"],
- [Blockly.Msg.MIXLY_WEEK2, "123"],
- [Blockly.Msg.MIXLY_RMB_UNIT, "124"],
- [Blockly.Msg.blockpy_setheading_degree, "125"],
- [Blockly.Msg.MIXLY_GEAR, "126"],
- [Blockly.Msg.MIXLY_LAYER, "127"],
- [Blockly.Msg.MIXLY_GRAM, "128"],
- [Blockly.Msg.MIXLY_METER, "129"],
- [Blockly.Msg.MIXLY_CENTIMETER, "130"],
- [Blockly.Msg.MIXLY_MILLIMETER, "131"],
- [Blockly.Msg.MIXLY_LUMEN, "132"],
- [Blockly.Msg.MIXLY_DECIBEL, "133"],
- [Blockly.Msg.MIXLY_hectopascal, "134"],
- [Blockly.Msg.MIXLY_PERCENT, "135"],
- [Blockly.Msg.MIXLY_CELSIUS, "136"],
- [Blockly.Msg.MIXLY_METER_PER_SEC, "137"],
- [Blockly.Msg.MIXLY_MICROBIT_Turn_on_display, "138"],
- [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, "139"],
- [Blockly.Msg.MIXLY_SUCCESS, "140"],
- [Blockly.Msg.MIXLY_FAILED, "141"],
- [Blockly.Msg.MIXLY_WRONG, "142"],
- [Blockly.Msg.MIXLY_GOOD, "143"],
- [Blockly.Msg.MIXLY_blockpy_set_add, "144"],
- [Blockly.Msg.MIXLY_DECREASE, "145"],
- [Blockly.Msg.COLOUR_RGB_RED, "146"],
- [Blockly.Msg.COLOUR_RGB_ORANGE, "147"],
- [Blockly.Msg.COLOUR_YELLOW, "148"],
- [Blockly.Msg.COLOUR_RGB_GREEN, "149"],
- [Blockly.Msg.COLOUR_CYAN, "150"],
- [Blockly.Msg.COLOUR_RGB_BLUE, "151"],
- [Blockly.Msg.COLOUR_RGB_PURPLE, "152"],
- [Blockly.Msg.COLOUR_RGB_WHITE, "153"]
- ]), "end");
- this.setPreviousStatement(true);
- this.setNextStatement(true);
- this.setInputsInline(true);
- }
-}
-
-export const CI130X_SET_SYSTEM_CMD_SANT = {
- init: function () {
- this.setColour(SENSOR_ONBOARD_HUE);
- this.appendDummyInput("")
- .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SYSTEM + Blockly.Msg.MIXLY_CMD)
- .appendField(new Blockly.FieldDropdown([
- [Blockly.Msg.MILXY_ENTER_WAKE_UP, "1"],
- [Blockly.Msg.MIXLY_INCREASE_VOLUME, "202"],
- [Blockly.Msg.MIXLY_REDUCE_VOLUME, "203"],
- [Blockly.Msg.MIXLY_MAX_VOLUME, "204"],
- [Blockly.Msg.MIXLY_MINIMUM, "205"],
- [Blockly.Msg.MIXLY_OPEN_RESPONSE, "206"],
- [Blockly.Msg.MIXLY_CLOSE_RESPONSE, "207"],
- [Blockly.Msg.MIXLY_QUIT_WAKE_UP, "208"]
- ]), "cmd")
- this.setPreviousStatement(true);
- this.setNextStatement(true);
- this.setInputsInline(true);
- }
-};
-
export const sensor_get_the_coprocessor_version = {
init: function () {
this.setColour(SENSOR_ONBOARD_HUE);
diff --git a/boards/default_src/micropython/export.js b/boards/default_src/micropython/export.js
index 5a80f5d3..32d28e33 100644
--- a/boards/default_src/micropython/export.js
+++ b/boards/default_src/micropython/export.js
@@ -3,6 +3,7 @@ import * as MicroPythonActuatorOnBoardBlocks from './blocks/actuator_onboard';
import * as MicroPythonActuatorBlocks from './blocks/actuator';
import * as MicroPythonAISensorBlocks from './blocks/ai_sensor';
import * as MicroPythonAIBlocks from './blocks/ai';
+import * as MicroPythonAILocalBlocks from './blocks/ai_local';
import * as MicroPythonBlynkBlocks from './blocks/blynk';
import * as MicroPythonCCG1Blocks from './blocks/cc_g1';
import * as MicroPythonCEGOBlocks from './blocks/ce_go';
@@ -29,6 +30,7 @@ import * as MicroPythonActuatorExternGenerators from './generators/actuator_exte
import * as MicroPythonActuatorOnBoardGenerators from './generators/actuator_onboard';
import * as MicroPythonActuatorGenerators from './generators/actuator';
import * as MicroPythonAISensorGenerators from './generators/ai_sensor';
+import * as MicroPythonAILocalGenerators from './generators/ai_local';
import * as MicroPythonAIGenerators from './generators/ai';
import * as MicroPythonBlynkGenerators from './generators/blynk';
import * as MicroPythonCCG1Generators from './generators/cc_g1';
@@ -58,6 +60,7 @@ export {
MicroPythonActuatorBlocks,
MicroPythonAISensorBlocks,
MicroPythonAIBlocks,
+ MicroPythonAILocalBlocks,
MicroPythonBlynkBlocks,
MicroPythonCCG1Blocks,
MicroPythonCEGOBlocks,
@@ -84,6 +87,7 @@ export {
MicroPythonActuatorGenerators,
MicroPythonAISensorGenerators,
MicroPythonAIGenerators,
+ MicroPythonAILocalGenerators,
MicroPythonBlynkGenerators,
MicroPythonCCG1Generators,
MicroPythonCEGOGenerators,
diff --git a/boards/default_src/micropython/generators/ai_local.js b/boards/default_src/micropython/generators/ai_local.js
new file mode 100644
index 00000000..2a5c9a6c
--- /dev/null
+++ b/boards/default_src/micropython/generators/ai_local.js
@@ -0,0 +1,218 @@
+import { Boards } from 'mixly';
+
+//voice part
+export const CI130X_IDENTIFY_AND_SAVE_SANT = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ if(version == 'mixgo_sant'){
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var code = 'onboard_asr.cmd_id()\n';
+ }
+ else if(version == 'mixgo_mini'){
+ generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
+ var code = 'ext_asr.cmd_id()\n';
+ }
+ return code;
+}
+
+export const CI130X_GET_WHETHER_IDENTIFY_SANT = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ if(version == 'mixgo_sant'){
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'onboard_asr.result(' + cmd + ')';
+ }
+ else if(version == 'mixgo_mini'){
+ generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'ext_asr.result(' + cmd + ')';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const CI130X_GET_THE_RECOGNIZED_CMD_SANT = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ if(version == 'mixgo_sant'){
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var key = this.getFieldValue('key');
+ if (key == 'status1') {
+ var code = 'onboard_asr.status()[0]';
+ } else if (key == 'status2') {
+ var code = 'onboard_asr.status()[1]';
+ } else {
+ var code = 'onboard_asr.' + key + '()';
+ }
+ }else if(version == 'mixgo_mini'){
+ generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
+ var key = this.getFieldValue('key');
+ if (key == 'status1') {
+ var code = 'ext_asr.status()[0]';
+ } else if (key == 'status2') {
+ var code = 'ext_asr.status()[1]';
+ } else {
+ var code = 'ext_asr.' + key + '()';
+ }
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+
+
+
+//graph part
+export const CI130X_BROADCAST_SANT = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ if(version == 'mixgo_sant'){
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var star = this.getFieldValue('star');
+ var end = this.getFieldValue('end');
+ var code = 'onboard_asr.play(' + star + ', ' + num + ', ' + end + ')\n';
+ }else if(version == 'mixgo_mini'){
+ generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var star = this.getFieldValue('star');
+ var end = this.getFieldValue('end');
+ var code = 'ext_asr.play(' + star + ', ' + num + ', ' + end + ')\n';
+ }
+ return code;
+}
+
+export const CI130X_SET_SYSTEM_CMD_SANT = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ if(version == 'mixgo_sant'){
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'onboard_asr.sys_cmd(' + cmd + ')\n';
+ }else if(version == 'mixgo_mini'){
+ generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'ext_asr.sys_cmd(' + cmd + ')\n';
+ }
+ return code;
+}
+
+export const CREATE_CAMERA = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_camera'] = 'import camera';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'cam = camera.GC032A(camera.' + cmd + ')\n';
+ return code;
+}
+
+export const SHOOT_AND_SAVE_PICTURE = function (_, generator) {
+ var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC);
+ var code = 'cam.snapshot(' + direct + ')\n';
+ return code;
+}
+
+export const GET_PICTURE_DATA = function (_, generator) {
+ var code = 'cam.snapshot()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const SCREEN_SHOW_CAM_GRAPH_SHOOT = function (_, generator) {
+ var code = 'cam.display()\n'+'time.sleep(1)\n';
+ return code;
+}
+
+export const STOP_SCREEN_DISPLAY = function (_, generator) {
+ var code = 'cam.display_stop()\n';
+ return code;
+}
+
+export const INIT_QR_CODE_RECOGNITION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'qr_code = esp_ai.code_recognition()\n';
+ return code;
+}
+
+export const START_QR_CODE_RECOGNITION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'qr_code.start()\n';
+ return code;
+}
+
+export const GET_QR_CODE_RECOGNITION_DATA = function (_, generator) {
+ var code = 'qr_code.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const INIT_COLOR_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var color = this.getFieldValue('color');
+ var code = 'color = esp_ai.color_detection('+ color +')\n';
+ return code;
+}
+
+export const START_COLOR_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'color.start()\n';
+ return code;
+}
+
+export const GET_COLOR_DETECTION_RESULT = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'color.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const INIT_CAT_FACE_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'cat = esp_ai.cat_detection()\n';
+ return code;
+}
+
+export const START_CAT_FACE_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'cat.start()\n';
+ return code;
+}
+
+export const GET_CAT_FACE_DETECTION_RESULT = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'cat.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const INIT_PEOPLE_FACE_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face = esp_ai.face_detection()\n';
+ return code;
+}
+
+export const START_PEOPLE_FACE_DETECTION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face.start()\n';
+ return code;
+}
+
+export const GET_PEOPLE_FACE_DETECTION_RESULT = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const INIT_PEOPLE_FACE_RECOGNITION = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face = esp_ai.face_recognition()\n';
+ return code;
+}
+
+export const PEOPLE_FACE_ENROLL = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face.enroll()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const GET_PEOPLE_FACE_RECOGNITION_RESULT = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var code = 'face.recognize()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const DELETE_PEOPLE_FACE_ID = function (_, generator) {
+ generator.definitions_['import_esp_ai'] = 'import esp_ai';
+ var id = generator.valueToCode(this, 'ID', generator.ORDER_ATOMIC);
+ var code = 'face.delete('+ id +')\n';
+ return code;
+}
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/display_onboard.js b/boards/default_src/micropython/generators/display_onboard.js
index 560fcb9e..bb1d031a 100644
--- a/boards/default_src/micropython/generators/display_onboard.js
+++ b/boards/default_src/micropython/generators/display_onboard.js
@@ -840,6 +840,16 @@ export const onboard_tft_show_image_xy = function (_, generator) {
return code;
}
+export const onboard_tft_show_image_xy_direct = function (_, generator) {
+ var version = Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var direct = generator.valueToCode(this, 'direct', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_tft.pictrue(" + x + ',' + y + ',' + direct + ")\n";
+ return code;
+}
+
export const onboard_tft_show_image_or_string_delay = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
diff --git a/boards/default_src/micropython/generators/sensor_onboard.js b/boards/default_src/micropython/generators/sensor_onboard.js
index caf0965b..595cd0c8 100644
--- a/boards/default_src/micropython/generators/sensor_onboard.js
+++ b/boards/default_src/micropython/generators/sensor_onboard.js
@@ -932,92 +932,6 @@ export const educore_rfid_sensor_scan_data = function (_, generator) {
return [code, generator.ORDER_ATOMIC];
}
-export const CI130X_IDENTIFY_AND_SAVE_SANT = function (_, generator) {
- var version = Boards.getSelectedBoardKey().split(':')[2];
- if(version == 'mini_sant'){
- generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
- var code = 'onboard_asr.cmd_id()\n';
- }
- else if(version == 'mixgo_mini'){
- generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
- var code = 'ext_asr.cmd_id()\n';
- }
- return code;
-}
-
-export const CI130X_GET_WHETHER_IDENTIFY_SANT = function (_, generator) {
- var version = Boards.getSelectedBoardKey().split(':')[2];
- if(version == 'mini_sant'){
- generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
- var cmd = this.getFieldValue('cmd');
- var code = 'onboard_asr.result(' + cmd + ')';
- }
- else if(version == 'mixgo_mini'){
- generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
- var cmd = this.getFieldValue('cmd');
- var code = 'ext_asr.result(' + cmd + ')';
- }
- return [code, generator.ORDER_ATOMIC];
-}
-
-export const CI130X_GET_THE_RECOGNIZED_CMD_SANT = function (_, generator) {
- var version = Boards.getSelectedBoardKey().split(':')[2];
- if(version == 'mini_sant'){
- generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
- var key = this.getFieldValue('key');
- if (key == 'status1') {
- var code = 'onboard_asr.status()[0]';
- } else if (key == 'status2') {
- var code = 'onboard_asr.status()[1]';
- } else {
- var code = 'onboard_asr.' + key + '()';
- }
- }else if(version == 'mixgo_mini'){
- generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
- var key = this.getFieldValue('key');
- if (key == 'status1') {
- var code = 'ext_asr.status()[0]';
- } else if (key == 'status2') {
- var code = 'ext_asr.status()[1]';
- } else {
- var code = 'ext_asr.' + key + '()';
- }
- }
- return [code, generator.ORDER_ATOMIC];
-}
-
-export const CI130X_BROADCAST_SANT = function (_, generator) {
- var version = Boards.getSelectedBoardKey().split(':')[2];
- if(version == 'mini_sant'){
- generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
- var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
- var star = this.getFieldValue('star');
- var end = this.getFieldValue('end');
- var code = 'onboard_asr.play(' + star + ', ' + num + ', ' + end + ')\n';
- }else if(version == 'mixgo_mini'){
- generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
- var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
- var star = this.getFieldValue('star');
- var end = this.getFieldValue('end');
- var code = 'ext_asr.play(' + star + ', ' + num + ', ' + end + ')\n';
- }
- return code;
-}
-
-export const CI130X_SET_SYSTEM_CMD_SANT = function (_, generator) {
- var version = Boards.getSelectedBoardKey().split(':')[2];
- if(version == 'mini_sant'){
- generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
- var cmd = this.getFieldValue('cmd');
- var code = 'onboard_asr.sys_cmd(' + cmd + ')\n';
- }else if(version == 'mixgo_mini'){
- generator.definitions_['import_mini_gx_ext_asr'] = 'from mini_gx import ext_asr';
- var cmd = this.getFieldValue('cmd');
- var code = 'ext_asr.sys_cmd(' + cmd + ')\n';
- }
- return code;
-}
-
export const sensor_get_the_coprocessor_version = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
diff --git a/boards/default_src/micropython_esp32c2/index.js b/boards/default_src/micropython_esp32c2/index.js
index 06d80529..a306c323 100644
--- a/boards/default_src/micropython_esp32c2/index.js
+++ b/boards/default_src/micropython_esp32c2/index.js
@@ -38,6 +38,7 @@ import {
MicroPythonActuatorOnBoardBlocks,
MicroPythonAISensorBlocks,
MicroPythonAIBlocks,
+ MicroPythonAILocalBlocks,
MicroPythonBlynkBlocks,
MicroPythonCCG1Blocks,
MicroPythonCEGOBlocks,
@@ -57,6 +58,7 @@ import {
MicroPythonActuatorOnBoardGenerators,
MicroPythonAISensorGenerators,
MicroPythonAIGenerators,
+ MicroPythonAILocalGenerators,
MicroPythonBlynkGenerators,
MicroPythonCCG1Generators,
MicroPythonCEGOGenerators,
@@ -120,6 +122,7 @@ Object.assign(
MicroPythonIotBlocks,
MicroPythonWeatherBlocks,
MicroPythonAISensorBlocks,
+ MicroPythonAILocalBlocks,
MicroPythonSensorOnBoardBlocks,
MicroPythonSensorExternBlocks,
MicroPythonNetworkBlocks,
@@ -160,6 +163,7 @@ Object.assign(
MicroPythonIotGenerators,
MicroPythonWeatherGenerators,
MicroPythonAISensorGenerators,
+ MicroPythonAILocalGenerators,
MicroPythonSensorOnBoardGenerators,
MicroPythonSensorExternGenerators,
MicroPythonNetworkGenerators,
diff --git a/boards/default_src/micropython_esp32s3/css/color_esp32s2_mixgoce.css b/boards/default_src/micropython_esp32s3/css/color_esp32s2_mixgoce.css
index f85ff3c5..2acbc07f 100644
--- a/boards/default_src/micropython_esp32s3/css/color_esp32s2_mixgoce.css
+++ b/boards/default_src/micropython_esp32s3/css/color_esp32s2_mixgoce.css
@@ -446,4 +446,24 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
#catBLEKM.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
background-size: 100% auto;
+}
+
+#catAIgraphsensor.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
+ background: url('../../../../common/media/mark/image.png') no-repeat;
+ background-size: 100% auto;
+}
+
+#catAIgraphsensor.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
+ background: url('../../../../common/media/mark/image2.png') no-repeat;
+ background-size: 100% auto;
+}
+
+#catAIvoicesensor.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
+ background: url('../../../../common/media/mark/AIvoice.png') no-repeat;
+ background-size: 100% auto;
+}
+
+#catAIvoicesensor.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
+ background: url('../../../../common/media/mark/AIvoice2.png') no-repeat;
+ background-size: 100% auto;
}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32s3/index.js b/boards/default_src/micropython_esp32s3/index.js
index 2535b6ee..6e0f4125 100644
--- a/boards/default_src/micropython_esp32s3/index.js
+++ b/boards/default_src/micropython_esp32s3/index.js
@@ -38,6 +38,7 @@ import {
MicroPythonActuatorOnBoardBlocks,
MicroPythonAISensorBlocks,
MicroPythonAIBlocks,
+ MicroPythonAILocalBlocks,
MicroPythonBlynkBlocks,
MicroPythonCommunicateBlocks,
MicroPythonDisplayExternBlocks,
@@ -57,6 +58,7 @@ import {
MicroPythonActuatorOnBoardGenerators,
MicroPythonAISensorGenerators,
MicroPythonAIGenerators,
+ MicroPythonAILocalGenerators,
MicroPythonBlynkGenerators,
MicroPythonCommunicateGenerators,
MicroPythonDisplayExternGenerators,
@@ -117,6 +119,7 @@ Object.assign(
MicroPythonIotBlocks,
MicroPythonWeatherBlocks,
MicroPythonAISensorBlocks,
+ MicroPythonAILocalBlocks,
MicroPythonSensorOnBoardBlocks,
MicroPythonSensorExternBlocks,
MicroPythonPeG1Blocks,
@@ -156,6 +159,7 @@ Object.assign(
MicroPythonIotGenerators,
MicroPythonWeatherGenerators,
MicroPythonAISensorGenerators,
+ MicroPythonAILocalGenerators,
MicroPythonSensorOnBoardGenerators,
MicroPythonSensorExternGenerators,
MicroPythonPeG1Generators,
diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml
index a8628e4c..8738081e 100644
--- a/boards/default_src/micropython_esp32s3/template.xml
+++ b/boards/default_src/micropython_esp32s3/template.xml
@@ -1434,13 +1434,13 @@
-
-
+
+
-
+
@@ -1479,15 +1479,6 @@
-
-
-
-
-
-
-
-
-
@@ -1873,6 +1864,23 @@
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12.jpg
+
+
+
@@ -2289,6 +2297,54 @@
+
+
+
+
+
+
+ 12.jpg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/common/media/mark/AIvoice.png b/common/media/mark/AIvoice.png
new file mode 100644
index 00000000..e93fbdf6
Binary files /dev/null and b/common/media/mark/AIvoice.png differ
diff --git a/common/media/mark/AIvoice2.png b/common/media/mark/AIvoice2.png
new file mode 100644
index 00000000..9f923c34
Binary files /dev/null and b/common/media/mark/AIvoice2.png differ
diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js
index d83b36c0..064fc412 100644
--- a/common/msg/blockly/zh-hans.js
+++ b/common/msg/blockly/zh-hans.js
@@ -39,6 +39,8 @@ ZhHans.MSG = {
catAIOT:"智能物联",
catAIsensor:"MixGoAI智能传感",
catAIsensor2:"MixGoAI图像识别",
+ catAIgraphsensor:"图像处理",
+ catAIvoicesensor:"语音处理",
catSensor: "传感器",
catActuator: "执行器",
catExternSensor: "外接传感",
@@ -65,6 +67,7 @@ ZhHans.MSG = {
catTurtle: "海龟画图",
catTuple: "元组",
catIot: "物联网",
+ catAIonboard:"板载智能",
catSet: "集合",
catData: "数据分析",
catAlgorithm: "算法",
@@ -4086,4 +4089,25 @@ ZhHans.MIXLY_SET_DEGREE = '将角度';
ZhHans.MIXLY_TRANS_TO_RADIAN = '转换为弧度';
ZhHans.MIXLY_REF_TO_PRESSURE = '参考气压';
ZhHans.MIXLY_CAL_TO_ALTITUDE = '计算获取海拔';
+ZhHans.MIXLY_SHOOTING_SIZE = '拍摄尺寸';
+ZhHans.MIXLY_SHOOT_AND_SAVE_PICTURE = '拍摄照片并保存';
+ZhHans.MIXLY_GET_PICTURE_DATA = '获取图像数据';
+ZhHans.MIXlY_SCREEN_SHOW_CAM_SHOOT = '屏幕显示摄像头采集图像';
+ZhHans.MIXlY_STOP_SCREEN_DISPLAY = '关闭摄像头采集图像LCD实时显示';
+ZhHans.MIXLY_RECOGNITION = '检测';
+ZhHans.MIXLY_GET_QR_CODE_RECOGNITION_RESULT = '获取二维码检测结果';
+ZhHans.MIXLY_GET_QR_CODE_RECOGNITION_RESULT_TOOLTIP = '无检测结果返回None,有结果左上角出现绿色小方块,并返回二维码信息。'
+ZhHans.COLOUR_RGB_GREY = "灰色";
+ZhHans.MIXLY_CUSTOM_STUDY = "自定义学习";
+ZhHans.MIXLY_GET_COLOR_DETECTION_RESULT = '获取颜色检测结果';
+ZhHans.MIXLY_GET_COLOR_DETECTION_RESULT_TOOLTIP ='获取颜色采集结果,返回矩形区域数量和对应的左上角和右下角坐标(4个值)。';
+ZhHans.MIXLY_CAT_FACE = '猫脸';
+ZhHans.MIXLY_GET_CAT_FACE_DETECTION_RESULT = '获取猫脸检测结果';
+ZhHans.MIXLY_GET_CAT_FACE_DETECTION_RESULT_TOOLTIP = '获取猫脸检测结果,返回矩形区域数量和对应的左上角和右下角坐标(4个值)。';
+ZhHans.MIXLY_GET_PEOPLE_FACE_DETECTION_RESULT = '获取人脸检测结果';
+ZhHans.MIXLY_GET_PEOPLE_FACE_DETECTION_RESULT_TOOLTIP = '获取人脸检测结果,返回矩形区域数量、对应的矩形框左边以及五点关键特征值。说明:v[0]:人脸数量;v[1-4]:矩形左上角和右下角坐标;v[5-14]:左眼、右眼、鼻子、左嘴角、右嘴角坐标。';
+ZhHans.MIXLY_GET_PEOPLE_FACE_RECOGNITION_RESULT = '获取人脸识别结果';
+ZhHans.MIXLY_GET_PEOPLE_FACE_RECOGNITION_RESULT_TOOLTIP = '获取人脸识别结果,获取人识别结果,返回人脸ID(ID从1开始)、矩形区域和和对应的5点坐标。说明:v[0]:人脸数量;v[1-4]:矩形左上角和右下角坐标;v[5-14]:左眼、右眼、鼻子、左嘴角、右嘴角坐标。';
+ZhHans.FACE_ENROLL = '录入人脸';
+ZhHans.MIXLY_DELETE_PEOPLE_FACE_ID = '删除人脸ID信息';
})();
\ No newline at end of file