From 618bf4370833547f2a495cec6bfd6a582f66e6e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com>
Date: Wed, 26 Mar 2025 21:12:57 +0800
Subject: [PATCH] =?UTF-8?q?feat(boards):=20=E8=B0=83=E6=95=B4micropython?=
=?UTF-8?q?=E4=B8=8B=20`=E5=88=9B=E5=BB=BA=E5=9B=BE=E5=83=8F`=20=E5=9B=BE?=
=?UTF-8?q?=E5=BD=A2=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../micropython/blocks/display_onboard.js | 72 +++++++++++++++
.../micropython/generators/display_onboard.js | 88 +++++++++++++++++++
.../micropython_educore/template.xml | 5 +-
.../micropython_esp32/template.xml | 7 +-
.../micropython_esp32c2/template.xml | 5 +-
.../micropython_esp32c3/template.xml | 7 +-
.../micropython_esp32s2/template.xml | 5 +-
.../micropython_esp32s3/template.xml | 3 +-
.../micropython_robot/template.xml | 2 +-
9 files changed, 174 insertions(+), 20 deletions(-)
diff --git a/boards/default_src/micropython/blocks/display_onboard.js b/boards/default_src/micropython/blocks/display_onboard.js
index b6f0ec79..f5c5316b 100644
--- a/boards/default_src/micropython/blocks/display_onboard.js
+++ b/boards/default_src/micropython/blocks/display_onboard.js
@@ -158,6 +158,24 @@ export const display_image_create = {
}
};
+export const display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 12 }, () => new Array(32).fill(0))
+};
+
export const display_image_builtins = {
init: function () {
this.jsonInit({
@@ -373,6 +391,24 @@ export const mixgome_display_image_create = {
}
};
+export const mixgome_display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(mixgome_display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 5 }, () => new Array(8).fill(0))
+};
+
export const mixgomini_display_image_create = {
init: function () {
this.appendDummyInput('')
@@ -392,6 +428,24 @@ export const mixgomini_display_image_create = {
}
};
+export const mixgomini_display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(mixgomini_display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 8 }, () => new Array(12).fill(0))
+};
+
export const mixgo_display_image_create_new = {
init: function () {
this.appendDummyInput('')
@@ -411,6 +465,24 @@ export const mixgo_display_image_create_new = {
}
};
+export const mixgo_display_bitmap_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ this.appendDummyInput('')
+ .setAlign(Blockly.inputs.Align.CENTRE)
+ .appendField(new Blockly.FieldBitmap(mixgo_display_bitmap_create.BITMAP, null, {
+ filledColor: '#000',
+ emptyColor: '#5ba5a5',
+ bgColor: '#e5e7f1'
+ }), 'BITMAP');
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);
+ },
+ BITMAP: Array.from({ length: 8 }, () => new Array(16).fill(0))
+};
+
export const mixgome_display_font = {
init: function () {
this.setColour(DISPLAY_ONBOARD_HUE);
diff --git a/boards/default_src/micropython/generators/display_onboard.js b/boards/default_src/micropython/generators/display_onboard.js
index 529b04cf..21d0dcf2 100644
--- a/boards/default_src/micropython/generators/display_onboard.js
+++ b/boards/default_src/micropython/generators/display_onboard.js
@@ -222,6 +222,29 @@ export const display_image_create = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 12; i++) {
+ for (let j = 0; j < 4; j++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 8; k++) {
+ if (!BITMAP[i][j * 8 + k]) {
+ continue;
+ }
+ temp |= BITMAP[i][j * 8 + k] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('0x' + str);
+ }
+ }
+ return [`[${data.join(',')}]`, generator.ORDER_ATOMIC];
+}
+
export const display_clear = function (block, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
if (version == 'mpython') {
@@ -382,6 +405,27 @@ export const mixgome_display_image_create = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const mixgome_display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 5; i++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 8; k++) {
+ if (!BITMAP[i][k]) {
+ continue;
+ }
+ temp |= BITMAP[i][k] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ }
+ return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC];
+}
+
export const mixgomini_display_image_create = function (block, generator) {
var blinkColor = '#ff0000';
var code = '';
@@ -400,6 +444,27 @@ export const mixgomini_display_image_create = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const mixgomini_display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 12; i++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 8; k++) {
+ if (!BITMAP[k][i]) {
+ continue;
+ }
+ temp |= BITMAP[k][i] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ }
+ return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC];
+}
+
export const mixgome_display_font = function (a, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
@@ -444,6 +509,29 @@ export const mixgo_display_image_create_new = function (block, generator) {
return [code, generator.ORDER_ATOMIC];
}
+export const mixgo_display_bitmap_create = function (block, generator) {
+ const BITMAP = block.getFieldValue('BITMAP');
+ const data = [];
+ for (let i = 0; i < 8; i++) {
+ for (let j = 0; j < 2; j++) {
+ let temp = 0;
+ let str = '';
+ for (let k = 0; k < 8; k++) {
+ if (!BITMAP[i][j * 8 + k]) {
+ continue;
+ }
+ temp |= BITMAP[i][j * 8 + k] << k;
+ }
+ str = temp.toString(16);
+ if (str.length == 1) {
+ str = '0' + str;
+ }
+ data.push('\\x' + str);
+ }
+ }
+ return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC];
+}
+
//mpython
export const mpython_pbm_image = function (_, generator) {
const PIN_VALUE = this.getFieldValue('path');
diff --git a/boards/default_src/micropython_educore/template.xml b/boards/default_src/micropython_educore/template.xml
index bc2bf6ce..d805df32 100644
--- a/boards/default_src/micropython_educore/template.xml
+++ b/boards/default_src/micropython_educore/template.xml
@@ -2001,7 +2001,7 @@
-
+
@@ -4986,8 +4986,7 @@
-
-
+
diff --git a/boards/default_src/micropython_esp32/template.xml b/boards/default_src/micropython_esp32/template.xml
index 560964bb..7f21cd6b 100644
--- a/boards/default_src/micropython_esp32/template.xml
+++ b/boards/default_src/micropython_esp32/template.xml
@@ -1777,8 +1777,8 @@
-
-
+
+
@@ -4813,8 +4813,7 @@
-
-
+
diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml
index 8aaba470..de8ffb12 100644
--- a/boards/default_src/micropython_esp32c2/template.xml
+++ b/boards/default_src/micropython_esp32c2/template.xml
@@ -1825,7 +1825,7 @@
-
+
@@ -4671,8 +4671,7 @@
-
-
+
diff --git a/boards/default_src/micropython_esp32c3/template.xml b/boards/default_src/micropython_esp32c3/template.xml
index 6458df6f..ff702138 100644
--- a/boards/default_src/micropython_esp32c3/template.xml
+++ b/boards/default_src/micropython_esp32c3/template.xml
@@ -1769,8 +1769,8 @@
-
-
+
+
@@ -4621,8 +4621,7 @@
-
-
+
diff --git a/boards/default_src/micropython_esp32s2/template.xml b/boards/default_src/micropython_esp32s2/template.xml
index be548ef4..4d93b928 100644
--- a/boards/default_src/micropython_esp32s2/template.xml
+++ b/boards/default_src/micropython_esp32s2/template.xml
@@ -1714,7 +1714,7 @@
-
+
@@ -4347,8 +4347,7 @@
-
-
+
diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml
index cf8c3e3f..e7acb3bf 100644
--- a/boards/default_src/micropython_esp32s3/template.xml
+++ b/boards/default_src/micropython_esp32s3/template.xml
@@ -5036,8 +5036,7 @@
-
-
+
diff --git a/boards/default_src/micropython_robot/template.xml b/boards/default_src/micropython_robot/template.xml
index ddf629b0..cdc688bf 100644
--- a/boards/default_src/micropython_robot/template.xml
+++ b/boards/default_src/micropython_robot/template.xml
@@ -3456,7 +3456,7 @@
-
+