diff --git a/boards/default_src/micropython/blocks/actuator_onboard.js b/boards/default_src/micropython/blocks/actuator_onboard.js
index 64f8f690..037f817e 100644
--- a/boards/default_src/micropython/blocks/actuator_onboard.js
+++ b/boards/default_src/micropython/blocks/actuator_onboard.js
@@ -1790,4 +1790,20 @@ export const educore_ble_keyboard_input = {
this.setNextStatement(true);
this.setInputsInline(true);
}
+};
+
+export const get_keyboard_light = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_KEYBOARD_LIGHT)
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldDropdown([
+ [Blockly.Msg.MIXLY_NumLock, "0"],
+ [Blockly.Msg.MIXLY_CapsLock, "1"],
+ [Blockly.Msg.MIXLY_ScorllLock, "2"]
+ ]),'key');
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
};
\ No newline at end of file
diff --git a/boards/default_src/micropython/blocks/iot.js b/boards/default_src/micropython/blocks/iot.js
index 4421323a..40b0336b 100644
--- a/boards/default_src/micropython/blocks/iot.js
+++ b/boards/default_src/micropython/blocks/iot.js
@@ -621,4 +621,119 @@ export const iot_wificonnect = iot_wifi_connect;
export const iot_onenetconnect = iot_onenet_connect;
export const iot_onenetdisconnect = iot_onenet_disconnect;
export const iot_checkonenet = iot_onenet_check;
-export const iot_publish = iot_onenet_publish;
\ No newline at end of file
+export const iot_publish = iot_onenet_publish;
+
+export const IOT_CONNECT_OLLAMA = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_CONNECT_OLLAMA);
+ this.appendValueInput('SERVER')
+ .appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
+ .setAlign(Blockly.inputs.Align.RIGHT);
+ this.appendValueInput('NAME')
+ .appendField(Blockly.Msg.MODEL_NAME)
+ .setAlign(Blockly.inputs.Align.RIGHT);
+ this.appendValueInput('NUMBER')
+ .appendField(Blockly.Msg.MIXLY_SET_MAXIMUM_HISTORICAL_SESSIONS_NUM);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+export const use_ollama_llm_to_chat = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_LLM_CHAT);
+ this.appendValueInput('TOPIC')
+ .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND);
+ this.appendValueInput('METHOD')
+ .appendField(Blockly.Msg.MIXLY_LLM_CONTENT_CALLBACK);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+export const use_ollama_llm_to_chat_return = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_LLM_CHAT);
+ this.appendValueInput('TOPIC')
+ .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+// export const ollama_set_timeout = {
+// init: function () {
+// this.setColour(IOT_HUE);
+// this.appendValueInput("VAR")
+// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_TIMEOUT);
+// this.setInputsInline(true);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// }
+// }
+
+// export const ollama_set_max_retries = {
+// init: function () {
+// this.setColour(IOT_HUE);
+// this.appendValueInput("VAR")
+// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_MAX_RETRIES);
+// this.setInputsInline(true);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// }
+// }
+
+// export const ollama_set_custom_url = {
+// init: function () {
+// this.setColour(IOT_HUE);
+// this.appendValueInput("TEXT")
+// .appendField('Ollama ' + Blockly.Msg.MIXLY_OLLAMA_SET_CUSTOM_URL);
+// this.setInputsInline(true);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// }
+// }
+
+// export const ollama_select_model = {
+// init: function () {
+// this.setColour(IOT_HUE);
+// this.appendValueInput("TEXT")
+// .appendField('Ollama ' + Blockly.Msg.MIXLY_SELECT_MODEL);
+// this.setInputsInline(true);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// }
+// }
+
+// export const ollama_clear_user_history = {
+// init: function () {
+// this.setColour(IOT_HUE);
+// this.appendDummyInput()
+// .appendField('Ollama ' + Blockly.Msg.MIXLY_CLEAR_USER_HISTORY);
+// this.setInputsInline(true);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// }
+// }
+
+export const ollama_empty_history = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField('Ollama ' + Blockly.Msg.MIXLY_EMPTY_HISTORY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+}
+
diff --git a/boards/default_src/micropython/blocks/sensor_extern.js b/boards/default_src/micropython/blocks/sensor_extern.js
index 44ba7023..00c18efd 100644
--- a/boards/default_src/micropython/blocks/sensor_extern.js
+++ b/boards/default_src/micropython/blocks/sensor_extern.js
@@ -2227,7 +2227,7 @@ export const weigh_sensor_get_weight = {
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_WEIGH_SENSOR)
this.appendDummyInput()
- .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_DATA)
+ .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_DATA + '(g)')
this.setOutput(true);
this.setInputsInline(true);
}
diff --git a/boards/default_src/micropython/blocks/sensor_onboard.js b/boards/default_src/micropython/blocks/sensor_onboard.js
index 625f25db..ed6fbbec 100644
--- a/boards/default_src/micropython/blocks/sensor_onboard.js
+++ b/boards/default_src/micropython/blocks/sensor_onboard.js
@@ -1038,6 +1038,7 @@ export const sensor_mixgo_cc_mmc5603_get_magnetic = {
});
}
};
+
export const sensor_mixgo_cc_mmc5603_get_angle = {
init: function () {
this.setColour(SENSOR_ONBOARD_HUE);
@@ -1045,7 +1046,6 @@ export const sensor_mixgo_cc_mmc5603_get_angle = {
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)
this.setOutput(true, Number);
this.setInputsInline(true);
-
}
};
@@ -1737,4 +1737,14 @@ export const CI130X_SET_SYSTEM_CMD_SANT = {
this.setNextStatement(true);
this.setInputsInline(true);
}
+};
+
+export const sensor_get_the_coprocessor_version = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_THE_COPROCESSOR_VERSION)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
};
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/actuator_onboard.js b/boards/default_src/micropython/generators/actuator_onboard.js
index e59fb0fc..6d59edb4 100644
--- a/boards/default_src/micropython/generators/actuator_onboard.js
+++ b/boards/default_src/micropython/generators/actuator_onboard.js
@@ -765,4 +765,13 @@ export const educore_ble_keyboard_input = function (_, generator) {
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var code = sub+".keyboard_send("+ ge + ")\n";
return code;
+}
+
+export const get_keyboard_light = function (_,generator){
+ var version = Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var key = this.getFieldValue('key');
+ var code = "onboard_bot.hid_keyboard_state()["+ key +']';
+ return [code,generator.ORDER_ATOMIC]
+
}
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/iot.js b/boards/default_src/micropython/generators/iot.js
index 19cbfb83..20fa7c99 100644
--- a/boards/default_src/micropython/generators/iot.js
+++ b/boards/default_src/micropython/generators/iot.js
@@ -233,4 +233,69 @@ export const iot_mqtt_data = function (_, generator) {
var key = this.getFieldValue('key');
var code = 'mqtt_client.' + key;
return [code, generator.ORDER_ATOMIC];
+}
+
+export const IOT_CONNECT_OLLAMA = function(_,generator) {
+ generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+ var ser = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'NAME', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUMBER', generator.ORDER_ATOMIC);
+ var code = 'llm = Ollama(' + ser + ', ' + name + ','+ num +')\n';
+ return code;
+
+}
+
+export const use_ollama_llm_to_chat = function (_, generator) {
+ generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ var code = 'llm.chat(' + topic + ',' + method + ')\n';
+ return code;
+}
+
+export const use_ollama_llm_to_chat_return = function (_, generator) {
+ generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var code = 'llm.chat(' + topic + ')';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+// export const ollama_set_timeout = function (_,generator) {
+// generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+// var t = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+// var code = 'llm.set_timeout(' + t + ')\n';
+// return code;
+// }
+
+// export const ollama_set_max_retries = function (_,generator) {
+// generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+// var t = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+// var code = 'llm.set_max_retries(' + t + ')\n';
+// return code;
+// }
+
+// export const ollama_set_custom_url = function (_,generator) {
+// generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+// var t = generator.valueToCode(this, 'TEXT', generator.ORDER_ATOMIC);
+// var code = 'llm.set_custom_url(' + t + ')\n';
+// return code;
+// }
+
+// export const ollama_select_model = function (_,generator) {
+// generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+// var t = generator.valueToCode(this, 'TEXT', generator.ORDER_ATOMIC);
+// var code = 'llm.select_model(' + t + ')\n';
+// return code;
+// }
+
+// export const ollama_clear_user_history = function (_,generator) {
+// generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+// var code = 'llm.clear_user_history()\n';
+// return code;
+// }
+
+export const ollama_empty_history = function (_,generator) {
+ generator.definitions_['import_Ollama'] = "from ollama import Ollama";
+ var code = 'llm.empty_history()\n';
+ return code;
}
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/sensor_onboard.js b/boards/default_src/micropython/generators/sensor_onboard.js
index f7c9094f..6258ac3d 100644
--- a/boards/default_src/micropython/generators/sensor_onboard.js
+++ b/boards/default_src/micropython/generators/sensor_onboard.js
@@ -924,4 +924,11 @@ export const CI130X_SET_SYSTEM_CMD_SANT = function (_, generator) {
var cmd = this.getFieldValue('cmd');
var code = 'onboard_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';
+ var code = 'onboard_bot.version()';
+ return [code, generator.ORDER_ATOMIC];
}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml
index 8a21053b..9fa6330e 100644
--- a/boards/default_src/micropython_esp32c2/template.xml
+++ b/boards/default_src/micropython_esp32c2/template.xml
@@ -1431,6 +1431,7 @@
+
@@ -1699,6 +1700,7 @@
+
@@ -2335,6 +2337,92 @@
+
+
+
+ 192.168.1.1
+
+
+
+
+ qwen2.5-coder:0.5b
+
+
+
+
+ 5
+
+
+
+
+
+
+ content
+
+
+
+
+ content_callback
+
+
+
+
+
+
+
+ content_callback
+
+
+
+
+ content
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请介绍一下米思齐?
+
+
+
+
+
+
diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js
index db6cee40..ef2fd2d9 100644
--- a/common/msg/blockly/zh-hans.js
+++ b/common/msg/blockly/zh-hans.js
@@ -4063,4 +4063,20 @@ ZhHans.MIXLY_RFID_SCAN_ERROR = '卡错误';
ZhHans.MIXLY_WEIGH_SENSOR = '称重传感器';
ZhHans.MIXLY_Calibration_ratio = '校准比例';
ZhHans.MIXLY_KEYBOARD_AND_MOUSE = '键鼠';
+ZhHans.MIXLY_THE_COPROCESSOR_VERSION = '协处理器版本';
+ZhHans.MIXLY_KEYBOARD_LIGHT = '键盘指示灯';
+ZhHans.MIXLY_NumLock = '数字锁定';
+ZhHans.MIXLY_CapsLock = '大写锁定';
+ZhHans.MIXLY_ScorllLock = '滚动锁定';
+ZhHans.MIXLY_CONNECT_OLLAMA = '连接ollama平台 使用大语言模型';
+ZhHans.MIXLY_SET_MAXIMUM_HISTORICAL_SESSIONS_NUM = '设置历史对话记录最大保留数量';
+ZhHans.MIXLY_LLM_CHAT = '与大语言模型进行对话';
+ZhHans.MIXLY_LLM_CONTENT_CALLBACK = '结果输出回调';
+// ZhHans.MIXLY_OLLAMA_SET_TIMEOUT = '设置超时时间';
+// ZhHans.MIXLY_OLLAMA_SET_MAX_RETRIES = '设置最大重试次数';
+// ZhHans.MIXLY_OLLAMA_SET_CUSTOM_URL = '设置自定义链接';
+// ZhHans.MIXLY_SELECT_MODEL = '选择模型';
+// ZhHans.MIXLY_CLEAR_USER_HISTORY = '清除用户的历史记录';
+ZhHans.MIXLY_EMPTY_HISTORY = '清空历史记录'
+
})();
\ No newline at end of file