初始化提交

This commit is contained in:
王立帮
2024-07-19 10:16:00 +08:00
parent 4c7b571f20
commit 4a2d56dcc4
7084 changed files with 741212 additions and 63 deletions

View File

@@ -0,0 +1,3 @@
node_modules
build
origin

View File

@@ -0,0 +1,273 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const HANDBIT_HUE = 65;
const ACTUATOR_HUE = 100;
export const handbit_button_is_pressed = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUTTON);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'btn');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
}
};
export const handbit_light = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_LIGHT);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
}
};
export const handbit_sound = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_SOUND);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
}
};
export const inout_touchRead = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH + Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
}
};
export const touchAttachInterrupt = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_TOUCHATTACHINTERRUPT_PIN)
.setCheck(Number);
this.appendValueInput("threshold", Number)
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
.setCheck(Number);
this.appendDummyInput("");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
}
};
var HANDBIT_MSA300_GETAB = [
[Blockly.Msg.MixGo_MPU9250_AX, "msa.getX()"],
[Blockly.Msg.MixGo_MPU9250_AY, "msa.getY()"],
[Blockly.Msg.MixGo_MPU9250_AZ, "msa.getZ()"],
];
var HANDBIT_MSA300_ACTION = [
[Blockly.Msg.HANDBIT_FORWARD, "msa.getX()>1500&&msa.getX()<2000&&msa.getZ()>-1000&&msa.getZ()<0"],
[Blockly.Msg.HANDBIT_BACKWARD, "msa.getX()>1500&&msa.getX()<2000&&msa.getZ()>0&&msa.getZ()<1500"],
[Blockly.Msg.HANDBIT_LEFT, "msa.getY()<1000&&msa.getY()>0"],
[Blockly.Msg.HANDBIT_RIGHT, "msa.getY()<0&&msa.getY()>-1000"],
[Blockly.Msg.HANDBIT_UP, "msa.getX()>-400&&msa.getX()<400&&msa.getY()>-400&&msa.getY()<400&&msa.getZ()>-1800&&msa.getZ()<-1400"],
[Blockly.Msg.HANDBIT_DOWN, "msa.getX()>-400&&msa.getX()<400&&msa.getY()>-400&&msa.getY()<400&&msa.getZ()>2000&&msa.getZ()<2400"],
];
//传感器_重力感应
export const handbit_MSA300 = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MixGo_MPU9250);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown(HANDBIT_MSA300_GETAB), "HANDBIT_MSA300_GETAB");
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip("");
this.setHelpUrl('');
}
};
export const handbit_MSA300_action = {
init: function () {
this.setColour(HANDBIT_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.Handbit);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown(HANDBIT_MSA300_ACTION), "HANDBIT_MSA300_ACTION");
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip("");
this.setHelpUrl('');
}
};
export const handbit_rgb_rainbow1 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("WAIT")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGBdisplay_rgb_rainbow1);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
var DISPLAY_RAINBOW_TYPE = [
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_1, "normal"],
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_2, "change"]
];
export const handbit_rgb_rainbow3 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(DISPLAY_RAINBOW_TYPE), "TYPE");
this.appendValueInput("rainbow_color")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_display_rgb_rainbow3);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const handbit_rgb = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("_LED_")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
this.appendDummyInput("")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const handbit_rgb2 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_NUM + "1" + Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR1", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_NUM + "2" + Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR2", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_NUM + "3" + Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR3", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const handbit_rgb_Brightness = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("Brightness")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const handbit_rgb_show = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_SHOW)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const handbit_motor_move = {
init: function () {
this.appendDummyInput()
.appendField("掌控宝" + Blockly.Msg.MIXLY_MOTOR)
.appendField(new Blockly.FieldDropdown([["M1", "0x01"], ["M2", "0x10"]]), "type");
this.appendValueInput("speed")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_SPEED + "(-100~100)");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ACTUATOR_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
export const handbit_RGB_color_HSV = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("_LED_")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
this.appendValueInput("H")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_H);
this.appendValueInput("S")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_S);
this.appendValueInput("V")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_V);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('色调范围0-65536;饱和度范围0-255;明度范围0-255');
}
};

View File

@@ -0,0 +1,523 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const ACTUATOR_HUE = 100;
const DISPLAY_HUE = 180;
//执行器_点阵屏显示_字符显示
export const HT16K33_TEXT = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MAX7219_PUTSTR);
this.appendValueInput("TEXT", String)
.setCheck([Number, String])
.setAlign(Blockly.inputs.Align.RIGHT);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip("");
}
};
//执行器_点阵屏显示_画点显示
export const HT16K33_POS = {
init: function () {
//执行器_点阵屏显示_画点变量
var MixGo_DrawPixel_NUM = [
[Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, "LED_ON"],
[Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, "LED_OFF"]
];
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);
this.appendValueInput('XVALUE')
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_X);
this.appendValueInput("YVALUE")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_Y);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_SHOWPOINT)
.appendField(new Blockly.FieldDropdown(MixGo_DrawPixel_NUM), "DrawPixel_TYPE");
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip("");
}
};
//执行器_点阵屏显示_显示图案
export const HT16K33_DisplayChar = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);
this.appendValueInput("Chars")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_PICARRAY);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip();
}
};
//执行器_点阵屏显示_图案数组
export const HT16K33_LedArray = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ARRAYVAR)
.appendField(new Blockly.FieldTextInput("LedArray1"), "VAR");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a81")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a82")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a83")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a84")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a85")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a86")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a87")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a88")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a89")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a810")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a811")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a812")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a813")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a814")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a815")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a816");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a71")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a72")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a73")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a74")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a75")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a76")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a77")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a78")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a79")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a710")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a711")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a712")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a713")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a714")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a715")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a716");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a61")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a62")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a63")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a64")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a65")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a66")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a67")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a68")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a69")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a610")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a611")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a612")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a613")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a614")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a615")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a616");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a51")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a52")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a53")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a54")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a55")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a56")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a57")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a58")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a59")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a510")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a511")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a512")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a513")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a514")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a515")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a516");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a41")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a42")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a43")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a44")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a45")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a46")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a47")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a48")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a49")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a410")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a411")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a412")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a413")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a414")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a415")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a416");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a31")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a32")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a33")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a34")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a35")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a36")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a37")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a38")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a39")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a310")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a311")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a312")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a313")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a314")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a315")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a316");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a21")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a22")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a23")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a24")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a25")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a26")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a27")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a28")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a29")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a210")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a211")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a212")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a213")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a214")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a215")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a216");
this.appendDummyInput("")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a11")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a12")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a13")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a14")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a15")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a16")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a17")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a18")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a19")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a110")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a111")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a112")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a113")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a114")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a115")
.appendField(new Blockly.FieldCheckbox("FALSE"), "a116");
this.setOutput(true, Number);
this.setTooltip();
}
};
//物联网_点阵屏_清除显示
export const HT16K33_Displayclear = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip();
}
};
export const HT16K33_show_image = {
init: function () {
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_OR_ANIMATION)
.appendField(new Blockly.FieldDropdown([
["❤", "0100038007c00fe01ff01ff00ee00640"],
["♥", "00000100038007c00fe00ee004400000"],
["▲", "00003ffc1ff80ff007e003c001800000"],
["▼", "0000018003c007e00ff01ff83ffc0000"],
["◄", "100030007000f000f000700030001000"],
// ["↓", "18181818db7e3c18"],
// ["←", "103060ffff603010"],
// ["→", "080c06ffff060c08"],
// ["►", "080c0e0f0f0e0c08"],
// ["△", "182442ff00000000"],
// ["▽", "00000000ff422418"],
// ["☺", "3c42a581a599423c"],
// ["○", "3c4281818181423c"],
// ["◑", "3c4e8f8f8f8f4e3c"],
// ["◐", "3c72f1f1f1f1723c"],
// ["¥", "4224ff08ff080808"],
// ["Χ", "8142241818244281"],
// ["✓", "0000010204885020"],
// ["□", "007e424242427e00"],
// ["▣", "007e425a5a427e00"],
// ["◇", "1824428181422418"],
// ["♀", "3844444438107c10"],
// ["♂", "0f030579d888d870"],
// ["♪", "0c0e0b080878f860"],
// ["✈", "203098ffff983020"],
// //["卍", "00f21212fe90909e"],
// //["卐", "009e9090fe1212f2"],
// ["︱", "1010101010101010"],
// ["—", "000000ff00000000"],
// ["", "0102040810204080"],
// ["", "8040201008040201"],
// ["大", "1010fe1010284482"],
// ["中", "1010fe9292fe1010"],
// ["小", "1010105454921070"],
// ["米", "00925438fe385492"],
// ["正", "00fe10105e5050fc"],
// ["囧", "ffa5a5c3bda5a5ff"]
]), "img_");
this.setOutput(true);
this.setTooltip('');
this.setColour(DISPLAY_HUE);
this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);
this.setHelpUrl('');
}
};
export const HT16K33_blink_rate = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);
this.appendValueInput('x')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE);
}
};
export const HT16K33_brightness = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);
this.appendValueInput("Brightness")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS);
}
};
export const mixgo_button_is_pressed = {
init: function () {
this.setColour(Blockly.Msg['SENSOR_HUE']);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUTTON);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
}
};
export const sensor_mixgo_light = {
init: function () {
this.setColour(Blockly.Msg['SENSOR_HUE']);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_LIGHT);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
}
};
export const sensor_mixgo_sound = {
init: function () {
this.setColour(Blockly.Msg['SENSOR_HUE']);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_SOUND);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
}
};
export const mixgo_touch_pin = {
init: function () {
this.setColour(Blockly.Msg['SENSOR_HUE']);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH)
.appendField(Blockly.Msg.MIXLY_PIN)
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'touch_pin');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
}
};
export const sensor_mixgo_pin_near = {
init: function () {
this.setColour(Blockly.Msg['SENSOR_HUE']);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "34"], [Blockly.Msg.TEXT_TRIM_RIGHT, "36"]]), "direction")
.appendField(Blockly.Msg.MIXLY_ESP32_NEAR);
this.setOutput(true, Boolean);
this.setInputsInline(true);
var thisBlock = this;
this.setTooltip(function () {
var mode = thisBlock.getFieldValue('direction');
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
var TOOLTIPS = {
'left': Blockly.Msg.TEXT_TRIM_LEFT,
'right': Blockly.Msg.TEXT_TRIM_RIGHT,
};
return mode0 + TOOLTIPS[mode] + mode1
});
}
};
export const mixGo_led = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SETTING)
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "5"]]), 'STAT');
this.appendValueInput('bright')
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);
}
};
export const mixGo_led_brightness = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SETTING)
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "5"]]), 'STAT');
this.appendValueInput('bright')
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);
}
};
export const MixGo_rgb_rainbow1 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("WAIT")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGBdisplay_rgb_rainbow1);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
var DISPLAY_RAINBOW_TYPE = [
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_1, "normal"],
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_2, "change"]
];
export const MixGo_rgb_rainbow3 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(DISPLAY_RAINBOW_TYPE), "TYPE");
this.appendValueInput("rainbow_color")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_display_rgb_rainbow3);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const MixGo_rgb = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("_LED_")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
this.appendDummyInput("")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const MixGo_rgb2 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField("1")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR1", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField("2")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR2", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const MixGo_rgb_Brightness = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("Brightness")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const MixGo_rgb_show = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_SHOW)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};

View File

@@ -0,0 +1,229 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const DISPLAY_HUE = 180;
const SENSOR_HUE = 40;
const ACTUATOR_HUE = 100;
var MIXEPI_ADXL345_ACTION = [
[Blockly.Msg.HANDBIT_FORWARD, "accel.getAcceleration().x>-4.7&&accel.getAcceleration().x<0&&accel.getAcceleration().y<1&&accel.getAcceleration().y>-1&&accel.getAcceleration().z<-8&&accel.getAcceleration().z>-9.8"],
[Blockly.Msg.HANDBIT_BACKWARD, "accel.getAcceleration().x>0&&accel.getAcceleration().x<4.7&&accel.getAcceleration().y<1&&accel.getAcceleration().y>-1&&accel.getAcceleration().z<-8&&accel.getAcceleration().z>-9.8"],
[Blockly.Msg.HANDBIT_LEFT, "accel.getAcceleration().y>0&&accel.getAcceleration().y<5.5&&accel.getAcceleration().z<-7.5&&accel.getAcceleration().z>-9.8"],
[Blockly.Msg.HANDBIT_RIGHT, "accel.getAcceleration().y<0&&accel.getAcceleration().y>-4.7&&accel.getAcceleration().z<-7.5&&accel.getAcceleration().z>-9.8"],
[Blockly.Msg.HANDBIT_UP, "accel.getAcceleration().z>-9.8&&accel.getAcceleration().z<-8"],
[Blockly.Msg.HANDBIT_DOWN, "accel.getAcceleration().z>8&&accel.getAcceleration().z<9.8"]
];
var BRIGHTNESS_SELECT = [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"]];
export const brightness_select = {
init: function () {
this.setColour(DISPLAY_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(BRIGHTNESS_SELECT), 'STAT');
this.setOutput(true, Number);
}
};
export const mixePi_button_is_pressed = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUTTON);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'btn');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
}
};
export const mixepi_light = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_LIGHT);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
}
};
export const mixepi_sound = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_SOUND);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
}
};
export const mixepi_inout_touchRead = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH)
.appendField(Blockly.Msg.MIXLY_PIN)
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'touch_pin');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
}
};
export const mixepi_ADXL345_action = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField("MIXEPI");
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown(MIXEPI_ADXL345_ACTION), "MIXEPI_ADXL345_ACTION");
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip("");
this.setHelpUrl('');
}
};
export const mixepi_rgb_rainbow1 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("WAIT")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGBdisplay_rgb_rainbow1);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
var DISPLAY_RAINBOW_TYPE = [
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_1, "normal"],
[Blockly.Msg.MIXLY_RGB_DISPLAY_RAINBOW_TYPE_2, "change"]
];
export const mixepi_rgb_rainbow3 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(DISPLAY_RAINBOW_TYPE), "TYPE");
this.appendValueInput("rainbow_color")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_display_rgb_rainbow3);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const RGB_color_seclet = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldColour("ff0000"), "COLOR");
this.setInputsInline(true);
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.OLED_DRAW_PIXE_TOOLTIP);
}
};
export const RGB_color_rgb = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendValueInput("R")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_R);
this.appendValueInput("G")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_G);
this.appendValueInput("B")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_B);
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip('');
}
};
export const mixepi_rgb = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("_LED_")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
this.appendDummyInput("")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const mixepi_rgb2 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField("1")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR1", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField("2")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR2", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField("3")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR3", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const mixepi_rgb_Brightness = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("Brightness")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};

View File

@@ -0,0 +1,167 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
import { sensor_mixgo_pin_near } from './MixGo';
const SENSOR_HUE = 40;
const ACTUATOR_HUE = 100;
export const mixgo_button_is_pressed = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUTTON);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
}
};
export const sensor_mixgo_sound = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_SOUND);
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
}
};
export const mixgo_touch_pin = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH)
.appendField(Blockly.Msg.MIXLY_PIN)
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'touch_pin');
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
this.setOutput(true, Boolean);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
}
};
export const sensor_mixgo_light = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_LIGHT)
.appendField(new Blockly.FieldDropdown([["A", "39"], ["B", "36"]]), "direction");
this.setOutput(true, Number);
this.setInputsInline(true);
}
};
//NTC电阻
export const NTC_TEMP = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField("NTC")
.appendField(Blockly.Msg.MIXLY_TEMP);
this.setInputsInline(false);
this.setOutput(true, Number);
this.setTooltip();
}
};
export const MPU9250_update = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField("MPU9250" + Blockly.Msg.MIXLY_update_data);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
}
};
export const Pocket_rgb = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const Pocket_rgb2 = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendDummyInput("")
.appendField(Blockly.Msg.HTML_COLOUR);
this.appendValueInput("COLOR1", Number)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const Pocket_rgb_Brightness = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("Brightness")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const Pocket_rgb_show = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB_SHOW)
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
}
};
export const pocket_RGB_color_HSV = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput("H")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_H);
this.appendValueInput("S")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_S);
this.appendValueInput("V")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.HSV_V);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('色调范围0-65536;饱和度范围0-255;明度范围0-255');
}
};
export const sensor_button_is_pressed = mixgo_button_is_pressed;
export const sensor_pin_near = sensor_mixgo_pin_near;
export const sensor_light = sensor_mixgo_light;
export const sensor_sound = sensor_mixgo_sound;

View File

@@ -0,0 +1,157 @@
import * as Blockly from 'blockly/core';
const ACTUATOR_HUE = 100;
export const controls_tone = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TONE);
this.appendValueInput("PIN")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_PIN);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CHANNEL);
this.appendValueInput('FREQUENCY')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
this.appendValueInput('DELAY_TIME')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_DELAY);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
}
};
export const controls_notone = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_NOTONE);
this.appendValueInput("PIN")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_PIN);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CHANNEL);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_NOTONE);
}
};
export const onboard_tone = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_TONE);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CHANNEL);
this.appendValueInput('FREQUENCY')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
this.appendValueInput('DELAY_TIME')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_DELAY);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
}
};
export const onboard_notone = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_NOTONE);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CHANNEL);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_NOTONE);
}
};
export const motor_id = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"]
]), "CHANNEL");
this.setOutput(true);
}
};
export const HR8833_Motor_Setup = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MOTOR_HR8833 + Blockly.Msg.MIXLY_SETUP);
this.appendValueInput('MOTOR_ID')
.setCheck(Number)
.appendField(Blockly.Msg.MOTOR_HR8833_TEAM_NO);
this.appendValueInput("PIN1")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_PIN + "1");
this.appendValueInput("PIN2")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_PIN + "2");
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_MOTOR_SETUP);
}
};
export const HR8833_Motor_Speed = {
init: function () {
this.setColour(ACTUATOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MOTOR_HR8833 + Blockly.Msg.MIXLY_SETTING);
this.appendValueInput('MOTOR_ID')
.setCheck(Number)
.appendField(Blockly.Msg.MOTOR_HR8833_TEAM_NO);
this.appendValueInput('SPEED')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_MOTOR_SPEED);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const handbit_motor_move = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MOTOR)
.appendField(new Blockly.FieldDropdown([["M1", "0x01"], ["M2", "0x10"]]), "type");
this.appendValueInput("speed")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_SPEED + "(-100~100)");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(100);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,47 @@
import * as Blockly from 'blockly/core';
const COMMUNICATE_HUE = 140;
export const serialBT_Init = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendValueInput("CONTENT", String)
.appendField(Blockly.Msg.MIXLY_SERIALBT_INIT)
.setCheck(String);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SERIAL_BEGIN);
}
};
export const serialBT_available = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SERIALBT_AVAILABLE);
this.setOutput(true, Boolean);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_AVAILABLE);
}
};
export const serialBT_read = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SERIALBT_READ);
this.setOutput(true, Boolean);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_AVAILABLE);
}
};
export const serialBT_write = {
init: function () {
this.setColour(COMMUNICATE_HUE);
this.appendValueInput("CONTENT", String)
.appendField(Blockly.Msg.MIXLY_SERIALBT_WRITE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.TEXT_WRITE_TOOLTIP);
}
};

View File

@@ -0,0 +1,101 @@
import * as Blockly from 'blockly/core';
const LOOPS_HUE = 120;
export const controls_hw_timer = {
init: function () {
this.setColour(LOOPS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_ESP32_HW_TIMER)
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), "TIMER_NUM");
this.appendValueInput('TIME')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_MSTIMER2_EVERY);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MILLIS)
.appendField(Blockly.Msg.MIXLY_MODE)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PYTHON_ONE_SHOT, "false"], [Blockly.Msg.MIXLY_PYTHON_PERIODIC, "true"]]), "mode");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_MSTIMER2_DO);
this.setPreviousStatement(false);
this.setNextStatement(false);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_MSTIMER2);
}
};
export const controls_runnig_core = {
init: function () {
this.appendDummyInput()
.appendField("ESP32")
.appendField("Task")
.appendField(new Blockly.FieldDropdown([["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"]]), "task")
.appendField("Core")
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"]]), "core");
this.appendValueInput("length")
.setCheck(null)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.SPACE_ALLOCATION);
this.appendStatementInput("setup")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_SETUP);
this.appendStatementInput("loop")
.setCheck(null)
.appendField(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);
this.setColour(LOOPS_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
export const control_core_delay = {
init: function () {
this.setColour(LOOPS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_CONTROL_CORE_DELAY);
this.appendValueInput("sleeplength", Number)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SCOOP_SLEEP);
}
};
export const controls_hw_timer_start = {
init: function () {
this.setColour(LOOPS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_ESP32_HW_TIMER)
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), "TIMER_NUM")
.appendField(Blockly.Msg.MIXLY_MSTIMER2_START);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_MSTIMER2_START);
}
};
export const controls_hw_timer_stop = {
init: function () {
this.setColour(LOOPS_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_ESP32_HW_TIMER)
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), "TIMER_NUM")
.appendField(Blockly.Msg.MIXLY_STOP);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_MSTIMER2_STOP);
}
};
export const esp32_deep_sleep = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.DFPLAYER_MINI_SLEEP)
.appendField(new Blockly.FieldTextInput("5"), "time")
.appendField(Blockly.Msg.MIXLY_SECOND);
this.setPreviousStatement(true, null);
this.setColour(LOOPS_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,54 @@
import * as Blockly from 'blockly/core';
const ETHERNET_HUE = 0;
//esp_now
export const esp_now_send = {
init: function () {
this.appendDummyInput()
.appendField("ESP NOW" + Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);
this.appendValueInput("mac")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS);
this.appendValueInput("data")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_SD_DATA);
this.appendStatementInput("success")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND + Blockly.Msg.MIXLY_SUCCESS);
this.appendStatementInput("failure")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND + Blockly.Msg.MIXLY_FAILED);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ETHERNET_HUE);
this.setTooltip("");
this.setHelpUrl("https://randomnerdtutorials.com/esp-now-esp32-arduino-ide/");
}
};
//esp_now
export const esp_now_receive = {
init: function () {
this.appendDummyInput()
.appendField("ESP NOW" + Blockly.Msg.MQTT_subscribe2 + Blockly.Msg.MIXLY_SD_DATA);
this.appendStatementInput("receive_data")
.setCheck(null);
this.setColour(ETHERNET_HUE);
this.setTooltip("");
this.setHelpUrl("https://randomnerdtutorials.com/esp-now-esp32-arduino-ide/");
}
};
export const esp32_wifi_connection_event = {
init: function () {
this.appendDummyInput()
.appendField("WiFi连接事件")
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ESP32_WIFI_CONNECTION_EVENT1, "1"], [Blockly.Msg.MIXLY_ESP32_WIFI_CONNECTION_EVENT2, "2"], [Blockly.Msg.MIXLY_ESP32_WIFI_CONNECTION_EVENT3, "3"]]), "type");
this.appendStatementInput("event")
.setCheck(null);
this.setColour(ETHERNET_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,125 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
import { inout_analog_write } from '@mixly/arduino-avr/blocks/inout';
const BASE_HUE = 20//'#ae3838';//40;
export const ledcSetup = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField("ledc" + Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_CHANNEL);
this.appendValueInput("FREQ", Number)
.appendField(Blockly.Msg.MIXLY_FREQUENCY)
.setCheck(Number);
this.appendValueInput('PWM_RESOLUTION')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_RESOLUTION);
this.appendDummyInput("")
.appendField("bit");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip();
}
};
export const ledcAttachPin = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField("ledc" + Blockly.Msg.MIXLY_ATTATCH + Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendValueInput('CHANNEL')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_CHANNEL);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip();
}
};
export const ledcDetachPin = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField("ledc" + Blockly.Msg.MIXLY_DETACH + Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip();
}
};
export const ledcWrite = inout_analog_write;
export const inout_touchRead = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH)
.appendField(Blockly.Msg.MIXLY_PIN);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
this.setOutput(true, Number);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
}
};
export const touchAttachInterrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_TOUCHATTACHINTERRUPT_PIN)
.setCheck(Number);
this.appendValueInput("threshold", Number)
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
.setCheck(Number);
this.appendDummyInput("");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
}
};
export const inout_esp32_dac = {
init: function () {
this.appendValueInput("value")
.setCheck(null)
.appendField(Blockly.Msg.inout_esp32_dac)
.appendField(new Blockly.FieldDropdown(Profile.default.dac), "PIN")
.appendField(Blockly.Msg.MIXLY_VALUE2);
this.appendDummyInput();
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(20);
this.setTooltip(Blockly.Msg.inout_esp32_dac_HELP);
this.setHelpUrl("");
}
};
export const esp32_led_pwm = {
init: function () {
this.appendValueInput("PIN")
.setCheck(null)
.appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks)
.appendField(new Blockly.FieldTextInput("8"), "resolution")
.appendField(Blockly.Msg.MIXLY_FREQUENCY)
.appendField(new Blockly.FieldTextInput("5000"), "freq")
.appendField(Blockly.Msg.MIXLY_CHANNEL)
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]]), "ledChannel")
.appendField(Blockly.Msg.MIXLY_ANALOGWRITE_PIN);
this.appendValueInput("val")
.setCheck(null)
.appendField(Blockly.Msg.MIXLY_VALUE2);
this.appendDummyInput();
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(20);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,219 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const PINS_HUE = 230;
export const pins_dac = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');
this.setOutput(true);
}
};
export const pins_button = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_sda = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.SDA), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_tx = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.tx), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_scl = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.SCL), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_touch = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');
this.setOutput(true);
}
};
export const pins_serial = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_playlist = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');
this.setOutput(true);
}
};
export const pins_exlcdh = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_exlcdv = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_axis = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_brightness = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_tone_notes = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_radio_power = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_radio_datarate = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');
this.setOutput(true, Number);
}
};
export const pins_one_more = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');
this.setOutput(true);
}
};
export const serial_select = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.serial_select), 'PIN');
this.setOutput(true);
}
};
export const serial_HardwareSelect = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), 'PIN');
this.setOutput(true);
}
};
export const brightness = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');
this.setOutput(true);
}
};
export const CHANNEL = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.CHANNEL), 'PIN');
this.setOutput(true);
}
};
export const PWM_RESOLUTION = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.PWM_RESOLUTION), 'PIN');
this.setOutput(true);
}
};
export const OCTAVE = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.OCTAVE), 'PIN');
this.setOutput(true);
}
};
export const TONE_NOTE = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.TONE_NOTE), 'PIN');
this.setOutput(true);
}
};
export const pins_digitalWrite = {
init: function () {
this.setColour(PINS_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.digitalWrite), 'PIN');
this.setOutput(true, Number);
}
};

View File

@@ -0,0 +1,62 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const SENSOR_HUE = 40;
//ESP32片内霍尔传感器值
export const ESP32_hallRead = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.ESP32_HALL);
this.setOutput(true, null);
this.setColour(SENSOR_HUE);
this.setTooltip();
this.setHelpUrl("");
}
};
//ESP32片内温度传感器值
export const ESP32_temprature = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.ESP32_TEMP);
this.setOutput(true, null);
this.setColour(SENSOR_HUE);
this.setTooltip();
this.setHelpUrl("");
}
};
export const OneButton = {
init: function () {
this.setColour(SENSOR_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUTTON)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_CLICK, "attachClick"], [Blockly.Msg.MIXLY_DOUBLE_CLICK, "attachDoubleClick"], [Blockly.Msg.MIXLY_LONG_PRESS_START, "attachLongPressStart"], [Blockly.Msg.MIXLY_DURING_LONG_PRESS, "attachDuringLongPress"], [Blockly.Msg.MIXLY_LONG_PRESS_END, "attachLongPressStop"]]), "mode");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
this.setInputsInline(true);
this.setHelpUrl();
}
};
export const ESP_TCS34725_Get_RGB = {
init: function () {
const TCS34725_COLOR = [
[Blockly.Msg.COLOUR_RGB_RED, "r"],
[Blockly.Msg.COLOUR_RGB_GREEN, "g"],
[Blockly.Msg.COLOUR_RGB_BLUE, "b"],
];
this.setColour(SENSOR_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.TCS34725_Get_RGB)
.appendField(new Blockly.FieldDropdown(TCS34725_COLOR), "TCS34725_COLOR");
this.setInputsInline(true);
this.setOutput(true);
}
};

View File

@@ -0,0 +1,204 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const SERIAL_HUE = 65;
export const serial_HardwareSerial = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.Hardware_Serial)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select");
this.appendValueInput("RX", Number)
.setCheck(Number)
.appendField("RX#")
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput("TX", Number)
.appendField("TX#")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput("CONTENT", Number)
.appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)
.setCheck(Number);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SOFTSERIAL.replace('%1', Blockly.Arduino.valueToCode(this, 'RX', Blockly.Arduino.ORDER_ATOMIC))
.replace('%2', Blockly.Arduino.valueToCode(this, 'TX', Blockly.Arduino.ORDER_ATOMIC)));
}
};
export const serial_begin = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput("CONTENT", Number)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)
.setCheck(Number);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SERIAL_BEGIN);
}
};
export const serial_write = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput("CONTENT", String)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_WRITE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.TEXT_WRITE_TOOLTIP);
}
};
export const serial_print = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput("CONTENT", String)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PRINT_INLINE, "print"], [Blockly.Msg.TEXT_PRINT_Huanhang_TOOLTIP, "println"]]), "new_line");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
}
};
export const serial_println = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput("CONTENT", String)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_PRINT_Huanhang_TOOLTIP, "println"], [Blockly.Msg.MIXLY_PRINT_INLINE, "print"]]), "new_line");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
}
};
export const serial_print_num = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PRINT_INLINE, "print"], [Blockly.Msg.TEXT_PRINT_Huanhang_TOOLTIP, "println"]]), "new_line")
.appendField(Blockly.Msg.MIXLY_NUMBER);
this.appendValueInput("CONTENT", Number)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MATH_HEX, "HEX"], [Blockly.Msg.MATH_BIN, "BIN"], [Blockly.Msg.MATH_OCT, "OCT"], [Blockly.Msg.MATH_DEC, "DEC"]]), "STAT")
.setCheck(Number);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.TEXT_PRINT_HEX_TOOLTIP);
}
};
export const serial_print_hex = serial_print_num;
export const serial_available = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_AVAILABLE);
this.setOutput(true, Boolean);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_AVAILABLE);
}
};
export const serial_readstr = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_READSTR);
this.setOutput(true, String);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_STR);
}
};
export const serial_readstr_until = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendValueInput("CONTENT", Number)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_READSTR_UNTIL)
.setCheck(Number);
this.setInputsInline(true);
this.setOutput(true, String);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SERIAL_READSTRUNITL.replace('%1', Blockly.Arduino.valueToCode(this, 'CONTENT', Blockly.Arduino.ORDER_ATOMIC)));
}
};
export const serial_parseInt_Float = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
//.appendField(Blockly.Msg.MIXLY_SERIAL_READ)
.appendField(new Blockly.FieldDropdown([["read", "read"], ["peek", "peek"], ["parseInt", "parseInt"], ["parseFloat", "parseFloat"]]), "STAT");
this.setOutput(true, Number);
var thisBlock = this;
this.setTooltip(function () {
var op = thisBlock.getFieldValue('STAT');
var TOOLTIPS = {
'parseInt': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_INT,
'parseFloat': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_FLOAT
};
return TOOLTIPS[op];
});
}
};
export const serial_flush = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_FLUSH);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SERIAL_FLUSH);
}
};
export const serial_softserial = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETUP)
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select");
this.appendValueInput("RX", Number)
.setCheck(Number)
.appendField("RX#")
.setAlign(Blockly.inputs.Align.RIGHT);
this.appendValueInput("TX", Number)
.appendField("TX#")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SOFTSERIAL.replace('%1', Blockly.Arduino.valueToCode(this, 'RX', Blockly.Arduino.ORDER_ATOMIC))
.replace('%2', Blockly.Arduino.valueToCode(this, 'TX', Blockly.Arduino.ORDER_ATOMIC)));
}
};
export const serial_event = {
init: function () {
this.setColour(SERIAL_HUE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(Profile.default.serial_HardwareSelect), "serial_select")
.appendField(Blockly.Msg.MIXLY_SERIAL_EVENT);
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_SERIALEVENT);
}
};

View File

@@ -0,0 +1,97 @@
import * as Blockly from 'blockly/core';
const ACTUATOR_HUE = 100;
Blockly.Msg.TURN_OFF_BLUETOOTH_TO_CONNECT = "关闭蓝牙可连接";
Blockly.Msg.TURN_ON_BLUETOOTH_TO_CONNECT = "打开蓝牙可连接";
Blockly.Msg.RANGE_0 = "范围0-30";
Blockly.Msg.HSC025A_CONTROL_INSTRUCTION = "HSC025A控制指令";
Blockly.Msg.HSC025A_DESIGNATED_PLAYBACK = "HSC025A指定播放";
Blockly.Msg.HSC025A_DESIGNATED_PLAYBACK1 = "HSC025A指定播放歌曲名0000-0255";
Blockly.Msg.HSC025A_VOLUME_IS_SET_TO = "HSC025A音量设置为";
Blockly.Msg.BLUETOOTH_ON = "蓝牙开启";
Blockly.Msg.BLUETOOTH_OFF = "蓝牙关闭";
Blockly.Msg.MUTE = "静音";
Blockly.Msg.RESTORE_SOUND = "恢复声音";
Blockly.Msg.STANDBY = "待机";
Blockly.Msg.BOOT = "开机";
Blockly.Msg.PLAY_PAUSE = "播放/暂停";
Blockly.Msg.SHUTDOWN = "关机";
Blockly.Msg.SD_CARD_MODE = "SD卡模式";
Blockly.Msg.BLUETOOTH_MODE = "蓝牙模式";
Blockly.Msg.RESET = "恢复出厂设置";
Blockly.Msg.STOP_PLAYING = "放完停止";
Blockly.Msg.BLUETOOTH_CONNECT = "蓝牙回连";
Blockly.Msg.MATH_DEC_MODE = "方式";
Blockly.Msg.REQUEST_SUCCEEDED = "请求成功";
Blockly.Msg.MIXLY_FAILED = "请求失败";
Blockly.Msg.MODE_SWITCH = "模式切换";
//HSC025A 蓝牙MP3指令
var hsc025a_mode = [
[Blockly.Msg.MODE_SWITCH, "1"],
[Blockly.Msg.MIXLY_MP3_PLAY, "2"],
[Blockly.Msg.MIXLY_MP3_PAUSE, "3"],
[Blockly.Msg.MIXLY_MP3_NEXT, "4"],
[Blockly.Msg.MIXLY_MP3_PREV, "5"],
[Blockly.Msg.MIXLY_MP3_VOL_UP, "6"],
[Blockly.Msg.MIXLY_MP3_VOL_DOWN, "7"],
[Blockly.Msg.STANDBY, "8"],
[Blockly.Msg.BOOT, "9"],
[Blockly.Msg.PLAY_PAUSE, "10"],
[Blockly.Msg.MIXLY_MICROBIT_Stop_music, "11"],
[Blockly.Msg.SHUTDOWN, "12"],
[Blockly.Msg.SD_CARD_MODE, "13"],
[Blockly.Msg.BLUETOOTH_MODE, "14"],
[Blockly.Msg.RESET, "15"],
[Blockly.Msg.STOP_PLAYING, "16"],
[Blockly.Msg.BLUETOOTH_CONNECT, "17"],
[Blockly.Msg.TURN_OFF_BLUETOOTH_TO_CONNECT, "18"],
[Blockly.Msg.TURN_ON_BLUETOOTH_TO_CONNECT, "19"],
[Blockly.Msg.BLUETOOTH_ON, "20"],
[Blockly.Msg.BLUETOOTH_OFF, "21"],
[Blockly.Msg.MUTE, "22"],
[Blockly.Msg.RESTORE_SOUND, "23"]
];
export const hsc025a_instruction = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.HSC025A_CONTROL_INSTRUCTION)
.appendField(new Blockly.FieldDropdown(hsc025a_mode), "instruction");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ACTUATOR_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//指定播放歌曲
export const hsc025a_play = {
init: function () {
this.appendValueInput("num")
.setCheck(null)
.appendField(Blockly.Msg.HSC025A_DESIGNATED_PLAYBACK);
this.appendDummyInput();
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ACTUATOR_HUE);
this.setTooltip(Blockly.Msg.HSC025A_DESIGNATED_PLAYBACK1);
this.setHelpUrl("");
}
};
//音量设置
export const hsc025a_volume = {
init: function () {
this.appendValueInput("num")
.setCheck(null)
.appendField(Blockly.Msg.HSC025A_VOLUME_IS_SET_TO);
this.appendDummyInput();
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(ACTUATOR_HUE);
this.setTooltip(Blockly.Msg.RANGE_0);
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,146 @@
import * as Blockly from 'blockly/core';
const STORAGE_HUE = 0;
//初始化SPIFFS
export const initialize_spiffs = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SETUP + "SPIFFS");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
var OPEN_MODE = [
[Blockly.Msg.MIXLY_READONLY, 'FILE_READ'],
[Blockly.Msg.TEXT_WRITE_TEXT, 'FILE_WRITE'],
[Blockly.Msg.TEXT_APPEND_APPENDTEXT, 'FILE_APPEND']]
//打开文件并向其中写入数据
export const spiffs_open_file = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_FILE_PATH);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("/fileName.txt"), "file_path");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MODE);
this.appendDummyInput()
.appendField(new Blockly.FieldDropdown(OPEN_MODE), 'MODE');
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//打开文件并向其中写入数据
export const spiffs_close_file = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(STORAGE_HUE);
this.setInputsInline(true);
this.setTooltip("");
this.setHelpUrl("");
}
};
//将数据追加到文件
export const spiffs_write_data = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_WRITE);
this.appendValueInput("data")
.setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//文件可读
export const spiffs_read_available = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.HTML_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_AVAILABLE);
this.setColour(STORAGE_HUE);
this.setOutput(true, null);
this.setInputsInline(true);
this.setTooltip("");
this.setHelpUrl("");
}
};
//读取文件内容
export const spiffs_read_data = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.appendDummyInput()
.appendField(Blockly.Msg.OLED_STRING);
this.setOutput(true, null);
this.setInputsInline(true);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//检查文件大小
export const spiffs_file_size = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.HTML_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("myFile"), "file_var");
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE);
this.setOutput(true, null);
this.setInputsInline(true);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};
//删除文件
export const spiffs_delete_file = {
init: function () {
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE);
this.appendDummyInput()
.appendField(new Blockly.FieldTextInput("/fileName.txt"), "file_path");
this.appendDummyInput();
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setColour(STORAGE_HUE);
this.setTooltip("");
this.setHelpUrl("");
}
};

View File

@@ -0,0 +1,85 @@
import * as Blockly from 'blockly/core';
const TOOLS_HUE = "#555555";
let toolsBlocks = {};
let toolsGenerators = {};
const BOARDS_PIN_DEF = {
esp32_pin: {
path: require("../../../../common/media/board_pin/ESP32.png"),
height: 270
},
handbit_A: {
path: require("../../../../common/media/board_pin/handbit_A.jpg"),
height: 260
},
handbit_B: {
path: require("../../../../common/media/board_pin/handbit_B.jpg"),
height: 260,
width: 460
},
handbit_pin_A: {
path: require("../../../../common/media/board_pin/handbit_pin_A.jpg"),
width: 270
},
handbit_pin_B: {
path: require("../../../../common/media/board_pin/handbit_pin_B.jpg"),
width: 290
},
mixgo_pin_A: {
path: require("../../../../common/media/board_pin/MixGo_pin_A.png")
},
mixgo_pin_B: {
path: require("../../../../common/media/board_pin/MixGo_pin_B.png")
},
PocketCard_A: {
path: require("../../../../common/media/board_pin/PocketCard_A.jpg")
},
PocketCard_B: {
path: require("../../../../common/media/board_pin/PocketCard_B.jpg")
},
PocketCard_pin: {
path: require("../../../../common/media/board_pin/PocketCard_pin.png")
},
esp32_cam_pin: {
path: require("../../../../common/media/board_pin/ESP32_CAM_pin.png"),
height: 270
},
esp32_pico_kit_1_pin: {
path: require("../../../../common/media/board_pin/ESP32_pico_kit_1.png"),
height: 230
},
nodemcu_32s_pin: {
path: require("../../../../common/media/board_pin/nodemcu_32s_pin.png"),
width: 380
}
}
for (let i in BOARDS_PIN_DEF) {
const defaultDef = {
path: require('../../../../common/media/board_pin/ESP32.png'),
height: 376,
width: 525,
tooltip: '',
helpUrl: ''
};
let pinDef = {};
Object.assign(pinDef, defaultDef, BOARDS_PIN_DEF[i]);
toolsBlocks[i] = {
init: function () {
this.appendDummyInput()
.appendField(new Blockly.FieldImage(pinDef.path, pinDef.width, pinDef.height, "*"));
this.setColour(TOOLS_HUE);
this.setTooltip(pinDef.tooltip);
this.setHelpUrl(pinDef.helpUrl);
}
};
toolsGenerators[i] = function () {
return "";
};
}
export const blocks = toolsBlocks;
export const generators = toolsGenerators;

View File

@@ -0,0 +1,291 @@
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/inout.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/inout2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ctrl.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/ctrl2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/math.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/math2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/logic.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/logic2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/text.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/text2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/list.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/list2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/var.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/var2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/func.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/func2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/port.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/port2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/resources.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/resources2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/sensor.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/sensor2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/act.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/act2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/4Digitdisplay.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/4Digitdisplay2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/lcd.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/lcd2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/oled.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/oled2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第四个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(4)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/Matrix.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第四个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div:nth-child(2)>div:nth-child(4)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/Matrix2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/comuni.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(15)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/store2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/WIFI.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/WIFI2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/blynk.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第二个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/blynk2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/iot.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第三个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/iot2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第四个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(4)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/weather.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第四个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(16)>div:nth-child(2)>div:nth-child(4)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/weather2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(18)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/factory3.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(18)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/factory4.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(19)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/tool.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(19)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/tool2.png') no-repeat;
background-size: 100% auto;
}

View File

@@ -0,0 +1,76 @@
import ArduinoESP32Pins from './pins/pins';
import * as ArduinoESP32ActuatorBlocks from './blocks/actuator';
import * as ArduinoESP32CommunicateBlocks from './blocks/communicate';
import * as ArduinoESP32ControlBlocks from './blocks/control';
import * as ArduinoESP32EthernetBlocks from './blocks/ethernet';
import * as ArduinoESP32HandbitBlocks from './blocks/Handbit';
import * as ArduinoESP32InoutBlocks from './blocks/inout';
import * as ArduinoESP32MixePiBlocks from './blocks/MixePi';
import * as ArduinoESP32MixGoBlocks from './blocks/MixGo';
import * as ArduinoESP32PinsBlocks from './blocks/pins';
import * as ArduinoESP32PocketCardBlocks from './blocks/PocketCard';
import * as ArduinoESP32SensorBlocks from './blocks/sensor';
import * as ArduinoESP32SerialBlocks from './blocks/serial';
import * as ArduinoESP32SidanBlocks from './blocks/sidan';
import * as ArduinoESP32StorageBlocks from './blocks/storage';
import * as ArduinoESP32Tools from './blocks/tools';
import * as ArduinoESP32ActuatorGenerators from './generators/actuator';
import * as ArduinoESP32CommunicateGenerators from './generators/communicate';
import * as ArduinoESP32ControlGenerators from './generators/control';
import * as ArduinoESP32EthernetGenerators from './generators/ethernet';
import * as ArduinoESP32HandbitGenerators from './generators/Handbit';
import * as ArduinoESP32InoutGenerators from './generators/inout';
import * as ArduinoESP32MixePiGenerators from './generators/MixePi';
import * as ArduinoESP32MixGoGenerators from './generators/MixGo';
import * as ArduinoESP32PinsGenerators from './generators/pins';
import * as ArduinoESP32PocketCardGenerators from './generators/PocketCard';
import * as ArduinoESP32SensorGenerators from './generators/sensor';
import * as ArduinoESP32SerialGenerators from './generators/serial';
import * as ArduinoESP32SidanGenerators from './generators/sidan';
import * as ArduinoESP32StorageGenerators from './generators/storage';
import ArduinoESP32ZhHans from './language/zh-hans';
import ArduinoESP32ZhHant from './language/zh-hant';
import ArduinoESP32En from './language/en';
const ArduinoESP32ToolsBlocks = ArduinoESP32Tools.blocks;
const ArduinoESP32ToolsGenerators = ArduinoESP32Tools.generators;
export {
ArduinoESP32Pins,
ArduinoESP32ActuatorBlocks,
ArduinoESP32CommunicateBlocks,
ArduinoESP32ControlBlocks,
ArduinoESP32EthernetBlocks,
ArduinoESP32HandbitBlocks,
ArduinoESP32InoutBlocks,
ArduinoESP32MixePiBlocks,
ArduinoESP32MixGoBlocks,
ArduinoESP32PinsBlocks,
ArduinoESP32PocketCardBlocks,
ArduinoESP32SensorBlocks,
ArduinoESP32SerialBlocks,
ArduinoESP32SidanBlocks,
ArduinoESP32StorageBlocks,
ArduinoESP32ToolsBlocks,
ArduinoESP32ActuatorGenerators,
ArduinoESP32CommunicateGenerators,
ArduinoESP32ControlGenerators,
ArduinoESP32EthernetGenerators,
ArduinoESP32HandbitGenerators,
ArduinoESP32InoutGenerators,
ArduinoESP32MixePiGenerators,
ArduinoESP32MixGoGenerators,
ArduinoESP32PinsGenerators,
ArduinoESP32PocketCardGenerators,
ArduinoESP32SensorGenerators,
ArduinoESP32SerialGenerators,
ArduinoESP32SidanGenerators,
ArduinoESP32StorageGenerators,
ArduinoESP32ToolsGenerators,
ArduinoESP32ZhHans,
ArduinoESP32ZhHant,
ArduinoESP32En
};

View File

@@ -0,0 +1,182 @@
import { sensor_light, sensor_sound } from './sensor';
export const handbit_button_is_pressed = function (_, generator) {
var btn = this.getFieldValue('btn');
generator.setups_['setup_btn' + btn] = 'pinMode(' + btn + ',INPUT);';
var code = '!digitalRead(' + btn + ')';
return [code, generator.ORDER_ATOMIC];
}
export const handbit_light = sensor_light;
export const handbit_sound = sensor_sound;
// 传感器_重力感应块
export const handbit_MSA300 = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.definitions_['include_MSA300'] = '#include <MSA300.h>';
generator.definitions_['var_declare_MSA300'] = 'MSA300 msa;\n';
generator.setups_['setup_msa.begin'] = 'msa.begin();';
generator.setups_['setup_Wire.begin'] = 'Wire.begin();';
var dropdown_type = this.getFieldValue('HANDBIT_MSA300_GETAB');
var code = dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
// 传感器_重力感应块
export const handbit_MSA300_action = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.definitions_['include_MSA300'] = '#include <MSA300.h>';
generator.definitions_['var_declare_MSA300'] = 'MSA300 msa;\n';
generator.setups_['setup_msa.begin'] = 'msa.begin();';
generator.setups_['setup_Wire.begin'] = 'Wire.begin();';
var dropdown_type = this.getFieldValue('HANDBIT_MSA300_ACTION');
var code = dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
export const touchAttachInterrupt = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var threshold = generator.valueToCode(this, 'threshold', generator.ORDER_ATOMIC);
generator.setups_['touchAttachInterrupt' + dropdown_pin] = 'touchAttachInterrupt(' + dropdown_pin + ',gotTouch' + dropdown_pin + ', ' + threshold + ');';
//var interrupt_pin=digitalPinToInterrupt(dropdown_pin).toString();
var code = '';
var funcName = 'gotTouch' + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const inout_touchRead = function (_, generator) {
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = 'touchRead(' + pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const handbit_rgb = function (_, generator) {
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var COLOR = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setPixelColor(' + value_led + '-1,' + COLOR + ');\n';
return code;
}
export const handbit_rgb2 = function (_, generator) {
var COLOR1 = generator.valueToCode(this, 'COLOR1', generator.ORDER_ATOMIC);
var COLOR2 = generator.valueToCode(this, 'COLOR2', generator.ORDER_ATOMIC);
var COLOR3 = generator.valueToCode(this, 'COLOR3', generator.ORDER_ATOMIC);
COLOR1 = COLOR1.replace(/#/g, "0x");
COLOR2 = COLOR2.replace(/#/g, "0x");
COLOR3 = COLOR3.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setPixelColor(0,' + COLOR1 + ');\n';
code += 'rgb_display_17.setPixelColor(1,' + COLOR2 + ');\n';
code += 'rgb_display_17.setPixelColor(2,' + COLOR3 + ');\n';
return code;
}
export const handbit_rgb_Brightness = function (_, generator) {
var Brightness = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setBrightness(' + Brightness + ');\n';
return code;
}
export const handbit_rgb_show = function () {
var code = 'rgb_display_17.show();\n'
// +'rgb_display_17.show();\ndelay(1);\n'
return code;
}
export const handbit_rgb_rainbow1 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ATOMIC);
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85) \n{\nreturn rgb_display_17.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n} \n';
code2 += 'else if(WheelPos < 170) \n{\nWheelPos -= 85; \nreturn rgb_display_17.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n}\n ';
code2 += 'else\n {\nWheelPos -= 170;\nreturn rgb_display_17.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
var funcName3 = 'rainbow';
var code3 = 'void rainbow(uint8_t wait) {\n uint16_t i, j;\n';
code3 += 'for(j=0; j<256; j++) {\n';
code3 += 'for(i=0; i<rgb_display_17.numPixels(); i++)\n {\n';
code3 += 'rgb_display_17.setPixelColor(i, Wheel((i+j) & 255));\n}\n';
code3 += 'rgb_display_17.show();\n';
// code3 += 'delay(wait);'
code3 += ' \n}\n}\n';
generator.definitions_[funcName3] = code3;
var code = 'rainbow(' + wait_time + ');\n'
return code;
}
export const handbit_rgb_rainbow3 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
var rainbow_color = generator.valueToCode(this, 'rainbow_color', generator.ORDER_ATOMIC);
var type = this.getFieldValue('TYPE');
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85)\n {\nreturn rgb_display_17.Color(WheelPos * 3, 255 - WheelPos * 3, 0);} \n';
code2 += 'else if(WheelPos < 170)\n {\nWheelPos -= 85; return rgb_display_17.Color(255 - WheelPos * 3, 0, WheelPos * 3);}\n ';
code2 += 'else {\nWheelPos -= 170;return rgb_display_17.Color(0, WheelPos * 3, 255 - WheelPos * 3);}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
if (type == "normal")
var code3 = 'for (int i = 0; i < rgb_display_17.numPixels(); i++)\n{rgb_display_17.setPixelColor(i, Wheel(' + rainbow_color + ' & 255));\n}\n';
else
var code3 = 'for (int i = 0; i < rgb_display_17.numPixels(); i++)\n {rgb_display_17.setPixelColor(i, Wheel(((i * 256 / rgb_display_17.numPixels()) + ' + rainbow_color + ') & 255));\n}\n';
return code3;
}
export const OneButton = function (_, generator) {
generator.definitions_['include_OneButton'] = '#include <OneButton.h>';
var dropdown_pin = this.getFieldValue('PIN');
var dropdown_mode = this.getFieldValue('mode');
generator.definitions_['var_declare_button' + dropdown_pin] = 'OneButton button' + dropdown_pin + '(' + dropdown_pin + ',true);';
generator.setups_['setup_onebutton_' + dropdown_pin + dropdown_mode] = 'button' + dropdown_pin + '.' + dropdown_mode + '(' + dropdown_mode + dropdown_pin + ');';
var code = 'button' + dropdown_pin + '.tick();';
var funcName = dropdown_mode + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const handbit_motor_move = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_i2c_23_22'] = 'Wire.begin(23, 22);';
generator.definitions_['HandBit_Motor_Speed_fun'] = 'void HandBit_Motor_Speed(int pin, int speed){//电机速度设置 pin=1~2,speed=--100~100\n'
+ ' Wire.beginTransmission(0x10);\n'
+ ' Wire.write(pin);\n'
+ ' Wire.write(speed);\n'
+ ' Wire.endTransmission();\n'
+ '}';
var code = 'HandBit_Motor_Speed(' + dropdown_type + ', ' + value_speed + ');\n';
return code;
}
export const handbit_RGB_color_HSV = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_GRB + NEO_KHZ800);';
var dropdown_rgbpin = 17;
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var H = generator.valueToCode(this, 'H', generator.ORDER_ATOMIC);
var S = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC);
var V = generator.valueToCode(this, 'V', generator.ORDER_ATOMIC);
var code = 'rgb_display_' + dropdown_rgbpin + '.setPixelColor(' + value_led + ')-1, ' + 'rgb_display_' + dropdown_rgbpin + '.ColorHSV(' + H + ',' + S + ',' + V + '));\n';
return code;
}

View File

@@ -0,0 +1,250 @@
import { sensor_light, sensor_sound } from './sensor';
// 执行器_点阵屏显示_字符显示
export const HT16K33_TEXT = function (_, generator) {
generator.definitions_['include_HT16K33'] = '#include <ZT16K33.h>';
generator.definitions_['var_declare_HT16K33'] = 'HT16K33 MixGo_HT16K33;';
generator.setups_['setup_Matrix_1'] = 'MixGo_HT16K33.begin(0x70);';
generator.setups_['setup_Matrix_2'] = 'delay(100);';
var string1 = generator.valueToCode(this, 'TEXT', generator.ORDER_ASSIGNMENT);
var code = 'MixGo_HT16K33.drawStr(' + string1 + ');\n'
return code;
}
// 执行器_点阵屏显示_画点显示
export const HT16K33_POS = function (_, generator) {
generator.definitions_['2_include_HT16K33'] = '#include <ZT16K33.h>';
generator.definitions_['var_declare_HT16K33'] = 'HT16K33 MixGo_HT16K33;';
generator.setups_['setup_Matrix_1'] = 'MixGo_HT16K33.begin(0x70);';
generator.setups_['setup_Matrix_2'] = 'delay(100);';
var pos_x = generator.valueToCode(this, 'XVALUE', generator.ORDER_ASSIGNMENT);
var pos_y = generator.valueToCode(this, 'YVALUE', generator.ORDER_ASSIGNMENT);
var dropdown_type = this.getFieldValue('DrawPixel_TYPE');
var code = 'MixGo_HT16K33.drawPixel(' + pos_x + '-1,' + pos_y + '-1,' + dropdown_type + ');\n'
code += 'MixGo_HT16K33.writeDisplay();\n';
return code;
}
// 执行器_点阵屏显示_显示图案
export const HT16K33_DisplayChar = function (_, generator) {
generator.definitions_['2_include_HT16K33'] = '#include <ZT16K33.h>';
generator.definitions_['var_declare_HT16K33'] = 'HT16K33 MixGo_HT16K33;';
generator.definitions_['var_declare_Matrix1'] = 'uint16_t MixGo_LedArray[8];';
generator.setups_['setup_Matrix_1'] = 'MixGo_HT16K33.begin(0x70);';
generator.setups_['setup_Matrix_2'] = 'delay(100);';
var dropdown_pin = generator.valueToCode(this, 'Chars', generator.ORDER_ASSIGNMENT);
// var code='Matrix_'+SDA+'_'+SCL+'.clear();\n';
var code = '';
code += 'for(int i=0; i<8; i++)\n';
code += '{\n'
code += ' MixGo_LedArray[i]=' + dropdown_pin + '[i];\n';
code += ' for(int j=15; j>=0; j--)\n'
code += ' {\n'
code += ' if((MixGo_LedArray[i]&0x01)>0)\n';
code += ' MixGo_HT16K33.drawPixel(j, i,LED_ON);\n';
code += ' MixGo_LedArray[i] = MixGo_LedArray[i]>>1;\n';
code += ' } \n'
code += '}\n'
code += 'MixGo_HT16K33.writeDisplay();\n'
return code;
}
// 执行器_点阵屏显示_图案数组
export const HT16K33_LedArray = function (_, generator) {
var varName = this.getFieldValue('VAR');
var a = new Array();
for (var i = 1; i < 9; i++) {
a[i] = new Array();
for (var j = 1; j < 17; j++) {
a[i][j] = (this.getFieldValue('a' + i + j) == "TRUE") ? 1 : 0;
}
}
var code = '{';
for (var i = 1; i < 9; i++) {
var tmp = ""
for (var j = 1; j < 17; j++) {
tmp += a[i][j];
}
tmp = (parseInt(tmp, 2)).toString(16)
// alert(tmp);
if (tmp.length == 1)
tmp = "000" + tmp;
else if (tmp.length == 2)
tmp = "00" + tmp;
else if (tmp.length == 3)
tmp = "0" + tmp;
code += '0x' + tmp + ((i != 8) ? ',' : '');
}
code += '};';
generator.definitions_[varName] = "uint16_t " + varName + "[8]=" + code;
//return ["LedArray_"+clearString(this.id), generator.ORDER_ATOMIC];
return [varName, generator.ORDER_ATOMIC];
}
// 辅助块_点阵屏_清除显示
export const HT16K33_Displayclear = function (_, generator) {
generator.definitions_['2_include_HT16K33'] = '#include <ZT16K33.h>';
generator.definitions_['var_declare_HT16K33'] = 'HT16K33 MixGo_HT16K33;';
generator.setups_['setup_Matrix_1'] = 'MixGo_HT16K33.begin(0x70);';
generator.setups_['setup_Matrix_2'] = 'delay(100);';
var code = '';
code += 'MixGo_HT16K33.clear();\n';
return code;
}
// 辅助块_点阵屏_清除显示
export const HT16K33_brightness = function (_, generator) {
var BRIGHTNESS = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['2_include_HT16K33'] = '#include <ZT16K33.h>';
generator.definitions_['var_declare_HT16K33'] = 'HT16K33 MixGo_HT16K33;';
generator.setups_['setup_Matrix_1'] = 'MixGo_HT16K33.begin(0x70);';
generator.setups_['setup_Matrix_2'] = 'delay(100);';
var code = '';
code += 'MixGo_HT16K33.setBrightness(' + BRIGHTNESS + ');\n';
return code;
}
export const HT16K33_show_image = function (_, generator) {
var dropdown_img_ = this.getFieldValue('img_');
var code = '"' + dropdown_img_ + '"';
code = '{';
for (var i = 0; i < 31; i += 4) {
code += '0x' + dropdown_img_.substr(i, 4) + ((i != 28) ? ',' : '');
}
code += '};\n';
generator.definitions_['matrix_img_' + dropdown_img_] = "byte " + 'matrix_img_' + dropdown_img_ + "[]=" + code;
return ['matrix_img_' + dropdown_img_, generator.ORDER_ATOMIC];
}
export const sensor_mixgo_light = sensor_light;
export const sensor_mixgo_sound = sensor_sound;
export const mixgo_touch_pin = function (_, generator) {
var touch_pin = this.getFieldValue('touch_pin');
var code = 'touchRead(' + touch_pin + ')';
return [code, generator.ORDER_ATOMIC];
};
export const sensor_mixgo_pin_near = function (_, generator) {
var direction = this.getFieldValue('direction');
var code = 'digitalRead(' + direction + ')';
return [code, generator.ORDER_ATOMIC];
}
export const mixGo_led = function (_, generator) {
var op = this.getFieldValue('STAT');
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
generator.setups_['setup_pinmode' + op] = 'pinMode(' + op + ',OUTPUT);';
var code = "digitalWrite(" + op + ",!" + bright + ");\n";
return code;
}
export const MixGo_rgb = function (_, generator) {
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var COLOR = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display02'] = 'Adafruit_NeoPixel rgb_display_02= Adafruit_NeoPixel(2,2,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_02'] = 'rgb_display_02.begin();';
var code = 'rgb_display_02.setPixelColor(' + value_led + '-1,' + COLOR + ');\n';
return code;
}
export const MixGo_rgb2 = function (_, generator) {
var COLOR1 = generator.valueToCode(this, 'COLOR1', generator.ORDER_ATOMIC);
var COLOR2 = generator.valueToCode(this, 'COLOR2', generator.ORDER_ATOMIC);
COLOR1 = COLOR1.replace(/#/g, "0x");
COLOR2 = COLOR2.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display02'] = 'Adafruit_NeoPixel rgb_display_02= Adafruit_NeoPixel(2,2,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_02'] = 'rgb_display_02.begin();';
var code = 'rgb_display_02.setPixelColor(0,' + COLOR1 + ');\n';
code += 'rgb_display_02.setPixelColor(1,' + COLOR2 + ');\n';
return code;
}
export const MixGo_rgb_Brightness = function (_, generator) {
var Brightness = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display02'] = 'Adafruit_NeoPixel rgb_display_02= Adafruit_NeoPixel(2,2,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_02'] = 'rgb_display_02.begin();';
var code = 'rgb_display_02.setBrightness(' + Brightness + ');\n';
return code;
}
export const MixGo_rgb_rainbow1 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display02'] = 'Adafruit_NeoPixel rgb_display_02= Adafruit_NeoPixel(2,2,NEO_GRB + NEO_KHZ800);';
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ATOMIC);
generator.setups_['setup_rgb_display_begin_02'] = 'rgb_display_02.begin();';
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85) \n{\nreturn rgb_display_02.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n} \n';
code2 += 'else if(WheelPos < 170) \n{\nWheelPos -= 85; \nreturn rgb_display_02.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n}\n ';
code2 += 'else\n {\nWheelPos -= 170;\nreturn rgb_display_02.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
var funcName3 = 'rainbow';
var code3 = 'void rainbow(uint8_t wait) {\n uint16_t i, j;\n';
code3 += 'for(j=0; j<256; j++) {\n';
code3 += 'for(i=0; i<rgb_display_02.numPixels(); i++)\n {\n';
code3 += 'rgb_display_02.setPixelColor(i, Wheel((i+j) & 255));\n}\n';
code3 += 'rgb_display_02.show();\n';
//code3 += 'rgb_display_02.show();\n';
//code3 += 'delay(wait);\n';
code3 += '\n}\n}\n';
generator.definitions_[funcName3] = code3;
var code = 'rainbow(' + wait_time + ');\n'
return code;
}
export const MixGo_rgb_rainbow3 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display02'] = 'Adafruit_NeoPixel rgb_display_02= Adafruit_NeoPixel(2,2,NEO_GRB + NEO_KHZ800);';
var rainbow_color = generator.valueToCode(this, 'rainbow_color', generator.ORDER_ATOMIC);
var type = this.getFieldValue('TYPE');
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85)\n {\nreturn rgb_display_02.Color(WheelPos * 3, 255 - WheelPos * 3, 0);} \n';
code2 += 'else if(WheelPos < 170)\n {\nWheelPos -= 85; return rgb_display_02.Color(255 - WheelPos * 3, 0, WheelPos * 3);}\n ';
code2 += 'else {\nWheelPos -= 170;return rgb_display_02.Color(0, WheelPos * 3, 255 - WheelPos * 3);}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
if (type == "normal")
var code3 = 'for (int i = 0; i < rgb_display_02.numPixels(); i++)\n{rgb_display_02.setPixelColor(i, Wheel(' + rainbow_color + ' & 255));\n}\n';
else
var code3 = 'for (int i = 0; i < rgb_display_02.numPixels(); i++)\n {rgb_display_02.setPixelColor(i, Wheel(((i * 256 / rgb_display_02.numPixels()) + ' + rainbow_color + ') & 255));\n}\n';
return code3;
}
export const MixGo_rgb_show = function () {
var code = 'rgb_display_02.show();rgb_display_02.show();\ndelay(1);\n';
return code;
}
export const OneButton = function (_, generator) {
generator.definitions_['include_OneButton'] = '#include <OneButton.h>';
var dropdown_pin = this.getFieldValue('PIN');
var dropdown_mode = this.getFieldValue('mode');
generator.definitions_['var_declare_button' + dropdown_pin] = 'OneButton button' + dropdown_pin + '(' + dropdown_pin + ',false);';
generator.setups_['setup_onebutton_' + dropdown_pin + dropdown_mode] = 'button' + dropdown_pin + '.' + dropdown_mode + '(' + dropdown_mode + dropdown_pin + ');';
var code = 'button' + dropdown_pin + '.tick();';
var funcName = dropdown_mode + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const mixgo_button_is_pressed = function (_, generator) {
var btn = this.getFieldValue('PIN');
generator.setups_['setup_btn' + btn] = 'pinMode(' + btn + ',INPUT);';
var code = 'digitalRead(' + btn + ')';
return [code, generator.ORDER_ATOMIC];
}
export const sensor_button_is_pressed = mixgo_button_is_pressed;
// export const sensor_pin_pressed = sensor_mixgo_pin_pressed;
export const sensor_pin_near = sensor_mixgo_pin_near;

View File

@@ -0,0 +1,153 @@
export const mixepi_inout_touchRead = function (_, generator) {
var touch_pin = this.getFieldValue('touch_pin');
var code = 'touchRead(' + touch_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const mixepi_button_is_pressed = function (_, generator) {
var btn = this.getFieldValue('btn');
generator.setups_['setup_btn' + btn] = 'pinMode(' + btn + ',INPUT);';
var code = '!digitalRead(' + btn + ')';
return [code, generator.ORDER_ATOMIC];
}
export const mixePi_button_is_pressed = function (_, generator) {
var btn = this.getFieldValue('btn');
generator.setups_['setup_btn' + btn] = 'pinMode(' + btn + ',INPUT_PULLUP);';
var code = '!digitalRead(' + btn + ')';
return [code, generator.ORDER_ATOMIC];
}
export const mixepi_light = function (_, generator) {
return ['analogRead(39)', generator.ORDER_ATOMIC];
}
export const mixepi_sound = function (_, generator) {
return ['analogRead(36)', generator.ORDER_ATOMIC];
}
//传感器_重力感应块
export const mixepi_ADXL345_action = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.definitions_['include_I2Cdev'] = '#include <I2Cdev.h>';
generator.definitions_['include_ADXL345'] = '#include <ADXL345.h>';
generator.definitions_['var_declare_ADXL345'] = 'ADXL345 accel;\n';
generator.setups_['setup_accel.begin'] = 'accel.begin();';
generator.setups_['setup_Wire.begin'] = 'Wire.begin();';
var dropdown_type = this.getFieldValue('MIXEPI_ADXL345_ACTION');
var code = dropdown_type;
return [code, generator.ORDER_ATOMIC];
}
export const RGB_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
return [colour, generator.ORDER_NONE];
}
export const RGB_color_rgb = function (_, generator) {
var R = generator.valueToCode(this, 'R', generator.ORDER_ATOMIC);
var G = generator.valueToCode(this, 'G', generator.ORDER_ATOMIC);
var B = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC);
// if(parseInt(R).toString(16).length>1)
// var colour = parseInt(R).toString(16);
// else
// var colour = 0+parseInt(R).toString(16);
// if(parseInt(G).toString(16).length>1)
// colour += parseInt(G).toString(16);
// else
// colour += 0+parseInt(G).toString(16);
// if(parseInt(B).toString(16).length>1)
// colour += parseInt(B).toString(16);
// else
// colour += 0+parseInt(B).toString(16);
// colour="#"+colour;
var colour = R + "*65536" + "+" + G + "*256" + "+" + B;
return [colour, generator.ORDER_NONE];
}
export const mixepi_rgb = function (_, generator) {
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var COLOR = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_RGB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setPixelColor(' + value_led + '-1,' + COLOR + ');\n';
code += 'rgb_display_17.show();\nrgb_display_17.show();\n';
return code;
}
export const mixepi_rgb2 = function (_, generator) {
var COLOR1 = generator.valueToCode(this, 'COLOR1', generator.ORDER_ATOMIC);
var COLOR2 = generator.valueToCode(this, 'COLOR2', generator.ORDER_ATOMIC);
var COLOR3 = generator.valueToCode(this, 'COLOR3', generator.ORDER_ATOMIC);
COLOR1 = COLOR1.replace(/#/g, "0x");
COLOR2 = COLOR2.replace(/#/g, "0x");
COLOR3 = COLOR3.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_RGB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setPixelColor(0,' + COLOR1 + ');\n';
code += 'rgb_display_17.setPixelColor(1,' + COLOR2 + ');\n';
code += 'rgb_display_17.setPixelColor(2,' + COLOR3 + ');\n';
code += 'rgb_display_17.show();\nrgb_display_17.show();\n';
return code;
}
export const mixepi_rgb_Brightness = function (_, generator) {
var Brightness = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_RGB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var code = 'rgb_display_17.setBrightness(' + Brightness + ');\n';
code += 'rgb_display_17.show();\nrgb_display_17.show();\n';
return code;
}
export const mixepi_rgb_rainbow1 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_RGB + NEO_KHZ800);';
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ATOMIC);
generator.setups_['setup_rgb_display_begin_17'] = 'rgb_display_17.begin();';
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85) \n{\nreturn rgb_display_17.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n} \n';
code2 += 'else if(WheelPos < 170) \n{\nWheelPos -= 85; \nreturn rgb_display_17.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n}\n ';
code2 += 'else\n {\nWheelPos -= 170;\nreturn rgb_display_17.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
var funcName3 = 'rainbow';
var code3 = 'void rainbow(uint8_t wait) {\n uint16_t i, j;\n';
code3 += 'for(j=0; j<256; j++) {\n';
code3 += 'for(i=0; i<rgb_display_17.numPixels(); i++)\n {\n';
code3 += 'rgb_display_17.setPixelColor(i, Wheel((i+j) & 255));\n}\n';
code3 += 'rgb_display_17.show();\nrgb_display_17.show();\n';
code3 += 'delay(wait);\n}\n}\n';
generator.definitions_[funcName3] = code3;
var code = 'rainbow(' + wait_time + ');\n'
return code;
}
export const mixepi_rgb_rainbow3 = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display17'] = 'Adafruit_NeoPixel rgb_display_17= Adafruit_NeoPixel(3,17,NEO_RGB + NEO_KHZ800);';
var rainbow_color = generator.valueToCode(this, 'rainbow_color', generator.ORDER_ATOMIC);
var type = this.getFieldValue('TYPE');
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n';
code2 += 'if(WheelPos < 85)\n {\nreturn rgb_display_17.Color(WheelPos * 3, 255 - WheelPos * 3, 0);} \n';
code2 += 'else if(WheelPos < 170)\n {\nWheelPos -= 85; return rgb_display_17.Color(255 - WheelPos * 3, 0, WheelPos * 3);}\n ';
code2 += 'else {\nWheelPos -= 170;return rgb_display_17.Color(0, WheelPos * 3, 255 - WheelPos * 3);}\n';
code2 += '}\n';
generator.definitions_[funcName2] = code2;
if (type == "normal")
var code3 = 'for (int i = 0; i < rgb_display_17.numPixels(); i++)\n{rgb_display_17.setPixelColor(i, Wheel(' + rainbow_color + ' & 255));\n}\n';
else
var code3 = 'for (int i = 0; i < rgb_display_17.numPixels(); i++)\n {rgb_display_17.setPixelColor(i, Wheel(((i * 256 / rgb_display_17.numPixels()) + ' + rainbow_color + ') & 255));\n}\n';
return code3;
}
export const brightness_select = function (_, generator) {
var code = this.getFieldValue('STAT');
return [code, generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,174 @@
import { sensor_sound } from './sensor';
export const mixgo_button_is_pressed = function (_, generator) {
var btn = this.getFieldValue('PIN');
generator.setups_['setup_btn' + btn] = 'pinMode(' + btn + ',INPUT);';
var code = 'digitalRead(' + btn + ')';
return [code, generator.ORDER_ATOMIC];
}
export const sensor_mixgo_sound = sensor_sound;
export const mixgo_touch_pin = function (_, generator) {
var touch_pin = this.getFieldValue('touch_pin');
var code = 'touchRead(' + touch_pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const sensor_mixgo_light = function (_, generator) {
var direction = this.getFieldValue('direction');
var code = 'analogRead(' + direction + ')';
return [code, generator.ORDER_ATOMIC];
}
export const OneButton = function (_, generator) {
generator.definitions_['include_OneButton'] = '#include <OneButton.h>';
var dropdown_pin = this.getFieldValue('PIN');
var dropdown_mode = this.getFieldValue('mode');
generator.definitions_['var_declare_button' + dropdown_pin] = 'OneButton button' + dropdown_pin + '(' + dropdown_pin + ',false);';
generator.setups_['setup_onebutton_' + dropdown_pin + dropdown_mode] = 'button' + dropdown_pin + '.' + dropdown_mode + '(' + dropdown_mode + dropdown_pin + ');';
var code = 'button' + dropdown_pin + '.tick();';
var funcName = dropdown_mode + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const NTC_TEMP = function (_, generator) {
var PIN = 34;
var NominalResistance = 10000;
var betaCoefficient = 3380;
var seriesResistor = 10000;
generator.definitions_['include_thermistor'] = '#include <thermistor.h>';
generator.definitions_['var_declare_thermistor' + PIN] = 'THERMISTOR thermistor' + PIN + '(' + PIN + ',' + NominalResistance + "," + betaCoefficient + "," + seriesResistor + ");";
var code = 'thermistor' + PIN + '.read()/10.0';
return [code, generator.ORDER_ATOMIC];
}
export const controls_tone = function (_, generator) {
generator.definitions_['include_ESP32Tone'] = '#include <ESP32Tone.h>';
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var fre = generator.valueToCode(this, 'FREQUENCY', generator.ORDER_ASSIGNMENT) || '0';
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var DELAY_TIME = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " tone(" + dropdown_pin + ", " + fre + ", " + DELAY_TIME + ", " + channel + ");\n";
return code;
}
export const onboard_tone = function (_, generator) {
generator.definitions_['include_ESP32Tone'] = '#include <ESP32Tone.h>';
var fre = generator.valueToCode(this, 'FREQUENCY', generator.ORDER_ASSIGNMENT) || '0';
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var DELAY_TIME = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " tone(BUZZER, " + fre + ", " + DELAY_TIME + ", " + channel + ");\n";
return code;
}
//传感器_重力感应块_获取9轴数据
export const mixgo_MPU9250 = function (_, generator) {
var dropdown_type = this.getFieldValue('MixGo_MPU9250_GETAB');
generator.definitions_['include_MPU9250_asukiaaa'] = '#include <MPU9250_asukiaaa.h>';
generator.definitions_['define_CALIB_SEC'] = '#define CALIB_SEC 20';
generator.definitions_['var_declare_MPU9250_asukiaaa'] = 'MPU9250_asukiaaa myMPU9250;\n float aX, aY, aZ, aSqrt, gX, gY, gZ, mDirection, mX, mY, mZ;';
generator.setups_['setup_Wire_begin'] = 'Wire.begin(SDA, SCL);\n';
generator.setups_['setup_myMPU9250_setWire'] = 'myMPU9250.setWire(&Wire);';
generator.setups_['setup_myMPU9250_beginAccel'] = 'myMPU9250.beginAccel();';
generator.setups_['setup_myMPU9250_beginMag'] = 'myMPU9250.beginMag();';
generator.setups_['setup_myMPU9250_beginGyro'] = 'myMPU9250.beginGyro();';
var func_setMagMinMaxAndSetOffset = 'void setMagMinMaxAndSetOffset(MPU9250_asukiaaa* sensor, int seconds) {\n'
+ 'unsigned long calibStartAt = millis();\n'
+ 'float magX, magXMin, magXMax, magY, magYMin, magYMax, magZ, magZMin, magZMax;\n'
+ 'sensor->magUpdate();\n'
+ 'magXMin = magXMax = sensor->magX();\n'
+ 'magYMin = magYMax = sensor->magY();\n'
+ 'magZMin = magZMax = sensor->magZ();\n'
+ 'while(millis() - calibStartAt < (unsigned long) seconds * 1000) {\n'
+ ' delay(100);\n'
+ ' sensor->magUpdate();\n'
+ ' magX = sensor->magX();\n'
+ ' magY = sensor->magY();\n'
+ ' magZ = sensor->magZ();\n'
+ ' if (magX > magXMax) magXMax = magX;\n'
+ ' if (magY > magYMax) magYMax = magY;\n'
+ ' if (magZ > magZMax) magZMax = magZ;\n'
+ ' if (magX < magXMin) magXMin = magX;\n'
+ ' if (magY < magYMin) magYMin = magY;\n'
+ ' if (magZ < magZMin) magZMin = magZ;\n'
+ '}\n'
+ 'sensor->magXOffset = - (magXMax + magXMin) / 2;\n'
+ 'sensor->magYOffset = - (magYMax + magYMin) / 2;\n'
+ 'sensor->magZOffset = - (magZMax + magZMin) / 2;\n'
+ '}'
var code = '';
if (dropdown_type == "a") code += 'myMPU9250.accelX()';
if (dropdown_type == "b") code += 'myMPU9250.accelY()';
if (dropdown_type == "c") code += 'myMPU9250.accelZ()';
if (dropdown_type == "d") code += 'myMPU9250.gyroX()';
if (dropdown_type == "e") code += 'myMPU9250.gyroY()';
if (dropdown_type == "f") code += 'myMPU9250.gyroZ()';
if (dropdown_type == "g") code += 'myMPU9250.magX()';
if (dropdown_type == "h") code += 'myMPU9250.magY()';
if (dropdown_type == "i") code += 'myMPU9250.magZ()';
if (dropdown_type == "j" || dropdown_type == "h" || dropdown_type == "g" || dropdown_type == "i") {
generator.setups_['setup_magnetometer'] = 'Serial.println("Start scanning values of magnetometer to get offset values.Rotate your device for " + String(CALIB_SEC) + " seconds.");';
generator.setups_['setup_setMagMinMaxAndSetOffset'] = 'setMagMinMaxAndSetOffset(&myMPU9250, CALIB_SEC);';
generator.setups_['setup_magnetometerFinished'] = ' Serial.println("Finished setting offset values.");';
generator.definitions_[func_setMagMinMaxAndSetOffset] = func_setMagMinMaxAndSetOffset;
code += 'myMPU9250.magHorizDirection()';
}
return [code, generator.ORDER_ATOMIC];
}
//传感器-MPU9250-更新数据
export const MPU9250_update = function () {
var code = 'myMPU9250.accelUpdate();\nmyMPU9250.gyroUpdate();\nmyMPU9250.magUpdate();\n';
return code;
}
export const Pocket_rgb = function (_, generator) {
var COLOR = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display12'] = 'Adafruit_NeoPixel rgb_display_12= Adafruit_NeoPixel(1,12,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_12'] = 'rgb_display_12.begin();';
var code = 'rgb_display_12.setPixelColor(0,' + COLOR + ');\n';
return code;
}
export const Pocket_rgb2 = function (_, generator) {
var COLOR = generator.valueToCode(this, 'COLOR1', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display12'] = 'Adafruit_NeoPixel rgb_display_12= Adafruit_NeoPixel(1,12,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_12'] = 'rgb_display_12.begin();';
var code = 'rgb_display_12.setPixelColor(0,' + COLOR + ');\n';
return code;
}
export const Pocket_rgb_Brightness = function (_, generator) {
var Brightness = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display12'] = 'Adafruit_NeoPixel rgb_display_12= Adafruit_NeoPixel(1,12,NEO_GRB + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_12'] = 'rgb_display_12.begin();';
var code = 'rgb_display_12.setBrightness(' + Brightness + ');\n';
return code;
}
export const Pocket_rgb_show = function () {
var code = 'rgb_display_12.show();\ndelay(1);\n';
return code;
}
export const pocket_RGB_color_HSV = function (_, generator) {
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display12'] = 'Adafruit_NeoPixel rgb_display_12= Adafruit_NeoPixel(1,12,NEO_GRB + NEO_KHZ800);';
var dropdown_rgbpin = 12;
var H = generator.valueToCode(this, 'H', generator.ORDER_ATOMIC);
var S = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC);
var V = generator.valueToCode(this, 'V', generator.ORDER_ATOMIC);
var code = 'rgb_display_' + dropdown_rgbpin + '.setPixelColor(' + '0, ' + 'rgb_display_' + dropdown_rgbpin + '.ColorHSV(' + H + ',' + S + ',' + V + '));\n';
return code;
}

View File

@@ -0,0 +1,165 @@
export const display_rgb_show = function () {
var dropdown_rgbpin = this.getFieldValue('PIN');
var code = 'rgb_display_' + dropdown_rgbpin + '.show();\n'
// +'rgb_display_' + dropdown_rgbpin + '.show();\n'
//+"delay(1);"
return code;
}
export const servo_move = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '0'
generator.definitions_['include_ESP32_Servo'] = '#include <ESP32_Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ',500,2500);';
var code = 'servo_' + dropdown_pin + '.write(' + value_degree + ');\n' + 'delay(' + delay_time + ');\n';
return code;
}
export const servo_writeMicroseconds = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
generator.definitions_['include_ESP32_Servo'] = '#include <ESP32_Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.writeMicroseconds(' + value_degree + ');\n';
return code;
}
export const servo_read_degrees = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
generator.definitions_['include_ESP32_Servo'] = '#include <ESP32_Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.read()';
return [code, generator.ORDER_ATOMIC];
}
export const controls_tone = function (_, generator) {
generator.definitions_['include_ESP32Tone'] = '#include <ESP32Tone.h>';
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var fre = generator.valueToCode(this, 'FREQUENCY', generator.ORDER_ASSIGNMENT) || '0';
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var DELAY_TIME = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " tone(" + dropdown_pin + ", " + fre + ", " + DELAY_TIME + ", " + channel + ");\n";
return code;
}
export const controls_notone = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " noTone(" + dropdown_pin + ", " + channel + ");\n";
return code;
}
export const onboard_tone = function (_, generator) {
generator.definitions_['include_ESP32Tone'] = '#include <ESP32Tone.h>';
var fre = generator.valueToCode(this, 'FREQUENCY', generator.ORDER_ASSIGNMENT) || '0';
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var DELAY_TIME = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " tone(BUZZER, " + fre + ", " + DELAY_TIME + ", " + channel + ");\n";
return code;
}
export const onboard_notone = function (_, generator) {
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var code = "";
code = " noTone(BUZZER, " + channel + ");\n";
return code;
}
// 执行器-电机转动
export const Mixly_motor = function (_, generator) {
var SPEED_PIN = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var DIR_PIN = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT) || '0';
var code = 'setMotor(' + SPEED_PIN + ', ' + DIR_PIN + ', ' + speed + ');\n';
generator.definitions_['include_Arduino'] = '#include <generator.h>';
generator.setups_['setup_output_' + SPEED_PIN + DIR_PIN + '_S'] = 'pinMode(' + SPEED_PIN + ', OUTPUT);';
generator.setups_['setup_output_' + SPEED_PIN + DIR_PIN + '_D'] = 'pinMode(' + DIR_PIN + ', OUTPUT);';
generator.setups_['setup_output_' + SPEED_PIN + DIR_PIN + '_S_W'] = 'digitalWrite(' + SPEED_PIN + ', LOW);';
generator.setups_['setup_output_' + SPEED_PIN + DIR_PIN + '_D_W'] = 'digitalWrite(' + DIR_PIN + ', LOW);';
var funcName = 'setMotor';
var code2 = 'void ' + funcName + '(int speedpin,int dirpin, int speed)\n '
+ '{\n'
+ ' if (speed == 0)\n'
+ ' {\n'
+ ' digitalWrite(dirpin, LOW);\n'
+ ' analogWrite(speedpin, 0);\n'
+ ' } \n'
+ ' else if (speed > 0)\n'
+ ' {\n'
+ ' digitalWrite(dirpin, LOW);\n'
+ ' analogWrite(speedpin, speed);\n'
+ ' }\n'
+ ' else\n'
+ ' {\n'
+ ' if(speed < -255)\n'
+ ' speed = -255;\n'
+ ' digitalWrite(dirpin, HIGH);\n'
+ ' analogWrite(speedpin, 255 + speed);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const motor_id = function (_, generator) {
var code = this.getFieldValue('CHANNEL');
return [code, generator.ORDER_ATOMIC];
}
export const HR8833_Motor_Setup = function (_, generator) {
var motor_id = generator.valueToCode(this, 'MOTOR_ID', generator.ORDER_ATOMIC);
var pin1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var pin2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
generator.definitions_['HR8833_Motor_Setup_fun'] = 'void HR8833_Motor_Setup(int motorID,int pin1,int pin2){//电机初始化 ID=1~4 定义四组电机\n'
+ ' ledcSetup(motorID*2-2, 5000, 8);\n'
+ ' ledcAttachPin(pin1, motorID*2-2);\n'
+ ' ledcSetup(motorID*2-1, 5000, 8);\n'
+ ' ledcAttachPin(pin2, motorID*2-1);\n'
+ '}';
generator.setups_['motorID_' + motor_id] = 'HR8833_Motor_Setup(' + motor_id + ',' + pin1 + ',' + pin2 + ');';
var code = '';
return code;
}
export const HR8833_Motor_Speed = function (_, generator) {
var motor_id = generator.valueToCode(this, 'MOTOR_ID', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'SPEED', generator.ORDER_ATOMIC);
generator.definitions_['HR8833_Motor_Speed_fun'] = 'void HR8833_Motor_Speed(int motorID,int speed){//电机速度设置 ID=1~4,speed=-255~255\n'
+ ' if (speed == 0){ \n'
+ ' ledcWrite(motorID*2-2, 0);\n'
+ ' ledcWrite(motorID*2-1, 0);\n'
+ ' }\n'
+ ' else if (speed > 0){\n'
+ ' ledcWrite(motorID*2-2, speed);\n'
+ ' ledcWrite(motorID*2-1, 0);\n'
+ ' }\n'
+ ' else{\n'
+ ' ledcWrite(motorID*2-2, 0);\n'
+ ' ledcWrite(motorID*2-1, -speed);\n'
+ ' }\n'
+ '}\n';
var code = 'HR8833_Motor_Speed(' + motor_id + ',' + speed + ');\n';
return code;
}
export const handbit_motor_move = function (_, generator) {
var dropdown_type = this.getFieldValue('type');
var value_speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_i2c_23_22'] = 'Wire.begin(23, 22);';
generator.definitions_['HandBit_Motor_Speed_fun'] = 'void HandBit_Motor_Speed(int pin, int speed){//电机速度设置 pin=1~2,speed=--100~100\n'
+ ' Wire.beginTransmission(0x10);\n'
+ ' Wire.write(pin);\n'
+ ' Wire.write(speed);\n'
+ ' Wire.endTransmission();\n'
+ '}';
var code = 'HandBit_Motor_Speed(' + dropdown_type + ', ' + value_speed + ');\n';
return code;
}

View File

@@ -0,0 +1,38 @@
import { Profile } from 'mixly';
export const spi_transfer = function (_, generator) {
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.setups_['setup_spi'] = 'SPI.begin();';
var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);
generator.setups_['setup_output_' + pin] = 'pinMode(' + pin + ', OUTPUT);';
var code = "digitalWrite(" + pin + ", LOW);\n";
code += "SPI.transfer(" + value + ");\n";
code += "digitalWrite(" + pin + ", HIGH);\n";
return code;
}
export const serialBT_Init = function (_, generator) {
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || Profile.default.serial;
generator.definitions_['include_BluetoothSerial'] = '#include "BluetoothSerial.h"';
generator.definitions_['var_declare_BluetoothSerial'] = 'BluetoothSerial SerialBT;';
generator.setups_['setup_serial_BT'] = 'SerialBT.begin(' + content + ');';
generator.setups_['setup_serial_started'] = 'Serial.println("The device started, now you can pair it with bluetooth!");';
return '';
}
export const serialBT_available = function (_, generator) {
var code = "SerialBT.available() > 0";
return [code, generator.ORDER_ATOMIC];
}
export const serialBT_read = function (_, generator) {
var code = 'SerialBT.read()';
return [code, generator.ORDER_ATOMIC];
}
export const serialBT_write = function (_, generator) {
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""';
var code = 'SerialBT.write(' + content + ');\n';
return code;
}

View File

@@ -0,0 +1,67 @@
import { controls_delay } from '@mixly/arduino-avr/generators/control';
export const controls_runnig_core = function (_, generator) {
var task = this.getFieldValue('task');
var core = this.getFieldValue('core');
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
var branch = generator.statementToCode(this, 'setup');
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
var branch1 = generator.statementToCode(this, 'loop');
branch1 = branch1.replace(/(^\s*)|(\s*$)/g, "");
generator.definitions_['esp32_task_' + task] = 'void task_' + task + '( void * pvParameters ){\nfor(;;){\n ' + branch1 + '\n vTaskDelay(1);\n}\n}\n';
generator.setups_['setups_esp32_task_' + task] = '' + branch + '\n xTaskCreatePinnedToCore(task_' + task + ', "task_' + task + '", ' + value_length + ', NULL, 2, NULL, ' + core + ');\n';
return 'vTaskDelay(1);\n';
}
export const control_core_delay = function (_, generator) {
var value_sleeplength = generator.valueToCode(this, 'sleeplength', generator.ORDER_ATOMIC);
var code = 'vTaskDelay(' + value_sleeplength + ');\n'
return code;
}
export const controls_hw_timer = function (_, generator) {
var time = generator.valueToCode(this, 'TIME', generator.ORDER_ATOMIC);
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
var mode = this.getFieldValue('mode');
generator.definitions_['hw_timer_t' + TIMER_NUM] = 'hw_timer_t * timer' + TIMER_NUM + ' =NULL;';
var funcName = 'IRAM_ATTR onTimer' + TIMER_NUM;
var branch = generator.statementToCode(this, 'DO');
var code = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
if (!isNaN(parseInt(time))) {
generator.setups_begin_['setup_hw_timer' + funcName] = 'timer' + TIMER_NUM + '=timerBegin(' + TIMER_NUM + ', 80, true);\n timerAttachInterrupt(timer' + TIMER_NUM + ', &onTimer' + TIMER_NUM + ', true);\n timerAlarmWrite(timer' + TIMER_NUM + ', ' + time * 1000 + ', ' + mode + ');';
} else {
generator.setups_begin_['setup_hw_timer' + funcName] = 'timer' + TIMER_NUM + '=timerBegin(' + TIMER_NUM + ', 80, true);\n timerAttachInterrupt(timer' + TIMER_NUM + ', &onTimer' + TIMER_NUM + ', true);\n timerAlarmWrite(timer' + TIMER_NUM + ', ' + time + ', ' + mode + ');';
}
generator.definitions_[funcName] = code;
return '';
}
export const controls_hw_timer_start = function () {
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
return 'timerAlarmEnable(timer' + TIMER_NUM + ');\n';
}
export const controls_hw_timer_stop = function () {
var TIMER_NUM = this.getFieldValue('TIMER_NUM');
return 'timerEnd(timer' + TIMER_NUM + ');\n';
}
export const controls_end_program = function () {
return 'while(true);\n';
}
export const controls_interrupts = function () {
return 'interrupts();\n';
}
export const controls_nointerrupts = function () {
return 'noInterrupts();\n';
}
export const esp32_deep_sleep = function () {
var time = this.getFieldValue('time');
var code = 'esp_sleep_enable_timer_wakeup(' + time + ' * 1000000);\nesp_deep_sleep_start();\n';
return code;
}
export const base_delay = controls_delay;

View File

@@ -0,0 +1,119 @@
export const WIFI_info = function (_, generator) {
var SSID = generator.valueToCode(this, 'SSID', generator.ORDER_ATOMIC);
var PWD = generator.valueToCode(this, 'PWD', generator.ORDER_ATOMIC);
generator.definitions_['include_WiFi'] = '#include <WiFi.h>';
generator.setups_['setup_WiFi_begin'] = 'WiFi.begin(' + SSID + ', ' + PWD + ');\n'
+ ' while (WiFi.status() != WL_CONNECTED) {\n'
+ ' delay(500);\n'
+ ' Serial.print(".");\n'
+ ' }\n'
+ ' Serial.println("Local IP:");\n'
+ ' Serial.print(WiFi.localIP());\n'
return "";
}
// esp_now发送数据
export const esp_now_send = function (_, generator) {
var mac = generator.valueToCode(this, 'mac', generator.ORDER_ATOMIC);
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
var branch = generator.statementToCode(this, 'success');
//branch = branch.replace(/(^\s*)|(\s*$)/g, "");
var branch1 = generator.statementToCode(this, 'failure');
//branch1 = branch1.replace(/(^\s*)|(\s*$)/g, "");
mac = mac.replaceAll('"', '');
mac = mac.toUpperCase();
const macList = mac.split(':');
mac = macList.join(', 0x');
mac = '0x' + mac;
generator.definitions_['include_ESP8266WiFi'] = '#include <WiFi.h>';
generator.definitions_['include_WifiEspNow'] = '#include <WifiEspNow.h>';
const macName = macList.join('');
generator.definitions_['var_declare_PEER_' + macName] = 'uint8_t PEER_' + macName + '[] = {' + mac + '};\n';
generator.definitions_['function_sendMessage'] = 'bool sendMessage(uint8_t *macAddress, String _data) {\n'
+ ' bool ok = WifiEspNow.addPeer(macAddress, 0, nullptr, WIFI_IF_STA);\n'
+ ' if (!ok) return false;\n'
+ ' uint16_t length = _data.length();\n'
+ ' char _msg[length];\n'
+ ' strcpy(_msg, _data.c_str());\n'
+ ' return WifiEspNow.send(macAddress, reinterpret_cast<const uint8_t*>(_msg), length);\n'
+ '}\n';
generator.setups_['setup_esp_now'] = `
WiFi.mode(WIFI_STA);
Serial.print("当前设备MAC:");
Serial.println(WiFi.macAddress());
bool ok = WifiEspNow.begin();
if (!ok) {
Serial.println("WifiEspNow初始化失败");
ESP.restart();
}`;
var code = `if (sendMessage(PEER_${macName}, ${data})) {\n`
+ branch
+ '} else {\n'
+ branch1
+ '}\n';
return code;
}
// esp_now接收数据
export const esp_now_receive = function (_, generator) {
var branch = generator.statementToCode(this, 'receive_data');
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
generator.definitions_['include_ESP8266WiFi'] = '#include <WiFi.h>';
generator.definitions_['include_WifiEspNow'] = '#include <WifiEspNow.h>';
generator.definitions_['function_onMessageRecv'] = 'void OnMessageRecv(const uint8_t _mac[WIFIESPNOW_ALEN], const uint8_t* _buf, size_t _count, void* arg) {\n'
+ ' // Serial.printf("从MAC:%02X:%02X:%02X:%02X:%02X:%02X处收到数据\\n", _mac[0], _mac[1], _mac[2], _mac[3], _mac[4], _mac[5]);\n'
+ ' String myData = "";\n'
+ ' for (int i = 0; i < static_cast<int>(_count); i++) {\n'
+ ' myData += String(static_cast<char>(_buf[i]));\n'
+ ' }\n'
+ ' ' + branch + '\n'
+ '}\n';
generator.setups_['setup_esp_now_message_receive_cb'] = 'WifiEspNow.onReceive(OnMessageRecv, nullptr);';
generator.setups_['setup_esp_now'] = `
WiFi.mode(WIFI_STA);
Serial.print("当前设备MAC:");
Serial.println(WiFi.macAddress());
bool ok = WifiEspNow.begin();
if (!ok) {
Serial.println("WifiEspNow初始化失败");
ESP.restart();
}`;
var code = '';
return code;
}
export const esp32_wifi_connection_event = function (_, generator) {
var type = this.getFieldValue('type');
var branch = generator.statementToCode(this, 'event');
branch = branch.replace(/(^\s*)|(\s*$)/g, "");
generator.definitions_['include_WiFi'] = '#include <WiFi.h>';
if (type == 1) {
generator.definitions_['function_WiFiStationConnected'] = 'void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){\n'
+ ' ' + branch + '\n'
+ '}\n';
generator.setups_['esp32_wifi_WiFiStationConnected'] = 'WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);';
}
if (type == 2) {
generator.definitions_['function_WiFiGotIP'] = 'void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){\n'
+ ' ' + branch + '\n'
+ '}\n';
generator.setups_['esp32_wifi_WiFiGotIP'] = 'WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);';
}
if (type == 3) {
generator.definitions_['function_WiFiStationDisconnected'] = 'void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){\n'
+ ' ' + branch + '\n'
+ '}\n';
generator.setups_['esp32_wifi_WiFiStationDisconnected'] = 'WiFi.onEvent(WiFiStationDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);';
}
var code = '';
return code;
}

View File

@@ -0,0 +1,107 @@
import { Profile } from 'mixly';
export const inout_touchRead = function (_, generator) {
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = 'touchRead(' + pin + ')';
return [code, generator.ORDER_ATOMIC];
}
export const ledcSetup = function (_, generator) {
var FREQ = generator.valueToCode(this, 'FREQ', generator.ORDER_ATOMIC);
var RESOLUTION = generator.valueToCode(this, 'PWM_RESOLUTION', generator.ORDER_ATOMIC) || '8';
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
generator.setups_['ledcSetup' + channel + FREQ + RESOLUTION] = 'ledcSetup(' + channel + ', ' + FREQ + ', ' + RESOLUTION + ');\n';
return "";
}
export const ledcAttachPin = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
var code = 'ledcAttachPin(' + dropdown_pin + ', ' + channel + ');\n';
return code;
}
export const ledcDetachPin = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = 'ledcDetachPin(' + dropdown_pin + ');\n';
return code;
}
export const ledcWrite = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
generator.definitions_['include_Arduino'] = '#include <generator.h>';
const { analog } = Profile.default;
if (typeof analog === 'object') {
for (let i of analog)
if (dropdown_pin === i[1]) {
generator.setups_['setup_output' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
break;
}
}
var code = 'analogWrite(' + dropdown_pin + ', ' + value_num + ');\n';
return code;
}
export const inout_pwm_analog_write = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var FREQ = generator.valueToCode(this, 'FREQ', generator.ORDER_ATOMIC);
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
var RESOLUTION = this.getFieldValue('RESOLUTION');
var channel = generator.valueToCode(this, 'CHANNEL', generator.ORDER_ASSIGNMENT) || '0';
generator.setups_['ledcSetup' + channel + FREQ + RESOLUTION] = 'ledcSetup(' + channel + ', ' + FREQ + ', ' + RESOLUTION + ');\n';
generator.setups_['ledcAttachPin' + dropdown_pin + channel] = 'ledcAttachPin(' + dropdown_pin + ', ' + channel + ');\n ';
var code = 'ledcWrite(' + channel + ', ' + value_num + ');\n';
return code;
}
export const controls_attachInterrupt = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var dropdown_mode = this.getFieldValue('mode');
// generator.definitions_['pin_interrupt'] = '#include <generator.h>';
generator.setups_['setup_input_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', INPUT_PULLUP);';
var code = 'attachInterrupt' + '(' + dropdown_pin + ',' + 'attachInterrupt_fun_' + dropdown_pin + ',' + dropdown_mode + ');\n'
var funcName = 'attachInterrupt_fun_' + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const controls_detachInterrupt = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
generator.setups_['setup_input_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', INPUT);';
var code = 'detachInterrupt' + '(' + dropdown_pin + ');\n'
return code;
}
export const touchAttachInterrupt = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var threshold = generator.valueToCode(this, 'threshold', generator.ORDER_ATOMIC);
generator.setups_['touchAttachInterrupt' + dropdown_pin] = 'touchAttachInterrupt(' + dropdown_pin + ',gotTouch' + dropdown_pin + ', ' + threshold + ');';
var code = '';
var funcName = 'gotTouch' + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
export const inout_esp32_dac = function (_, generator) {
var PIN = this.getFieldValue('PIN');
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);
var code = 'dacWrite(' + PIN + ', ' + value + ');\n';
return code;
}
export const esp32_led_pwm = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
var resolution = this.getFieldValue('resolution');
var freq = this.getFieldValue('freq');
var ledChannel = this.getFieldValue('ledChannel');
generator.setups_['ledChannel' + ledChannel] = 'ledcSetup(' + ledChannel + ', ' + freq + ', ' + resolution + ');';
generator.setups_['ledChannel' + dropdown_pin] = 'ledcAttachPin(' + dropdown_pin + ', ' + ledChannel + ');';
var code = 'ledcWrite(' + ledChannel + ', ' + val + ');\n';
return code;
}

View File

@@ -0,0 +1,36 @@
export const pins_digital = function (_, generator) {
var code = this.getFieldValue('PIN');
return [code, generator.ORDER_ATOMIC];
};
export const pins_button = pins_digital;
export const pins_analog = pins_digital;
export const pins_pwm = pins_digital;
export const pins_dac = pins_digital;
export const pins_touch = pins_digital;
export const pins_interrupt = pins_digital;
export const pins_serial = pins_digital;
export const pins_builtinimg = pins_digital;
export const pins_imglist = pins_digital;
export const pins_playlist = pins_digital;
export const pins_axis = pins_digital;
export const pins_exlcdh = pins_digital;
export const pins_exlcdv = pins_digital;
export const pins_brightness = pins_digital;
export const pins_tone_notes = pins_digital;
export const pins_radio_power = pins_digital;
export const pins_radio_datarate = pins_digital;
export const pins_one_more = pins_digital;
//export const serial_select = pins_digital;
export const pins_MOSI = pins_digital;
export const pins_MISO = pins_digital;
export const pins_SCK = pins_digital;
export const pins_scl = pins_digital;
export const pins_sda = pins_digital;
export const brightness = pins_digital;
export const pins_tx = pins_digital;
export const CHANNEL = pins_digital;
export const PWM_RESOLUTION = pins_digital;
export const OCTAVE = pins_digital;
export const TONE_NOTE = pins_digital;
export const pins_digitalWrite = pins_digital;

View File

@@ -0,0 +1,76 @@
export const chaoshengbo = function (_, generator) {
var dropdown_pin1 = this.getFieldValue('PIN1');
var dropdown_pin2 = this.getFieldValue('PIN2');
generator.setups_['setup_output_' + dropdown_pin1] = 'pinMode(' + dropdown_pin1 + ', OUTPUT);';
generator.setups_['setup_output_' + dropdown_pin2] = 'pinMode(' + dropdown_pin2 + ', INPUT);';
var funcName = 'checkdistance_' + dropdown_pin1 + '_' + dropdown_pin2;
var code = 'float' + ' ' + funcName + '() {\n'
+ ' digitalWrite(' + dropdown_pin1 + ', LOW);\n' + ' delayMicroseconds(2);\n'
+ ' digitalWrite(' + dropdown_pin1 + ', HIGH);\n' + ' delayMicroseconds(10);\n'
+ ' digitalWrite(' + dropdown_pin1 + ', LOW);\n'
+ ' float distance = pulseIn(' + dropdown_pin2 + ', HIGH) / 58.00;\n'
+ ' delay(10);\n' + ' return distance;\n'
+ '}\n';
generator.definitions_[funcName] = code;
return [funcName + '()', generator.ORDER_ATOMIC];
}
export const DHT = function (_, generator) {
var sensor_type = this.getFieldValue('TYPE');
var dropdown_pin = this.getFieldValue('PIN');
var what = this.getFieldValue('WHAT');
generator.definitions_['include_DHT'] = '#include <DHT.h>';
//generator.definitions_['define_dht_pin' + dropdown_pin] = '#define DHTPIN'+dropdown_pin +' ' + dropdown_pin ;
//generator.definitions_['define_dht_type' + dropdown_pin] = '#define DHTTYPE'+dropdown_pin +' '+ sensor_type ;
generator.definitions_['var_declare_dht' + dropdown_pin] = 'DHT dht' + dropdown_pin + '(' + dropdown_pin + ', ' + sensor_type + ');'
generator.setups_['DHT_SETUP' + dropdown_pin] = ' dht' + dropdown_pin + '.begin();';
var code;
if (what == "temperature")
code = 'dht' + dropdown_pin + '.readTemperature()'
else
code = 'dht' + dropdown_pin + '.readHumidity()'
return [code, generator.ORDER_ATOMIC];
}
//ESP32片内霍尔传感器值
export const ESP32_hallRead = function (_, generator) {
var code = 'hallRead()';
return [code, generator.ORDER_ATOMIC];
}
//ESP32片内温度传感器值
export const ESP32_temprature = function (_, generator) {
generator.definitions_['wendu'] = 'extern "C"\n{\nuint8_t temprature_sens_read();\n}\nuint8_t temprature_sens_read();\n';
var code = '(temprature_sens_read() - 32) / 1.8';
return [code, generator.ORDER_ATOMIC];
}
export const sensor_light = function (_, generator) {
return ['analogRead(LIGHT)', generator.ORDER_ATOMIC];
}
export const sensor_sound = function (_, generator) {
return ['analogRead(SOUND)', generator.ORDER_ATOMIC];
}
export const ESP_TCS34725_Get_RGB = function (_, generator) {
generator.definitions_['include_Adafruit_TCS34725'] = '#include <Adafruit_TCS34725.h>';
generator.definitions_['var_declare_TCS34725'] = 'Adafruit_TCS34725 tcs34725 = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_24MS, TCS34725_GAIN_1X);\n';
generator.definitions_['function_TCS34725_getRGB'] = 'uint16_t getRGB(char _type) {\n'
+ ' uint16_t _red, _green, _blue, _c;\n'
+ ' tcs34725.getRawData(&_red, &_green, &_blue, &_c);\n'
+ ' switch (_type) {\n'
+ ' case \'r\':\n'
+ ' return _red;\n'
+ ' case \'g\':\n'
+ ' return _green;\n'
+ ' case \'b\':\n'
+ ' return _blue;\n'
+ ' default:\n'
+ ' return _c;\n'
+ ' }\n'
+ '}\n';
generator.setups_['setup_Adafruit_TCS34725'] = 'tcs34725.begin(0x29);';
const RGB = this.getFieldValue('TCS34725_COLOR');
return ['getRGB(\'' + RGB + '\')', generator.ORDER_ATOMIC];
}

View File

@@ -0,0 +1,10 @@
export const serial_HardwareSerial = function (_, generator) {
var serial_select = this.getFieldValue('serial_select');
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
//var serial_no=serial_select.charAt(serial_select.length 1);
generator.definitions_['include_HardwareSerial'] = '#include <HardwareSerial.h>';
var RX = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
var TX = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
generator.setups_['setup_serial_' + serial_select] = '' + serial_select + '.begin(' + content + ',SERIAL_8N1,' + RX + ',' + TX + ');';
return '';
};

View File

@@ -0,0 +1,92 @@
// HSC025A 蓝牙MP3指令
export const hsc025a_instruction = function (_, generator) {
var instruction = this.getFieldValue('instruction');
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
var code = "";
if (instruction == 1) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x00);\n Serial.write(0xEF);\n';
}
if (instruction == 2) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x01);\n Serial.write(0xEF);\n';
}
if (instruction == 3) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x02);\n Serial.write(0xEF);\n';
}
if (instruction == 4) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x03);\n Serial.write(0xEF);\n';
}
if (instruction == 5) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x04);\n Serial.write(0xEF);\n';
}
if (instruction == 6) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x05);\n Serial.write(0xEF);\n';
}
if (instruction == 7) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x06);\n Serial.write(0xEF);\n';
}
if (instruction == 8) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x07);\n Serial.write(0xEF);\n';
}
if (instruction == 9) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x08);\n Serial.write(0xEF);\n';
}
if (instruction == 10) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x09);\n Serial.write(0xEF);\n';
}
if (instruction == 11) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x0A);\n Serial.write(0xEF);\n';
}
if (instruction == 12) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x0D);\n Serial.write(0x00);\n Serial.write(0xEF);\n';
}
if (instruction == 13) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x0D);\n Serial.write(0x02);\n Serial.write(0xEF);\n';
}
if (instruction == 14) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x0D);\n Serial.write(0x04);\n Serial.write(0xEF);\n';
}
if (instruction == 15) {
code = ' Serial.write(0x7E);\n Serial.write(0x02);\n Serial.write(0x17);\n Serial.write(0xEF);\n';
}
if (instruction == 16) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x46);\n Serial.write(0x01);\n Serial.write(0xEF);\n';
}
if (instruction == 17) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x51);\n Serial.write(0x00);\n Serial.write(0xEF);\n';
}
if (instruction == 18) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x51);\n Serial.write(0x0B);\n Serial.write(0xEF);\n';
}
if (instruction == 19) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x51);\n Serial.write(0x0C);\n Serial.write(0xEF);\n';
}
if (instruction == 20) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x51);\n Serial.write(0x45);\n Serial.write(0xEF);\n';
}
if (instruction == 21) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x51);\n Serial.write(0x44);\n Serial.write(0xEF);\n';
}
if (instruction == 22) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x15);\n Serial.write(0x00);\n Serial.write(0xEF);\n';
}
if (instruction == 23) {
code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x15);\n Serial.write(0x01);\n Serial.write(0xEF);\n';
}
return code;
}
// 指定播放歌曲
export const hsc025a_play = function (_, generator) {
var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
var code = ' Serial.write(0x7E);\n Serial.write(0x04);\n Serial.write(0x40);\n Serial.write(0x00);\n Serial.write(' + num + ');\n Serial.write(0xEF);\n';
return code;
}
// 音量设置
export const hsc025a_volume = function (_, generator) {
var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
var code = ' Serial.write(0x7E);\n Serial.write(0x03);\n Serial.write(0x0F);\n Serial.write(' + num + ');\n Serial.write(0xEF);\n';
return code;
}

View File

@@ -0,0 +1,155 @@
// 初始化SPIFFS
export const initialize_spiffs = function (_, generator) {
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File myFile;\n';
generator.setups_['setup_SPIFFS.begin'] = 'SPIFFS.begin(true);';
var code = '';
return code;
}
// 打开文件
export const spiffs_open_file = function (_, generator) {
var file_var = this.getFieldValue('file_var');
var file_path = this.getFieldValue('file_path');
file_path = '"' + file_path + '"';
var mode = this.getFieldValue('MODE');
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
return file_var + '= SPIFFS.open(String(' + file_path + '), ' + mode + ');\n';
}
export const spiffs_close_file = function (_, generator) {
var file_var = this.getFieldValue('file_var');
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
return file_var + '.close();\n';
}
// 将数据追加到文件
export const spiffs_write_data = function (_, generator) {
var file_var = this.getFieldValue('file_var');
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
return file_var + '.print(String(' + data + '));\n';
}
// 文件可读
export const spiffs_read_available = function (_, generator) {
var file_var = this.getFieldValue('file_var');
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
var code = file_var + '.available()';
return [code, generator.ORDER_ATOMIC];
}
// 读取文件内容
export const spiffs_read_data = function (_, generator) {
var file_var = this.getFieldValue('file_var');
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
var code = file_var + '.read()';
return [code, generator.ORDER_ATOMIC];
}
// 检查文件大小
export const spiffs_file_size = function (_, generator) {
var file_var = this.getFieldValue('file_var');
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
generator.definitions_['esp32_spiffs'] = 'File ' + file_var + ';\n';
var code = file_var + '.size()';
return [code, generator.ORDER_ATOMIC];
}
// 删除文件
export const spiffs_delete_file = function (_, generator) {
generator.definitions_['include_FS'] = '#include "FS.h"';
generator.definitions_['include_SPIFFS'] = '#include "SPIFFS.h"';
var file_path = this.getFieldValue('file_path');
file_path = '"' + file_path + '"';
return 'SPIFFS.remove(String(' + file_path + '));';
}
export const store_eeprom_write_long = function (_, generator) {
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
generator.setups_['setup_EEPROM.begin'] = 'EEPROM.begin(512);';
var funcName = 'eepromWriteLong';
var code2 = 'void ' + funcName + '(int address, unsigned long value) {\n'
+ ' union u_tag {\n'
+ ' byte b[4];\n'
+ ' unsigned long ULtime;\n'
+ ' }\n'
+ ' time;\n'
+ ' time.ULtime=value;\n'
+ ' EEPROM.write(address, time.b[0]);\n'
+ ' EEPROM.write(address+1, time.b[1]);\n'
+ ' if (time.b[2] != EEPROM.read(address+2) ) EEPROM.write(address+2, time.b[2]);\n'
+ ' if (time.b[3] != EEPROM.read(address+3) ) EEPROM.write(address+3, time.b[3]);\n'
+ ' EEPROM.commit();\n'
+ '}\n';
generator.definitions_[funcName] = code2;
return 'eepromWriteLong(' + address + ', ' + data + ');\n';
}
export const store_eeprom_read_long = function (_, generator) {
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
generator.setups_['setup_EEPROM.begin'] = 'EEPROM.begin(512);';
var code = 'eepromReadLong(' + address + ')';
var funcName = 'eepromReadLong';
var code2 = 'unsigned long ' + funcName + '(int address) {\n'
+ ' union u_tag {\n'
+ ' byte b[4];\n'
+ ' unsigned long ULtime;\n'
+ ' }\n'
+ ' time;\n'
+ ' time.b[0] = EEPROM.read(address);\n'
+ ' time.b[1] = EEPROM.read(address+1);\n'
+ ' time.b[2] = EEPROM.read(address+2);\n'
+ ' time.b[3] = EEPROM.read(address+3);\n'
+ ' return time.ULtime;\n'
+ '}\n';
generator.definitions_[funcName] = code2;
return [code, generator.ORDER_ATOMIC];
}
export const store_eeprom_write_byte = function (_, generator) {
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
generator.setups_['setup_EEPROM.begin'] = 'EEPROM.begin(512);';
return 'EEPROM.write(' + address + ', ' + data + ');\nEEPROM.commit();\n';
}
export const store_eeprom_read_byte = function (_, generator) {
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
generator.setups_['setup_EEPROM.begin'] = 'EEPROM.begin(512);';
var code = 'EEPROM.read(' + address + ')';
return [code, generator.ORDER_ATOMIC];
}
export const store_eeprom_put = function (_, generator) {
generator.setups_['setup_EEPROM_begin'] = 'EEPROM.begin(4000);';
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
return 'EEPROM.put(' + address + ', ' + data + ');\nEEPROM.commit();';
}
export const store_eeprom_get = function (_, generator) {
generator.setups_['setup_EEPROM_begin'] = 'EEPROM.begin(4000);';
var address = generator.valueToCode(this, 'ADDRESS', generator.ORDER_ATOMIC) || '0';
var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_EEPROM'] = '#include <EEPROM.h>';
return 'EEPROM.get(' + address + ', ' + data + ');\n';
}

View File

@@ -0,0 +1,190 @@
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
import {
ArduinoEthernetBlocks,
ArduinoTextBlocks,
ArduinoEthernetGenerators,
ArduinoTextGenerators,
Procedures,
Variables,
Arduino
} from '@mixly/arduino';
import {
ArduinoAVRActuatorBlocks,
ArduinoAVRBlynkBlocks,
ArduinoAVRCommunicateBlocks,
ArduinoAVRControlBlocks,
ArduinoAVRDisplayBlocks,
ArduinoAVREthernetBlocks,
ArduinoAVRFactoryBlocks,
ArduinoAVRInoutBlocks,
ArduinoAVRListsBlocks,
ArduinoAVRLogicBlocks,
ArduinoAVRMathBlocks,
ArduinoAVRPinsBlocks,
ArduinoAVRProceduresBlocks,
ArduinoAVRSensorBlocks,
ArduinoAVRSerialBlocks,
ArduinoAVRStorageBlocks,
ArduinoAVRTextBlocks,
ArduinoAVRToolsBlocks,
ArduinoAVRVariablesBlocks,
ArduinoAVRActuatorGenerators,
ArduinoAVRBlynkGenerators,
ArduinoAVRCommunicateGenerators,
ArduinoAVRControlGenerators,
ArduinoAVRDisplayGenerators,
ArduinoAVREthernetGenerators,
ArduinoAVRFactoryGenerators,
ArduinoAVRInoutGenerators,
ArduinoAVRListsGenerators,
ArduinoAVRLogicGenerators,
ArduinoAVRMathGenerators,
ArduinoAVRPinsGenerators,
ArduinoAVRProceduresGenerators,
ArduinoAVRSensorGenerators,
ArduinoAVRSerialGenerators,
ArduinoAVRStorageGenerators,
ArduinoAVRTextGenerators,
ArduinoAVRToolsGenerators,
ArduinoAVRVariablesGenerators
} from '@mixly/arduino-avr';
import {
ArduinoESP32Pins,
ArduinoESP32ActuatorBlocks,
ArduinoESP32CommunicateBlocks,
ArduinoESP32ControlBlocks,
ArduinoESP32EthernetBlocks,
ArduinoESP32HandbitBlocks,
ArduinoESP32InoutBlocks,
ArduinoESP32MixePiBlocks,
ArduinoESP32MixGoBlocks,
ArduinoESP32PinsBlocks,
ArduinoESP32PocketCardBlocks,
ArduinoESP32SensorBlocks,
ArduinoESP32SerialBlocks,
ArduinoESP32SidanBlocks,
ArduinoESP32StorageBlocks,
ArduinoESP32ToolsBlocks,
ArduinoESP32ActuatorGenerators,
ArduinoESP32CommunicateGenerators,
ArduinoESP32ControlGenerators,
ArduinoESP32EthernetGenerators,
ArduinoESP32HandbitGenerators,
ArduinoESP32InoutGenerators,
ArduinoESP32MixePiGenerators,
ArduinoESP32MixGoGenerators,
ArduinoESP32PinsGenerators,
ArduinoESP32PocketCardGenerators,
ArduinoESP32SensorGenerators,
ArduinoESP32SerialGenerators,
ArduinoESP32SidanGenerators,
ArduinoESP32StorageGenerators,
ArduinoESP32ToolsGenerators,
ArduinoESP32ZhHans,
ArduinoESP32ZhHant,
ArduinoESP32En
} from './';
import addBoardFSItem from './mixly-modules/loader';
import './css/color_esp32_arduino.css';
Blockly.Arduino = Arduino;
Blockly.generator = Arduino;
Object.assign(Blockly.Variables, Variables);
Object.assign(Blockly.Procedures, Procedures);
Profile.default = {};
Object.assign(Profile, ArduinoESP32Pins);
Object.assign(Profile.default, ArduinoESP32Pins.arduino_esp32);
Object.assign(Blockly.Lang.ZhHans, ArduinoESP32ZhHans);
Object.assign(Blockly.Lang.ZhHant, ArduinoESP32ZhHant);
Object.assign(Blockly.Lang.En, ArduinoESP32En);
addBoardFSItem();
Object.assign(
Blockly.Blocks,
ArduinoEthernetBlocks,
ArduinoTextBlocks,
ArduinoAVRActuatorBlocks,
ArduinoAVRBlynkBlocks,
ArduinoAVRCommunicateBlocks,
ArduinoAVRControlBlocks,
ArduinoAVRDisplayBlocks,
ArduinoAVREthernetBlocks,
ArduinoAVRFactoryBlocks,
ArduinoAVRInoutBlocks,
ArduinoAVRListsBlocks,
ArduinoAVRLogicBlocks,
ArduinoAVRMathBlocks,
ArduinoAVRPinsBlocks,
ArduinoAVRProceduresBlocks,
ArduinoAVRSensorBlocks,
ArduinoAVRSerialBlocks,
ArduinoAVRStorageBlocks,
ArduinoAVRTextBlocks,
ArduinoAVRToolsBlocks,
ArduinoAVRVariablesBlocks,
ArduinoESP32ActuatorBlocks,
ArduinoESP32CommunicateBlocks,
ArduinoESP32ControlBlocks,
ArduinoESP32EthernetBlocks,
ArduinoESP32HandbitBlocks,
ArduinoESP32InoutBlocks,
ArduinoESP32MixePiBlocks,
ArduinoESP32MixGoBlocks,
ArduinoESP32PinsBlocks,
ArduinoESP32PocketCardBlocks,
ArduinoESP32SensorBlocks,
ArduinoESP32SerialBlocks,
ArduinoESP32SidanBlocks,
ArduinoESP32StorageBlocks,
ArduinoESP32ToolsBlocks
);
Object.assign(
Blockly.Arduino.forBlock,
ArduinoEthernetGenerators,
ArduinoTextGenerators,
ArduinoAVRActuatorGenerators,
ArduinoAVRBlynkGenerators,
ArduinoAVRCommunicateGenerators,
ArduinoAVRControlGenerators,
ArduinoAVRDisplayGenerators,
ArduinoAVREthernetGenerators,
ArduinoAVRFactoryGenerators,
ArduinoAVRInoutGenerators,
ArduinoAVRListsGenerators,
ArduinoAVRLogicGenerators,
ArduinoAVRMathGenerators,
ArduinoAVRPinsGenerators,
ArduinoAVRProceduresGenerators,
ArduinoAVRSensorGenerators,
ArduinoAVRSerialGenerators,
ArduinoAVRStorageGenerators,
ArduinoAVRTextGenerators,
ArduinoAVRToolsGenerators,
ArduinoAVRVariablesGenerators,
ArduinoESP32ActuatorGenerators,
ArduinoESP32CommunicateGenerators,
ArduinoESP32ControlGenerators,
ArduinoESP32EthernetGenerators,
ArduinoESP32HandbitGenerators,
ArduinoESP32InoutGenerators,
ArduinoESP32MixePiGenerators,
ArduinoESP32MixGoGenerators,
ArduinoESP32PinsGenerators,
ArduinoESP32PocketCardGenerators,
ArduinoESP32SensorGenerators,
ArduinoESP32SerialGenerators,
ArduinoESP32SidanGenerators,
ArduinoESP32StorageGenerators,
ArduinoESP32ToolsGenerators
);

View File

@@ -0,0 +1,123 @@
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const En = {};
const { XML } = Mixly;
En.ESP32_CONFIG_TEMPLATE = TEMPLATE;
En.ESP32_CONFIG_INTRODUCE = 'For more information, please visit';
En.ESP32_CONFIG_MESSAGE_PSRAM = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'PSRAM',
message: 'The PSRAM is an internal or external extended RAM present on some boards, modules or SoC.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#psram',
name: 'PSRAM'
});
En.ESP32_CONFIG_MESSAGE_PARTITION_SCHEME = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Partition Scheme',
message: 'This option is used to select the partition model according to the flash size and the resources needed, like storage area and OTA (Over The Air updates). Be careful selecting the right partition according to the flash size. If you select the wrong partition, the system will crash.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Partition Scheme'
});
En.ESP32_CONFIG_MESSAGE_CPU_FREQUENCY = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'CPU Frequency',
message: 'On this option, you can select the CPU clock frequency. This option is critical and must be selected according to the high-frequency crystal present on the board and the radio usage (Wi-Fi and Bluetooth). In some applications, reducing the CPU clock frequency is recommended in order to reduce power consumption. If you dont know why you should change this frequency, leave the default option.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#cpu-frequency',
name: 'CPU Frequency'
});
En.ESP32_CONFIG_MESSAGE_FLASH_MODE = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Flash Mode',
message: 'This option is used to select the SPI communication mode with the flash memory. Depending on the application, this mode can be changed in order to increase the flash communication speed.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-mode',
name: 'Flash Mode'
});
En.ESP32_CONFIG_MESSAGE_FLASH_FREQUENCY = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Flash Frequency',
message: 'Use this function to select the flash memory frequency. The frequency will be dependent on the memory model.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Flash Frequency'
});
En.ESP32_CONFIG_MESSAGE_FLASH_SIZE = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Flash Size',
message: 'This option is used to select the flash size. The flash size should be selected according to the flash model used on your board. If you choose the wrong size, you may have issues when selecting the partition scheme.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-size',
name: 'Flash Size'
});
En.ESP32_CONFIG_MESSAGE_UPLOAD_SPEED = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Upload Speed',
message: 'To select the flashing speed, change the Upload Speed. This value will be used for flashing the code to the device. If you have issues while flashing the device at high speed, try to decrease this value. This could be due to the external serial-to-USB chip limitations.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#upload-speed',
name: 'Upload Speed'
});
En.ESP32_CONFIG_MESSAGE_ARDUINO_RUNS_ON = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Arduino Runs On',
message: 'This function is used to select the core that runs the Arduino core. This is only valid if the target SoC has 2 cores. When you have some heavy task running, you might want to run this task on a different core than the Arduino tasks. For this reason, you have this configuration to select the right core.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#arduino-runs-on',
name: 'Arduino Runs On'
});
En.ESP32_CONFIG_MESSAGE_EVENTS_RUN_ON = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Events Run On',
message: 'This function is also used to select the core that runs the Arduino events. This is only valid if the target SoC has 2 cores.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#events-run-on',
name: 'Events Run On'
});
En.ESP32_CONFIG_MESSAGE_USB_CDC_ON_BOOT = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'USB CDC On Boot',
message: 'The USB Communications Device Class, or USB CDC, is a class used for basic communication to be used as a regular serial controller (like RS-232). This class is used for flashing the device without any other external device attached to the SoC. This option can be used to Enable or Disable this function at the boot. If this option is Enabled, once the device is connected via USB, one new serial port will appear in the list of the serial ports. Use this new serial port for flashing the device.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-cdc-on-boot',
name: 'USB CDC On Boot'
});
En.ESP32_CONFIG_MESSAGE_USB_FIRMWARE_MSC_ON_BOOT = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'USB Firmware MSC On Boot',
message: 'The USB Mass Storage Class, or USB MSC, is a class used for storage devices, like a USB flash drive. This option can be used to Enable or Disable this function at the boot. If this option is Enabled, once the device is connected via USB, one new storage device will appear in the system as a storage drive. Use this new storage drive to write and read files or to drop a new firmware binary to flash the device.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-firmware-msc-on-boot',
name: 'USB Firmware MSC On Boot'
});
En.ESP32_CONFIG_MESSAGE_USB_DFU_ON_BOOT = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'USB DFU On Boot',
message: 'The USB Device Firmware Upgrade is a class used for flashing the device through USB. This option can be used to Enable or Disable this function at the boot. If this option is Enabled, once the device is connected via USB, the device will appear as a USB DFU capable device.',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-dfu-on-boot',
name: 'USB DFU On Boot'
});
En.ESP32_CONFIG_MESSAGE_UPLOAD_MODE = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'Upload Mode',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: '#',
name: 'None'
});
En.ESP32_CONFIG_MESSAGE_USB_MODE = XML.render(En.ESP32_CONFIG_TEMPLATE, {
title: 'USB Mode',
moreInfo: En.ESP32_CONFIG_INTRODUCE,
href: '#',
name: 'None'
});
En.BOARD_FS = 'Board FS';
export default En;

View File

@@ -0,0 +1,123 @@
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const ZhHans = {};
const { XML } = Mixly;
ZhHans.ESP32_CONFIG_TEMPLATE = TEMPLATE;
ZhHans.ESP32_CONFIG_INTRODUCE = '详细介绍请参考';
ZhHans.ESP32_CONFIG_MESSAGE_PSRAM = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'PSRAM',
message: 'PSRAM是存在于某些板、模块或SoC上的内部或外部扩展RAM。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#psram',
name: 'PSRAM'
});
ZhHans.ESP32_CONFIG_MESSAGE_PARTITION_SCHEME = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '分区方案',
message: '此选项用于根据闪存大小和所需资源如存储区域和OTA空中更新选择分区方案。请注意根据闪存大小选择正确的分区如果你选择了错误的分区系统将崩溃。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Partition Scheme'
});
ZhHans.ESP32_CONFIG_MESSAGE_CPU_FREQUENCY = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'CPU时钟频率',
message: '在此选项上你可以选择CPU时钟频率。此选项至关重要必须根据板上的晶振和无线模块使用情况Wi-Fi和蓝牙进行选择。在某些应用中建议降低CPU时钟频率以降低功耗。如果你不知道为什么要更改此频率请保留默认选项。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#cpu-frequency',
name: 'CPU Frequency'
});
ZhHans.ESP32_CONFIG_MESSAGE_FLASH_MODE = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '烧录方式',
message: '此选项用于选择与闪存的SPI通信模式。根据应用程序的不同可以更改此模式以提高闪存通信速度。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-mode',
name: 'Flash Mode'
});
ZhHans.ESP32_CONFIG_MESSAGE_FLASH_FREQUENCY = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '闪存频率',
message: '使用此功能可选择闪存频率。频率取决于内存型号如果你不知道内存是否支持80Mhz你可以尝试使用80Mhz选项上传草图并通过串行监视器查看日志输出。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Flash Frequency'
});
ZhHans.ESP32_CONFIG_MESSAGE_FLASH_SIZE = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '闪存大小',
message: '此选项用于选择闪存大小。应该根据你板上使用的闪存型号来确定闪存大小,如果你选择了错误的大小,则在选择分区方案时可能会出现问题。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-size',
name: 'Flash Size'
});
ZhHans.ESP32_CONFIG_MESSAGE_UPLOAD_SPEED = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '上传速度',
message: '要选择上传速度请更改“上载速度”此值将用于向设备烧录代码。如果在用较高的上传速度时出现问题请尝试减小此值这可能是由于外部串行到USB芯片的限制。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#upload-speed',
name: 'Upload Speed'
});
ZhHans.ESP32_CONFIG_MESSAGE_ARDUINO_RUNS_ON = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'Arduino循环核心',
message: '此选项用于选择运行Arduino核心任务的内核。只有当目标SoC有2个核心时才有效。当你有一些繁重的任务在运行时你可能想在与Arduino任务不同的核心上运行此任务。出于这个原因你可以使用此配置来选择正确的核心。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#arduino-runs-on',
name: 'Arduino Runs On'
});
ZhHans.ESP32_CONFIG_MESSAGE_EVENTS_RUN_ON = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'Arduino事件核心',
message: '此选项用于选择运行Arduino事件的核心这仅在目标SoC具有2个核心的情况下有效。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#events-run-on',
name: 'Events Run On'
});
ZhHans.ESP32_CONFIG_MESSAGE_USB_CDC_ON_BOOT = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'USB CDC On Boot',
message: 'USB通信设备类或USB CDC是一个用于基本通信的类被用作常规串行控制器。该类用于在没有任何其他外部设备连接到SoC的情况下烧写设备。该选项可用于在启动时启用或禁用该功能。如果此选项为E启用则一旦设备通过USB连接一个新的串行端口将出现在串行端口列表中使用这个新的串行端口来烧写设备。这个选项也可以用于使用CDC而不是UART0通过串行监视器进行调试。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-cdc-on-boot',
name: 'USB CDC On Boot'
});
ZhHans.ESP32_CONFIG_MESSAGE_USB_FIRMWARE_MSC_ON_BOOT = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'USB Firmware MSC On Boot',
message: 'USB大容量存储类或USB MSC是用于存储设备如USB闪存驱动器的类此选项可用于在启动时启用或禁用此功能。如果此选项为启用则一旦设备通过USB连接系统中将显示一个新的存储设备作为存储驱动器。使用这个新的存储驱动器来写入和读取文件或者拖拽新的二进制固件来烧写设备。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-firmware-msc-on-boot',
name: 'USB Firmware MSC On Boot'
});
ZhHans.ESP32_CONFIG_MESSAGE_USB_DFU_ON_BOOT = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'USB DFU On Boot',
message: 'USB设备固件升级是一个用于通过USB烧写设备的类此选项可用于在启动时启用或禁用此功能。如果此选项为启用则一旦设备通过USB连接该设备将显示为支持USB DFU的设备。',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-dfu-on-boot',
name: 'USB DFU On Boot'
});
ZhHans.ESP32_CONFIG_MESSAGE_UPLOAD_MODE = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: '上传方式',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: '#',
name: '无'
});
ZhHans.ESP32_CONFIG_MESSAGE_USB_MODE = XML.render(ZhHans.ESP32_CONFIG_TEMPLATE, {
title: 'USB模式',
moreInfo: ZhHans.ESP32_CONFIG_INTRODUCE,
href: '#',
name: '无'
});
ZhHans.BOARD_FS = '板卡文件管理';
export default ZhHans;

View File

@@ -0,0 +1,123 @@
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const ZhHant = {};
const { XML } = Mixly;
ZhHant.ESP32_CONFIG_TEMPLATE = TEMPLATE;
ZhHant.ESP32_CONFIG_INTRODUCE = '詳細介紹請參攷';
ZhHant.ESP32_CONFIG_MESSAGE_PSRAM = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'PSRAM',
message: 'PSRAM是存在於某些板、模塊或SoC上的內部或外部擴展RAM。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#psram',
name: 'PSRAM'
});
ZhHant.ESP32_CONFIG_MESSAGE_PARTITION_SCHEME = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '分區方案',
message: '此選項用於根據閃存大小和所需資源如存儲區域和OTA空中更新選擇分區方案。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Partition Scheme'
});
ZhHant.ESP32_CONFIG_MESSAGE_CPU_FREQUENCY = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'CPU時鐘頻率',
message: '在此選項上你可以選擇CPU時鐘頻率。 此選項至關重要必須根據板上的晶振和無線模塊使用情况Wi-Fi和藍牙進行選擇。 在某些應用中建議降低CPU時鐘頻率以降低功耗。 如果你不知道為什麼要更改此頻率,請保留默認選項。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#cpu-frequency',
name: 'CPU Frequency'
});
ZhHant.ESP32_CONFIG_MESSAGE_FLASH_MODE = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '燒錄管道',
message: '此選項用於選擇與閃存的SPI通信模式。 根據應用程序的不同,可以更改此模式以提高閃存通信速度。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-mode',
name: 'Flash Mode'
});
ZhHant.ESP32_CONFIG_MESSAGE_FLASH_FREQUENCY = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '閃存頻率',
message: '使用此功能可選擇閃存頻率。 頻率取決於記憶體型號如果你不知道記憶體是否支持80Mhz你可以嘗試使用80Mhz選項上傳草圖並通過串列監視器查看日誌輸出。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#partition-scheme',
name: 'Flash Frequency'
});
ZhHant.ESP32_CONFIG_MESSAGE_FLASH_SIZE = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '閃存大小',
message: '此選項用於選擇閃存大小。 應該根據你板上使用的閃存型號來確定閃存大小,如果你選擇了錯誤的大小,則在選擇分區方案時可能會出現問題。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#flash-size',
name: 'Flash Size'
});
ZhHant.ESP32_CONFIG_MESSAGE_UPLOAD_SPEED = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '上傳速度',
message: '要選擇上傳速度,請更改“上載速度”,此值將用於向設備燒錄程式碼。 如果在用較高的上傳速度時出現問題請嘗試减小此值這可能是由於外部串列到USB晶片的限制。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#upload-speed',
name: 'Upload Speed'
});
ZhHant.ESP32_CONFIG_MESSAGE_ARDUINO_RUNS_ON = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'Arduino迴圈覈心',
message: '此選項用於選擇運行Arduino覈心任務的內核。 只有當目標SoC有2個覈心時才有效。 當你有一些繁重的任務在運行時你可能想在與Arduino任務不同的覈心上運行此任務。 出於這個原因,你可以使用此配寘來選擇正確的覈心。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#arduino-runs-on',
name: 'Arduino Runs On'
});
ZhHant.ESP32_CONFIG_MESSAGE_EVENTS_RUN_ON = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'Arduino事件覈心',
message: '此選項用於選擇運行Arduino事件的覈心這僅在目標SoC具有2個覈心的情况下有效。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#events-run-on',
name: 'Events Run On'
});
ZhHant.ESP32_CONFIG_MESSAGE_USB_CDC_ON_BOOT = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'USB CDC On Boot',
message: 'USB通信設備類或USB CDC是一個用於基本通信的類被用作常規串列控制器。 該類用於在沒有任何其他外部設備連接到SoC的情况下燒寫設備。 該選項可用於在啟動時啟用或禁用該功能。 如果此選項為E啟用則一旦設備通過USB連接一個新的串列埠將出現在串列埠清單中使用這個新的串列埠來燒寫設備。 這個選項也可以用於使用CDC而不是UART0通過串列監視器進行調試。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-cdc-on-boot',
name: 'USB CDC On Boot'
});
ZhHant.ESP32_CONFIG_MESSAGE_USB_FIRMWARE_MSC_ON_BOOT = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'USB Firmware MSC On Boot',
message: 'USB大容量存儲類或USB MSC是用於儲存設備如USB閃存驅動器的類此選項可用於在啟動時啟用或禁用此功能。 如果此選項為啟用則一旦設備通過USB連接系統中將顯示一個新的儲存設備作為存儲驅動器。 使用這個新的存儲驅動器來寫入和讀取檔案,或者拖拽新的二進位固件來燒寫設備。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-firmware-msc-on-boot',
name: 'USB Firmware MSC On Boot'
});
ZhHant.ESP32_CONFIG_MESSAGE_USB_DFU_ON_BOOT = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'USB DFU On Boot',
message: 'USB設備固件升級是一個用於通過USB燒寫設備的類此選項可用於在啟動時啟用或禁用此功能。 如果此選項為啟用則一旦設備通過USB連接該設備將顯示為支持USB DFU的設備。',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: 'https://docs.espressif.com/projects/arduino-esp32/en/latest/guides/tools_menu.html#usb-dfu-on-boot',
name: 'USB DFU On Boot'
});
ZhHant.ESP32_CONFIG_MESSAGE_UPLOAD_MODE = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: '上传方式',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: '#',
name: '無'
});
ZhHant.ESP32_CONFIG_MESSAGE_USB_MODE = XML.render(ZhHant.ESP32_CONFIG_TEMPLATE, {
title: 'USB模式',
moreInfo: ZhHant.ESP32_CONFIG_INTRODUCE,
href: '#',
name: '無'
});
ZhHant.BOARD_FS = '闆卡文件管理';
export default ZhHant;

View File

@@ -0,0 +1,673 @@
export default {
'esp32:esp32:esp32c3': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:esp32s2': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:esp32': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB',
'rainmaker'
],
'esp32:esp32:esp32wrover': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash'
],
'esp32:esp32:pico32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32wroverkit': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash'
],
'esp32:esp32:tinypico': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:feathers2': [
'fatflash',
'app3M_fat9M_16MB',
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:tinys2': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:S_ODI_Ultra': [
'default'
],
'esp32:esp32:micros2': [
'fatflash',
'app3M_fat9M_16MB',
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:magicbit': [
'default'
],
'esp32:esp32:turta_iot_node': [
'default'
],
'esp32:esp32:ttgo-lora32-v1': [
'default'
],
'esp32:esp32:ttgo-t1': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:ttgo-t7-v13-mini32': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:ttgo-t7-v14-mini32': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:cw02': [
'default'
],
'esp32:esp32:esp32thing': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32thing_plus': [
'default',
'large_spiffs'
],
'esp32:esp32:sparkfun_esp32s2_thing_plus': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:sparkfun_lora_gateway_1-channel': [
'default',
'minimal',
'no_ota',
'min_spiffs'
],
'esp32:esp32:nina_w10': [
'minimal'
],
'esp32:esp32:widora-air': [
'default'
],
'esp32:esp32:esp320': [
'default'
],
'esp32:esp32:nano32': [
'default'
],
'esp32:esp32:d32': [
'default',
'minimal',
'no_ota',
'min_spiffs'
],
'esp32:esp32:d32_pro': [
'default',
'minimal',
'no_ota',
'min_spiffs'
],
'esp32:esp32:lolin32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:lolin32-lite': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:pocket_32': [
'default'
],
'esp32:esp32:WeMosBat': [
'default'
],
'esp32:esp32:espea32': [
'default'
],
'esp32:esp32:quantum': [
'default'
],
'esp32:esp32:node32s': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:hornbill32dev': [
'default'
],
'esp32:esp32:hornbill32minima': [
'default'
],
'esp32:esp32:firebeetle32': [
'default'
],
'esp32:esp32:intorobot-fig': [
'default'
],
'esp32:esp32:onehorse32dev': [
'default'
],
'esp32:esp32:featheresp32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:adafruit_metro_esp32s2': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:adafruit_magtag29_esp32s2': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:adafruit_funhouse_esp32s2': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:adafruit_feather_esp32s2_nopsram': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:nodemcu-32s': [
'default'
],
'esp32:esp32:mhetesp32devkit': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:mhetesp32minikit': [
'default',
'defaultffat',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32vn-iot-uno': [
'default'
],
'esp32:esp32:esp32doit-devkit-v1': [
'default'
],
'esp32:esp32:esp32doit-espduino': [
'default'
],
'esp32:esp32:esp32-evb': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32-gateway': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32-poe': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32-poe-iso': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32-DevKitLipo': [
'default',
'minimal',
'no_ota',
'huge_app',
'min_spiffs',
'fatflash'
],
'esp32:esp32:espino32': [
'default'
],
'esp32:esp32:m5stack-core-esp32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:m5stack-fire': [
'default',
'large_spiffs'
],
'esp32:esp32:m5stick-c': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:m5stack-atom': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:m5stack-core2': [
'default',
'large_spiffs',
'minimal',
'no_ota',
'noota_3g',
'huge_app',
'min_spiffs'
],
'esp32:esp32:m5stack-timer-cam': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:m5stack-coreink': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:odroid_esp32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:heltec_wifi_kit_32': [
'default'
],
'esp32:esp32:heltec_wifi_lora_32': [
'default'
],
'esp32:esp32:heltec_wifi_lora_32_V2': [
'default_8MB'
],
'esp32:esp32:heltec_wireless_stick': [
'default_8MB'
],
'esp32:esp32:heltec_wireless_stick_lite': [
'default'
],
'esp32:esp32:espectro32': [
'default'
],
'esp32:esp32:CoreESP32': [
'default',
'minimal',
'no_ota',
'min_spiffs',
'fatflash'
],
'esp32:esp32:alksesp32': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash'
],
'esp32:esp32:wipy3': [
'default'
],
'esp32:esp32:bpi-bit': [
'default'
],
'esp32:esp32:wesp32': [
'default'
],
'esp32:esp32:t-beam': [
'default'
],
'esp32:esp32:d-duino-32': [
'default',
'minimal',
'no_ota',
'min_spiffs',
'fatflash'
],
'esp32:esp32:lopy': [
'default'
],
'esp32:esp32:lopy4': [
'default'
],
'esp32:esp32:oroca_edubot': [
'huge_app',
'min_spiffs'
],
'esp32:esp32:fm-devkit': [
'default'
],
'esp32:esp32:frogboard': [
'default',
'minimal',
'no_ota',
'min_spiffs'
],
'esp32:esp32:esp32cam': [
'huge_app'
],
'esp32:esp32:twatch': [
'default',
'large_spiffs'
],
'esp32:esp32:d1_mini32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:gpy': [
'default'
],
'esp32:esp32:vintlabs-devkit-v1': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:honeylemon': [
'default'
],
'esp32:esp32:mgbot-iotik32a': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:mgbot-iotik32b': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:piranha_esp-32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:metro_esp-32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:sensesiot_weizen': [
'default'
],
'esp32:esp32:kits-edu': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:mPython': [
'huge_app',
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'min_spiffs',
'fatflash'
],
'esp32:esp32:OpenKB': [
'default'
],
'esp32:esp32:wifiduino32': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:ttgo-lora32-v21new': [
'default'
],
'esp32:esp32:imbrios-logsens-v1p1': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:healthypi4': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:ET-Board': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:ch_denky': [
'default',
'no_ota',
'min_spiffs'
],
'esp32:esp32:uPesy_wrover': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:uPesy_wroom': [
'default',
'defaultffat',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs'
],
'esp32:esp32:kb32': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash',
'app3M_fat9M_16MB'
],
'esp32:esp32:deneyapkart': [
'default',
'defaultffat',
'default_8MB',
'minimal',
'no_ota',
'noota_3g',
'noota_ffat',
'noota_3gffat',
'huge_app',
'min_spiffs',
'fatflash'
],
'esp32:esp32:esp32-trueverit-iot-driver': [
'default'
],
'esp32:esp32:esp32-trueverit-iot-driver-mkii': [
'default'
]
}
;

View File

@@ -0,0 +1,14 @@
export default {
littlefs: {
download: "{{&esptool}} --port {{&port}} --baud {{&baud}} read_flash {{&offset}} {{&size}} {{&img}} && {{&fsTool}} -u {{&usrFolder}} -b {{&blockSize}} -p {{&pageSize}} -s {{&size}} {{&img}}",
upload: "{{&fsTool}} -c {{&usrFolder}} -b {{&blockSize}} -p {{&pageSize}} -s {{&size}} {{&img}} && {{&esptool}} --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
},
spiffs: {
download: "{{&esptool}} --port {{&port}} --baud {{&baud}} read_flash {{&offset}} {{&size}} {{&img}} && {{&fsTool}} -u {{&usrFolder}} -b {{&blockSize}} -p {{&pageSize}} -s {{&size}} {{&img}}",
upload: "{{&fsTool}} -c {{&usrFolder}} -b {{&blockSize}} -p {{&pageSize}} -s {{&size}} {{&img}} && {{&esptool}} --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
},
fatfs: {
download: "{{&esptool}} --port {{&port}} --baud {{&baud}} read_flash {{&offset}} {{&size}} {{&img}} && {{&fsTool}} -u {{&usrFolder}} -t fatfs -s {{&size}} {{&img}}",
upload: "{{&fsTool}} -c {{&usrFolder}} -t fatfs -s {{&size}} {{&img}} && {{&esptool}} --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
}
};

View File

@@ -0,0 +1,91 @@
import { Env, Boards, FSBoardHandler } from 'mixly';
import * as path from 'path';
import COMMANDS from './commands';
import PARTITIONS from './partitions';
import BOARDS_PARTITIONS_INFO from './boards-partitions-info';
import MENU from './menu';
import FS_INFO from './fs-info';
export default class FSArduEsp32Handler extends FSBoardHandler {
constructor() {
super();
for (let key in COMMANDS) {
this.setFSCommands(key, COMMANDS[key]);
}
}
onBeforeUpload() {
const boardKey = Boards.getSelectedBoardKey();
const flashMode = Boards.getSelectedBoardConfigParam('FlashMode') || 'keep';
let flashFreq = Boards.getSelectedBoardConfigParam('FlashFreq') || 'keep';
if (flashFreq !== 'keep') {
flashFreq += 'm';
}
let flashSize = Boards.getSelectedBoardConfigParam('FlashSize') || 'detect';
if (flashSize !== 'detect') {
flashSize += 'B';
}
const baud = Boards.getSelectedBoardConfigParam('UploadSpeed') || '115200';
let partitionScheme = Boards.getSelectedBoardConfigParam('PartitionScheme');
let partitionsType = BOARDS_PARTITIONS_INFO[boardKey] ?? [];
if (!partitionsType.includes(partitionScheme)) {
if (partitionsType.length) {
partitionScheme = partitionsType[0];
} else {
partitionScheme = 'default';
}
}
const partition = { ...PARTITIONS[partitionScheme] };
if (this.getFSType() === 'default') {
this.setFSType(partition.type);
}
const fsTool = this.getFSToolPath();
const img = path.join(Env.boardDirPath, 'build', 'script.img');
this.updateConfig({ fsTool, img, flashMode, flashFreq, flashSize, baud, ...partition });
}
onBeforeDownload() {
const boardKey = Boards.getSelectedBoardKey();
const baud = Boards.getSelectedBoardConfigParam('UploadSpeed') || '115200';
let partitionScheme = Boards.getSelectedBoardConfigParam('PartitionScheme');
let partitionsType = BOARDS_PARTITIONS_INFO[boardKey] ?? [];
if (!partitionsType.includes(partitionScheme)) {
if (partitionsType.length) {
partitionScheme = partitionsType[0];
} else {
partitionScheme = 'default';
}
}
const partition = { ...PARTITIONS[partitionScheme] };
if (this.getFSType() === 'default') {
this.setFSType(partition.type);
}
const fsTool = this.getFSToolPath();
const img = path.join(Env.boardDirPath, 'build', 'script.img');
this.updateConfig({ fsTool, img, baud, ...partition });
}
getFSMenu() {
return MENU;
}
getFSToolPath() {
const fsType = this.getFSType();
let arch = 'x64';
switch (process.arch) {
case 'arm64':
case 'arm':
arch = 'arm';
break;
case 'ia32':
arch = 'x32';
break;
case 'x64':
default:
arch = 'x64';
}
const platform = Env.currentPlatform;
const fsToolInfo = FS_INFO[`mk${fsType}`];
return path.join(Env.boardDirPath, 'build/tools', fsToolInfo[platform][arch]);
}
}

View File

@@ -0,0 +1,50 @@
export default {
"mkspiffs": {
"version": "0.2.3",
"linux": {
"x32": "./mkspiffs/linux/mkspiffs-x32.bin",
"x64": "./mkspiffs/linux/mkspiffs-x64.bin",
"arm": "./mkspiffs/linux/mkspiffs-arm.bin"
},
"darwin": {
"x64": "./mkspiffs/darwin/mkspiffs.bin",
"arm": "./mkspiffs/darwin/mkspiffs.bin"
},
"win32": {
"x32": "./mkspiffs/win32/mkspiffs.exe",
"x64": "./mkspiffs/win32/mkspiffs.exe"
}
},
"mklittlefs": {
"version": "3.2.0",
"linux": {
"x32": "./mklittlefs/linux/mklittlefs-x64.bin",
"x64": "./mklittlefs/linux/mklittlefs-x64.bin",
"arm": "./mklittlefs/linux/mklittlefs-arm.bin"
},
"darwin": {
"x64": "./mklittlefs/darwin/mklittlefs.bin",
"arm": "./mklittlefs/darwin/mklittlefs.bin"
},
"win32": {
"x32": "./mklittlefs/win32/mklittlefs-x32.exe",
"x64": "./mklittlefs/win32/mklittlefs-x64.exe"
}
},
"mkfatfs": {
"version": "2.0.1",
"linux": {
"x32": "./mkfatfs/linux/mkfatfs-x64.bin",
"x64": "./mkfatfs/linux/mkfatfs-x64.bin",
"arm": "./mkfatfs/linux/mkfatfs-arm.bin"
},
"darwin": {
"x64": "./mkfatfs/darwin/mkfatfs.bin",
"arm": "./mkfatfs/darwin/mkfatfs.bin"
},
"win32": {
"x32": "./mkfatfs/win32/mkfatfs.exe",
"x64": "./mkfatfs/win32/mkfatfs.exe"
}
}
};

View File

@@ -0,0 +1,29 @@
import { Workspace, ContextMenu } from 'mixly';
import FSArduEsp32Handler from './fs-board-handler';
import { Msg } from 'blockly/core';
export default function addBoardFSItem () {
const mainWorkspace = Workspace.getMain();
const statusBarsManager = mainWorkspace.getStatusBarsManager();
const dropdownMenu = statusBarsManager.getDropdownMenu();
const menu = dropdownMenu.getItem('menu');
menu.add({
weight: 2,
type: 'sep1',
data: '---------'
});
menu.add({
weight: 3,
type: 'filesystem-tool',
data: {
isHtmlName: true,
name: ContextMenu.getItem(Msg.BOARD_FS, ''),
callback: () => {
statusBarsManager.add('board-fs', 'board-fs', Msg.BOARD_FS, Msg.BOARD_FS);
statusBarsManager.changeTo('board-fs');
const fsStatusBar = statusBarsManager.getStatusBarById('board-fs');
fsStatusBar.setHandler(new FSArduEsp32Handler());
}
}
});
}

View File

@@ -0,0 +1,15 @@
export default [
{
id: 'default',
text: 'default'
}, {
id: 'spiffs',
text: 'spiffs'
}, {
id: 'fatfs',
text: 'fatfs'
}, {
id: 'littlefs',
text: 'littlefs'
}
];

View File

@@ -0,0 +1,107 @@
import { FSBoardHandler } from 'mixly';
export default {
'app3M_fat9M_16MB': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x610000,
size: 0x9F0000,
blockSize: 4096,
pageSize: 256
},
'default': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x290000,
size: 0x160000,
blockSize: 4096,
pageSize: 256
},
'default_8MB': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x670000,
size: 0x190000,
blockSize: 4096,
pageSize: 256
},
'default_16MB': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0xc90000,
size: 0x370000,
blockSize: 4096,
pageSize: 256
},
'defaultffat': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x290000 + 4096,
size: 0x160000 - 4096,
blockSize: 4096,
pageSize: 256
},
'ffat': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x410000 + 4096,
size: 0xBF0000,
blockSize: 4096,
pageSize: 256
},
'huge_app': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x310000,
size: 0xF0000,
blockSize: 4096,
pageSize: 256
},
'large_spiffs_16MB': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x910000,
size: 0x6F0000,
blockSize: 4096,
pageSize: 256
},
'min_spiffs': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x3D0000,
size: 0x30000,
blockSize: 4096,
pageSize: 256
},
'minimal': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x150000,
size: 0xB0000
},
'no_ota': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x210000,
size: 0x1F0000,
blockSize: 4096,
pageSize: 256
},
'noota_3g': {
type: FSBoardHandler.FsType.SPIFFS,
offset: 0x110000,
size: 0x2F0000,
blockSize: 4096,
pageSize: 256
},
'noota_3gffat': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x110000,
size: 0x2F0000,
blockSize: 4096,
pageSize: 256
},
'noota_ffat': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x210000,
size: 0x1F0000,
blockSize: 4096,
pageSize: 256
},
'rainmaker': {
type: FSBoardHandler.FsType.FATFS,
offset: 0x290000,
size: 0x160000,
blockSize: 4096,
pageSize: 256
}
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
{
"board": "./boards.json",
"language": "C/C++",
"burn": "None",
"upload": {
"portSelect": "all"
},
"nav": {
"compile": true,
"upload": true,
"save": {
"ino": true,
"bin": true
},
"setting": {
"thirdPartyLibrary": true
}
},
"serial": {
"ctrlCBtn": false,
"ctrlDBtn": false,
"baudRates": 9600,
"yMax": 100,
"yMin": 0,
"pointNum": 100
},
"lib": {
"mixly": {
"url": [
"http://download.mixlylibs.cloud/mixly-packages/cloud-libs/arduino_esp32/libs.json"
]
}
},
"web": {
"com": "serial",
"upload": {
"reset": [
{
"dtr": false,
"rts": false
}, {
"sleep": 500
}, {
"dtr": false,
"rts": true
}, {
"sleep": 500
}, {
"dtr": false,
"rts": false
}, {
"sleep": 500
}
]
}
}
}

View File

@@ -0,0 +1 @@
<xml version=\"1.0.3\" board=\"Arduino HandBit\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"handbit_rgb\" id=\"t.h.$c6FFHKt2U6.$-U:\" x=\"166\" y=\"150\"><value name=\"_LED_\"><shadow type=\"math_number\" id=\"Fw-cm]}6~dL4%_M0nUy[\"><field name=\"NUM\">1</field></shadow></value><value name=\"COLOR\"><shadow type=\"math_number\"><field name=\"NUM\">\n </field></shadow><block type=\"RGB_color_rgb\" id=\"%oA2d1+cJYPns`M:nS`$\"><value name=\"R\"><shadow type=\"math_number\" id=\"2}s$-L5p^3eY_B?O|Ct_\"><field name=\"NUM\">255</field></shadow></value><value name=\"G\"><shadow type=\"math_number\" id=\"vYW`^F@o4.8/nh1C(hI|\"><field name=\"NUM\">0</field></shadow></value><value name=\"B\"><shadow type=\"math_number\" id=\"]Z**9aFO@j;*Vudik8Ov\"><field name=\"NUM\">0</field></shadow></value></block></value><next><block type=\"handbit_rgb\" id=\"frorzjkc:a8=fI3k]d{*\"><value name=\"_LED_\"><shadow type=\"math_number\" id=\":0G+od$COnPI+eTe43Ki\"><field name=\"NUM\">2</field></shadow></value><value name=\"COLOR\"><shadow type=\"math_number\"><field name=\"NUM\">\n </field></shadow><block type=\"RGB_color_rgb\" id=\"kncJ(DQPQd~gghEV3f8R\"><value name=\"R\"><shadow type=\"math_number\" id=\"_3W=k~hkY~xtBzUdAG$7\"><field name=\"NUM\">0</field></shadow></value><value name=\"G\"><shadow type=\"math_number\" id=\"!,FqKs`J/aGi(wTb^GP)\"><field name=\"NUM\">255</field></shadow></value><value name=\"B\"><shadow type=\"math_number\" id=\"YE+jl{3ys==1Age{Wr3k\"><field name=\"NUM\">0</field></shadow></value></block></value><next><block type=\"handbit_rgb\" id=\"{3cwNWooRzApZ55:t]e-\"><value name=\"_LED_\"><shadow type=\"math_number\" id=\"YuJx=[XM$xg2p)7Xud=;\"><field name=\"NUM\">3</field></shadow></value><value name=\"COLOR\"><shadow type=\"math_number\"><field name=\"NUM\">\n </field></shadow><block type=\"RGB_color_rgb\" id=\"E6^3/*BmBc{*|~C!gjH.\"><value name=\"R\"><shadow type=\"math_number\" id=\"#JWx+7KDKgmeZT8z8JMA\"><field name=\"NUM\">0</field></shadow></value><value name=\"G\"><shadow type=\"math_number\" id=\"}v[]9C5[DO0H:bU^gB=u\"><field name=\"NUM\">0</field></shadow></value><value name=\"B\"><shadow type=\"math_number\" id=\"Pa~r?uMd!LwF(?yRTV.@\"><field name=\"NUM\">255</field></shadow></value></block></value><next><block type=\"handbit_rgb_show\" id=\"r3A,;WBjN4XYWK0MgcZj\"></block></next></block></next></block></next></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version=\"1.2.2\" board=\"Arduino HandBit\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"oled_init\" id=\"rMrqz_u*-kh8rym,F4/L\" x=\"0\" y=\"0\"><field name=\"OLED_TYPE\">SH1106_128X64_NONAME</field><field name=\"NAME\">u8g2</field><field name=\"ROTATION\">U8G2_R0</field><field name=\"SCL\">SCL</field><field name=\"SDA\">SDA</field><value name=\"ADDRESS\"><shadow type=\"math_number\" id=\"GK^8FpKZcxYQZ]R9dFUl\"><field name=\"NUM\">0x3C</field></shadow></value><next><block type=\"oled_page\" id=\"+O6(K4wRH4D@qe2`Ef[y\"><field name=\"NAME\">u8g2</field><statement name=\"DO\"><block type=\"procedures_callnoreturn\" id=\"%R2]k`.m}sB[Plj]S6]T\"><mutation name=\"page1\"></mutation></block></statement></block></next></block><block type=\"procedures_defnoreturn\" id=\"BWRIRlH9k*F)MIszq88s\" x=\"0\" y=\"130\"><field name=\"NAME\">page1</field><statement name=\"STACK\"><block type=\"oled_set_CN_Font\" id=\"Hyc*#UVA3USNP:jJR+Mo\"><field name=\"NAME\">u8g2</field><field name=\"FONT_NAME\">_t_gb2312</field><field name=\"FONT_SIZE\">wqy12</field><next><block type=\"oled_print\" id=\"mWEOD__j~ii.#9.B0yiJ\"><field name=\"NAME\">u8g2</field><value name=\"POS_X\"><shadow type=\"math_number\" id=\"Ax}5tkl^|!ZgAO~z`[(9\"><field name=\"NUM\">0</field></shadow></value><value name=\"POS_Y\"><shadow type=\"math_number\" id=\"S:nBiEDv![p!~Y_P.aqR\"><field name=\"NUM\">0</field></shadow></value><value name=\"TEXT\"><shadow type=\"text\" id=\"U_NEkpx.Y`e2(X^eu0fb\"><field name=\"TEXT\">\u6211\u7231\u7C73\u601D\u9F50</field></shadow></value></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version=\"1.2.2\" board=\"Arduino HandBit\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"factory_notes\" id=\"wJklofA;d|nJ0gbw;PZI\" x=\"6\" y=\"-31\"><field name=\"VALUE\">\u5728\u638C\u63A7\u677F\u7684OLED\u4E0A\u663E\u793A\u6587\u5B57</field><next><block type=\"oled_init\" id=\"a%kg;_v[ip`t1hO)7d)9\"><field name=\"OLED_TYPE\">SH1106_128X64_NONAME</field><field name=\"NAME\">u8g2</field><field name=\"ROTATION\">U8G2_R0</field><field name=\"SCL\">SCL</field><field name=\"SDA\">SDA</field><value name=\"ADDRESS\"><shadow type=\"math_number\" id=\"xdaiv:!AWu?8AvZD2z2v\"><field name=\"NUM\">0x3C</field></shadow></value><next><block type=\"oled_page\" id=\"JOpw/`{HDt}%NW8*ct|$\"><field name=\"NAME\">u8g2</field><statement name=\"DO\"><block type=\"procedures_callnoreturn\" id=\"CG$F^EglSn7YUf7))zTV\"><mutation name=\"page1\"></mutation></block></statement></block></next></block></next></block><block type=\"procedures_defnoreturn\" id=\"~uNNk*G0(aRAtu4z[!{p\" x=\"0\" y=\"119\"><field name=\"NAME\">page1</field><statement name=\"STACK\"><block type=\"oled_set_EN_Font\" id=\"M;-3+]6@JhM1-+HS,NnW\"><field name=\"NAME\">u8g2</field><field name=\"FONT_NAME\">tim</field><field name=\"FONT_SIZE\">08</field><field name=\"FONT_STYLE\">R</field><next><block type=\"oled_print\" id=\"TI?kv2FCFd!fosN*,M!K\"><field name=\"NAME\">u8g2</field><value name=\"POS_X\"><shadow type=\"math_number\" id=\"#NJN0]WbZGh]NKt?{CZ]\"><field name=\"NUM\">0</field></shadow></value><value name=\"POS_Y\"><shadow type=\"math_number\" id=\"[mJ.sM=D]TPa[Ggn-O5^\"><field name=\"NUM\">0</field></shadow></value><value name=\"TEXT\"><shadow type=\"text\" id=\"t`OvBrj_=.aIMGPWCQ-v\"><field name=\"TEXT\">Hello,World!</field></shadow></value><next><block type=\"oled_set_EN_Font\" id=\"XqX]=oI_)z_}F~R}Vr.]\"><field name=\"NAME\">u8g2</field><field name=\"FONT_NAME\">helv</field><field name=\"FONT_SIZE\">14</field><field name=\"FONT_STYLE\">R</field><next><block type=\"oled_print\" id=\"7p^DmAWZlqD,q)8u-U$y\"><field name=\"NAME\">u8g2</field><value name=\"POS_X\"><shadow type=\"math_number\" id=\"/Ec8|kaj),4v=Pd5;M=Y\"><field name=\"NUM\">0</field></shadow></value><value name=\"POS_Y\"><shadow type=\"math_number\" id=\"Llwb]O!:06eLB)HU}Fp[\"><field name=\"NUM\">20</field></shadow></value><value name=\"TEXT\"><shadow type=\"text\" id=\"*0{kzisJ=0^R(#]/(D$U\"><field name=\"TEXT\">Hello,Mixly!</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version=\"1.0.7\" board=\"Arduino MixGo\" xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"serial_println\" id=\"iXPu~*uguB]ana+cA:(|\" x=\"9\" y=\"176\"><field name=\"serial_select\">Serial</field><value name=\"CONTENT\"><block type=\"mixgo_MPU9250\" id=\"(A;~WY9LNL^)x,GcMZ?k\"><field name=\"MixGo_MPU9250_GETAB\">a</field></block></value></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP32@ESP32 Dev Module" xmlns="http://www.w3.org/1999/xhtml"><block type="controls_for" id="oI9P50JsUSr4qftyk5/Z" x="0" y="140"><field name="VAR">i</field><value name="FROM"><shadow type="math_number" id="oUD~^VTpR!4kFHvIHi}M"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="v+F5S-[8Lmfc:Uhy0_-j"><field name="NUM">255</field></shadow></value><value name="STEP"><shadow type="math_number" id="Pbgzl8M4ap6P(Ev8=J{T"><field name="NUM">1</field></shadow></value><statement name="DO"><block type="ledcWrite" id="L}JChT3yQikU~sdR7*Gb"><value name="PIN"><shadow type="pins_pwm" id="/]?WO{sd!q|_Xap)|2(^"><field name="PIN">12</field></shadow></value><value name="NUM"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="f9fDJ(%J;dgj;Dv-*?zo"><field name="NUM">0</field></shadow><block type="variables_get" id=":ybh+F|(a`vB4:)5,Ek^"><field name="VAR">i</field></block></value></block></statement><next><block type="controls_for" id="48J__oxOTc#kR!mG/yUC"><field name="VAR">i</field><value name="FROM"><shadow type="math_number" id="9q$TbyXkFUj`qY|f2AQE"><field name="NUM">255</field></shadow></value><value name="TO"><shadow type="math_number" id="OpTdz*jq;F?:tO]Gk}0e"><field name="NUM">0</field></shadow></value><value name="STEP"><shadow type="math_number" id=",J;E|iS^={O=ORGZj(%6"><field name="NUM">-1</field></shadow></value><statement name="DO"><block type="ledcWrite" id="W~O^V^=Z*)PR-CUH7:b^"><value name="PIN"><shadow type="pins_pwm" id="ht%p)L4jj-R7WuNhzx%J"><field name="PIN">12</field></shadow></value><value name="NUM"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="f9fDJ(%J;dgj;Dv-*?zo"><field name="NUM">0</field></shadow><block type="variables_get" id="kO~Hhkiqx!H#O}0;fSyz"><field name="VAR">i</field></block></value></block></statement></block></next></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc3" board="Arduino ESP32@ESP32 Dev Module"><block type="factory_notes" id="@PHL]!*DuUG}4,6+p!6#" x="-5470" y="-1703"><field name="VALUE">SPIFFS读写数据测试</field><next><block type="factory_notes" id="OW3t@j(LMs*y{RwnFKM!"><field name="VALUE">写入文本会覆盖原数据,追加文本会在原数据后追加数据,数据添加可以选择是否换行</field></block></next></block><block type="base_setup" id="?:/FvTlD3ZGIK:wU9m[`" x="-5467" y="-1618"><statement name="DO"><block type="serial_begin" id="syZagIg,Dv1+31FCC~]q"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="MZIB(q8}z/1oTpLuKSH6"><field name="NUM">9600</field></shadow></value><next><block type="simple_spiffs_DelFile" id="!Li5R=}.{v)w7,7f$@OE"><value name="FileName"><shadow type="text" id="=ZPka7e(,[g-r*mzhXFx"><field name="TEXT">/fileName.txt</field></shadow></value><next><block type="simple_spiffs_store_spiffs_write" id="@ogG@no[W}@r!QI@zA(g"><field name="MODE">2</field><value name="FILE"><shadow type="text" id="Ob,.ov-7^8g@#Q4!`eXP"><field name="TEXT">/fileName.txt</field></shadow></value><value name="DATA"><shadow type="text" id="G_@*!pKPB/:-Ia69-grA"><field name="TEXT">hello world</field></shadow></value><value name="NEWLINE"><shadow type="logic_boolean" id="^Nl2X?j55m1KVX*o8!SR"><field name="BOOL">TRUE</field></shadow></value><next><block type="simple_spiffs_store_spiffs_write" id="4aZ[SKFHN944Q,Uvzq/f"><field name="MODE">2</field><value name="FILE"><shadow type="text" id="rX;tZfiY1R6hQ_?;Mj5*"><field name="TEXT">/fileName.txt</field></shadow></value><value name="DATA"><shadow type="text" id="q6r`Ra/PLRT@q?YL9:h="><field name="TEXT">hello world</field></shadow></value><value name="NEWLINE"><shadow type="logic_boolean" id="?]DHZo4=ix-X?A`HtJ:J"><field name="BOOL">TRUE</field></shadow></value><next><block type="serial_print" id="Nc@jM8.s,ju_{tu0_}`:"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="simple_spiffs_read" id="EilhOK}z]7$@egNPERu,"><value name="FileName"><shadow type="text" id="?vDo5jJnOz|NsPg)oII4"><field name="TEXT">/fileName.txt</field></shadow></value></block></value><next><block type="simple_spiffs_DelFile" id="Q?OMyNmGD(_P#|Dg$cO#"><value name="FileName"><shadow type="text" id="{vS.Ir,^U@H5`)f[d{H."><field name="TEXT">/fileName.txt</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{"PSRAM":"disabled","PartitionScheme":"default","CPUFreq":"240","FlashMode":"qio","FlashFreq":"80","FlashSize":"4M","UploadSpeed":"921600","LoopCore":"1","EventsCore":"1"}</config><code>CiNpbmNsdWRlICJGUy5oIgojaW5jbHVkZSAiU1BJRkZTLmgiCgp2b2lkIGRlbGV0ZUZpbGUoZnM6OkZTICZmcywgY29uc3QgY2hhciAqIHBhdGgpIHsKICBpZiAoZnMucmVtb3ZlKHBhdGgpKSB7CiAgICBTZXJpYWwucHJpbnRsbigiLSBmaWxlIGRlbGV0ZWQiKTsKICB9IGVsc2UgewogICAgU2VyaWFsLnByaW50bG4oIi0gZGVsZXRlIGZhaWxlZCIpOwogIH0KfQp2b2lkIGFwcGVuZEZpbGUoZnM6OkZTICZmcywgY29uc3QgY2hhciAqIHBhdGgsIGNvbnN0IGNoYXIgKiBtZXNzYWdlKSB7CiAgRmlsZSBmaWxlID0gZnMub3BlbihwYXRoLCBGSUxFX0FQUEVORCk7CiAgaWYgKCFmaWxlKSB7CiAgICBTZXJpYWwucHJpbnRsbigiLSBmYWlsZWQgdG8gb3BlbiBmaWxlIGZvciBhcHBlbmRpbmciKTsKICAgIHJldHVybjsKICB9CiAgaWYgKGZpbGUucHJpbnQobWVzc2FnZSkpIHsKICAgIFNlcmlhbC5wcmludGxuKCItIG1lc3NhZ2UgYXBwZW5kZWQiKTsKICB9IGVsc2UgewogICAgU2VyaWFsLnByaW50bG4oIi0gYXBwZW5kIGZhaWxlZCIpOwogIH0KICBmaWxlLmNsb3NlKCk7Cn0KU3RyaW5nIHJlYWRGaWxlKGZzOjpGUyAmZnMsIGNvbnN0IGNoYXIgKiBwYXRoKSB7CiAgRmlsZSBmaWxlID0gZnMub3BlbihwYXRoKTsKICBpZiAoIWZpbGUgfHwgZmlsZS5pc0RpcmVjdG9yeSgpKSB7CiAgICBTZXJpYWwucHJpbnRsbigiLSBmYWlsZWQgdG8gb3BlbiBmaWxlIGZvciByZWFkaW5nIik7CiAgICBmaWxlLmNsb3NlKCk7CiAgICByZXR1cm4gIlNQSUZGU19lcnJvciI7CiAgfSBlbHNlIHsKICAgIFNlcmlhbC5wcmludGxuKCItIHJlYWQgZnJvbSBmaWxlOiIpOwogICAgU3RyaW5nIFNQSUZGU19kYXRhID0gIiI7CiAgICB3aGlsZSAoZmlsZS5hdmFpbGFibGUoKSkgewogICAgIFNQSUZGU19kYXRhID0gU3RyaW5nKFNQSUZGU19kYXRhKSArIFN0cmluZyhjaGFyKGZpbGUucmVhZCgpKSk7CiAgIH0KICAgZmlsZS5jbG9zZSgpOwogICByZXR1cm4gU1BJRkZTX2RhdGE7CiB9Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgICBpZiAoIVNQSUZGUy5iZWdpbih0cnVlKSkgewogICAgU2VyaWFsLnByaW50bG4oIlNQSUZGUyBNb3VudCBGYWlsZWQiKTsKICAgcmV0dXJuOwogfQogIGRlbGV0ZUZpbGUoU1BJRkZTLCAiL2ZpbGVOYW1lLnR4dCIpOwogIGFwcGVuZEZpbGUoU1BJRkZTLCAiL2ZpbGVOYW1lLnR4dCIsIFN0cmluZyhTdHJpbmcoImhlbGxvIHdvcmxkIikgKyBTdHJpbmcoIlxyXG4iKSkuY19zdHIoKSk7CiAgYXBwZW5kRmlsZShTUElGRlMsICIvZmlsZU5hbWUudHh0IiwgU3RyaW5nKFN0cmluZygiaGVsbG8gd29ybGQiKSArIFN0cmluZygiXHJcbiIpKS5jX3N0cigpKTsKICBTZXJpYWwucHJpbnRsbihyZWFkRmlsZShTUElGRlMsICIvZmlsZU5hbWUudHh0IikpOwogIGRlbGV0ZUZpbGUoU1BJRkZTLCAiL2ZpbGVOYW1lLnR4dCIpOwp9Cgp2b2lkIGxvb3AoKXsKICAvL1NQSUZGU+ivu+WGmeaVsOaNrua1i+ivlQogIC8v5YaZ5YWl5paH5pys5Lya6KaG55uW5Y6f5pWw5o2u77yM6L+95Yqg5paH5pys5Lya5Zyo5Y6f5pWw5o2u5ZCO6L+95Yqg5pWw5o2u77yM5pWw5o2u5re75Yqg5Y+v5Lul6YCJ5oup5piv5ZCm5o2i6KGMCgp9</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32@ESP32 Dev Module"><block type="base_setup" id="BW;FlBf1=G?PkND`ijxA" x="-407" y="118"><statement name="DO"><block type="serial_begin" id="bf~pF7aXupJ`d!ni9{68"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="L6P8YTnXzqPD[tMuYoan"><field name="NUM">9600</field></shadow></value><next><block type="serial_print" id="H/W]`Rt#.-?a:RJwLa$M"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="@I$Ng+4K()e}UF0,Xjp]"><field name="TEXT">=========Base64编解码=========</field></block></value><next><block type="serial_print" id="`d3Hh_Ti?-UY7wOY@vcf"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="J8?H9Q.iIWq.rf(:w*PB"><field name="TYPE">BASE64</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id="GDFKfTOw=UIpH-VEmz!/"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id=")eo[4Lod8kDO_pDa?4lv"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="0V2xn=os|pqjE#rZew3P"><field name="TYPE">BASE64</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="=jqkwR}aVi!83kx1(0ky"><field name="TEXT">5L2g5aW9TWl4bHk=</field></shadow></value></block></value><next><block type="serial_print" id="#7K}Yhk3qhmV./bwQr5;"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="ut3YM,rxoiYJXdvk23W^"><field name="TEXT">==========Url编解码===========</field></block></value><next><block type="serial_print" id="Aq^Vioo*xK={vh9e}@Vp"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="s43sgBC4KQb+s{?,Z}K0"><field name="TYPE">URL</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id=",bDlu;#x}f|b@ElFwUz1"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id="x:kJ1HcUw_r,_A7qWP#s"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="82A@G!l-zG-JQ5S0a,P6"><field name="TYPE">URL</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="|75viF}9th~6=1-!TzT}"><field name="TEXT">%E4%BD%A0%E5%A5%BDMixly</field></shadow></value></block></value><next><block type="serial_print" id="5fmmL?u86:g6G[Q~E)_j"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="cXmXosOy0Ir(s1{30/WN"><field name="TEXT">==============================</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi/BT)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"230400","label":"230400"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"}}</config><code>CiNpbmNsdWRlIDxyQmFzZTY0Lmg+CiNpbmNsdWRlIDxVUkxDb2RlLmg+CgpVUkxDb2RlIHVybENvZGU7CgpTdHJpbmcgdXJsRW5jb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnN0cmNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxlbmNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS51cmxjb2RlOwp9CgpTdHJpbmcgdXJsRGVjb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnVybGNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxkZWNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS5zdHJjb2RlOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFNlcmlhbC5wcmludGxuKCI9PT09PT09PT1CYXNlNjTnvJbop6PnoIE9PT09PT09PT0iKTsKICBTZXJpYWwucHJpbnRsbihyYmFzZTY0LmVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4ocmJhc2U2NC5kZWNvZGUoIjVMMmc1YVc5VFdsNGJIaz0iKSk7CiAgU2VyaWFsLnByaW50bG4oIj09PT09PT09PT1VcmznvJbop6PnoIE9PT09PT09PT09PSIpOwogIFNlcmlhbC5wcmludGxuKHVybEVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4odXJsRGVjb2RlKCIlRTQlQkQlQTAlRTUlQTUlQkRNaXhseSIpKTsKICBTZXJpYWwucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Cn0KCnZvaWQgbG9vcCgpewoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc3" board="Arduino ESP32@ESP32 Dev Module"><block type="factory_notes" id="9t?s(zUn;d5mP14AX$LN" x="-820" y="-562"><field name="VALUE">WiFi已连接与路由器分配IP事件仅执行一次&amp;#10;WiFi断开事件会重复执行直到WiFi重新连接&amp;#10;可用该事件启用设备的离线模式或者掉线多久&amp;#10;重启设备注意WiFi事件必须放WiFi连接前面&amp;#10;否则事件会无效且程序工作异常</field></block><block type="esp32_wifi_connection_event" id=":]`)E=SPeD`i@)3KLxw^" x="-821" y="-414"><field name="type">1</field><statement name="event"><block type="serial_print" id="(6OG|YhudQ)@6#,p+3/u"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="I10[vWR*5$xbsG_1V)))"><field name="TEXT">WiFi已连接</field></block></value></block></statement></block><block type="esp32_wifi_connection_event" id="=TKc{gvDp,366UcH3|d3" x="-823" y="-322"><field name="type">2</field><statement name="event"><block type="serial_print" id=".okWrw]ng8Vh.w}2D*ND"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="RfbmpL2EiH=K._Y_iZ3V"><field name="TEXT">路由器分配IP成功</field></block></value><next><block type="serial_print" id="!nTB?Gy:Pvsaf#ediL*+"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="network_get_connect" id="[_JyOH/E[KKO8}tiB@V@"><field name="mode">IP</field></block></value></block></next></block></statement></block><block type="esp32_wifi_connection_event" id="uDj9*)5J0khtycf9,YI4" x="-823" y="-203"><field name="type">3</field><statement name="event"><block type="serial_print" id="k(iG:pgMLlmj.m^|@?Q6"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="./`i`)UO(ra!5eb$q7k*"><field name="TEXT">WiFi已断开</field></block></value></block></statement></block><block type="WIFI_info" id="t/`L-98,l~[Jz}N.CPFI" x="-824" y="-110"><value name="SSID"><shadow type="text" id="x7X-;@^R|ry)WBe3UDr-"><field name="TEXT">Netcore-65080F</field></shadow></value><value name="PWD"><shadow type="text" id="~+38zgk7=Kfo:LY[b]l2"><field name="TEXT">1234567890</field></shadow></value></block></xml><config>{"PSRAM":"disabled","PartitionScheme":"default","CPUFreq":"240","FlashMode":"qio","FlashFreq":"80","FlashSize":"4M","UploadSpeed":"921600","LoopCore":"1","EventsCore":"1"}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+Cgp2b2lkIFdpRmlTdGF0aW9uQ29ubmVjdGVkKFdpRmlFdmVudF90IGV2ZW50LCBXaUZpRXZlbnRJbmZvX3QgaW5mbyl7CiAgU2VyaWFsLnByaW50bG4oIldpRmnlt7Lov57mjqUiKTsKfQoKdm9pZCBXaUZpR290SVAoV2lGaUV2ZW50X3QgZXZlbnQsIFdpRmlFdmVudEluZm9fdCBpbmZvKXsKICBTZXJpYWwucHJpbnRsbigi6Lev55Sx5Zmo5YiG6YWNSVDmiJDlip8iKTsKICBTZXJpYWwucHJpbnRsbihXaUZpLmxvY2FsSVAoKSk7Cn0KCnZvaWQgV2lGaVN0YXRpb25EaXNjb25uZWN0ZWQoV2lGaUV2ZW50X3QgZXZlbnQsIFdpRmlFdmVudEluZm9fdCBpbmZvKXsKICBTZXJpYWwucHJpbnRsbigiV2lGaeW3suaWreW8gCIpOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFdpRmkub25FdmVudChXaUZpU3RhdGlvbkNvbm5lY3RlZCwgV2lGaUV2ZW50X3Q6OkFSRFVJTk9fRVZFTlRfV0lGSV9TVEFfQ09OTkVDVEVEKTsKICBXaUZpLm9uRXZlbnQoV2lGaUdvdElQLCBXaUZpRXZlbnRfdDo6QVJEVUlOT19FVkVOVF9XSUZJX1NUQV9HT1RfSVApOwogIFdpRmkub25FdmVudChXaUZpU3RhdGlvbkRpc2Nvbm5lY3RlZCwgV2lGaUV2ZW50X3Q6OkFSRFVJTk9fRVZFTlRfV0lGSV9TVEFfRElTQ09OTkVDVEVEKTsKICBXaUZpLmJlZ2luKCJOZXRjb3JlLTY1MDgwRiIsICIxMjM0NTY3ODkwIik7CiAgd2hpbGUgKFdpRmkuc3RhdHVzKCkgIT0gV0xfQ09OTkVDVEVEKSB7CiAgICBkZWxheSg1MDApOwogICAgU2VyaWFsLnByaW50KCIuIik7CiAgfQogIFNlcmlhbC5wcmludGxuKCJMb2NhbCBJUDoiKTsKICBTZXJpYWwucHJpbnQoV2lGaS5sb2NhbElQKCkpOwoKfQoKdm9pZCBsb29wKCl7CiAgLy9XaUZp5bey6L+e5o6l5LiO6Lev55Sx5Zmo5YiG6YWNSVDkuovku7bku4XmiafooYzkuIDmrKEKICAvL1dpRmnmlq3lvIDkuovku7bkvJrph43lpI3miafooYznm7TliLBXaUZp6YeN5paw6L+e5o6lCiAgLy/lj6/nlKjor6Xkuovku7blkK/nlKjorr7lpIfnmoTnprvnur/mqKHlvI/miJbogIXmjonnur/lpJrkuYUKICAvL+mHjeWQr+iuvuWkh++8jOazqOaEj1dpRmnkuovku7blv4XpobvmlL5XaUZp6L+e5o6l5YmN6Z2iCiAgLy/lkKbliJnkuovku7bkvJrml6DmlYjkuJTnqIvluo/lt6XkvZzlvILluLgKCn0=</code>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP32@ESP32 Dev Module" xmlns="http://www.w3.org/1999/xhtml"><block type="factory_notes" id="Q;5)w[}dCnGLTKUSPpB#" x="0" y="0"><field name="VALUE">GPIO18连接按钮\nGPIO19连接按钮\n分别按下按钮可以通过串口监视器看到输出信息</field></block><block type="base_setup" id="XpvFh}8Q:V`hGphn+F+s" x="0" y="105"><statement name="DO"><block type="serial_begin" id="W(yDW{@U0Gh*yOuh[o8W"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="]!^Zuj6YhVNq@.3XA@Bd"><field name="NUM">9600</field></shadow></value><next><block type="controls_attachInterrupt" id=";`{E|k(4`Y3va@]5r^=n"><field name="mode">RISING</field><value name="PIN"><shadow type="pins_interrupt" id="Ffiv}O*qbc-PC3dSqEdb"><field name="PIN">18</field></shadow></value><statement name="DO"><block type="serial_println" id="1[9qlTqTv{[Zx1uq+*Z0"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="d-nm]3ORZ.YW?TWDUn.n"><field name="TEXT">GPIO18 Interrput</field></block></value></block></statement><next><block type="controls_attachInterrupt" id="RVMwS_`f-J5:^}LyE?HQ"><field name="mode">RISING</field><value name="PIN"><shadow type="pins_interrupt" id="4d7WC_g|Z^veMv6Q:E_A"><field name="PIN">19</field></shadow></value><statement name="DO"><block type="serial_println" id="b%pK9bkPh.Ks#;skn~HI"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="tx{;9bol]_G.cg;A5KdR"><field name="TEXT">GPIO19 Interrput</field></block></value></block></statement></block></next></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32@ESP32 Dev Module"><block type="base_setup" id="*{6gvYug,:6](/yz?0+S" x="0" y="0"><statement name="DO"><block type="WIFI_info" id="dP9EFCJA?8mq~ZQ-2O9y"><value name="SSID"><shadow type="text" id="*THzNH#t95gyFB+6T+4,"><field name="TEXT">WIFI名称</field></shadow></value><value name="PWD"><shadow type="text" id="gg6Tl:ih7H*f~Sq1*o:e"><field name="TEXT">WIFI密码</field></shadow></value></block></statement></block><block type="http_post" id="q!ybIpE5MIFsXHF:xgAG" x="0" y="106"><field name="TYPE">POST</field><value name="api"><shadow type="text" id="U=C8wcqDr|/1L1,]BPuH"><field name="TEXT">http://IPAddress:3000/login/</field></shadow></value><value name="data"><shadow type="text" id=";Ff*NMEDul|#gt0TQi(P"><field name="TEXT">{\"name\":\"Mixly\"}</field></shadow></value><statement name="success"><block type="serial_println" id="Rm$e2lw|3~?cBayS}_dL"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="ZrX;qVMf-`AU76z/lbnE"><field name="VAR">Request_result</field></block></value></block></statement><statement name="failure"><block type="serial_println" id="1Hv2M~j]/xh9f+O{(N[U"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="7gRGTJTmHNfnZ+y5mciZ"><field name="TEXT">Invalid response!</field></block></value></block></statement><next><block type="controls_delay" id="1bN(m7oCQ;+(E@+_7@zR"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="FlA;{ShbPi#L=MpX,_@E"><field name="NUM">1000</field></shadow></value></block></next></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi/BT)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"230400","label":"230400"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxIVFRQQ2xpZW50Lmg+Cgp2b2lkIHNldHVwKCl7CiAgV2lGaS5iZWdpbigiV0lGSeWQjeensCIsICJXSUZJ5a+G56CBIik7CiAgd2hpbGUgKFdpRmkuc3RhdHVzKCkgIT0gV0xfQ09OTkVDVEVEKSB7CiAgICBkZWxheSg1MDApOwogICAgU2VyaWFsLnByaW50KCIuIik7CiAgfQogIFNlcmlhbC5wcmludGxuKCJMb2NhbCBJUDoiKTsKICBTZXJpYWwucHJpbnQoV2lGaS5sb2NhbElQKCkpOwoKICBTZXJpYWwuYmVnaW4oOTYwMCk7Cn0KCnZvaWQgbG9vcCgpewogIGlmIChXaUZpLnN0YXR1cygpID09IFdMX0NPTk5FQ1RFRCkgewogICAgSFRUUENsaWVudCBodHRwOwogICAgaHR0cC5iZWdpbigiaHR0cDovL0lQQWRkcmVzczozMDAwL2xvZ2luLyIpOwogICAgaHR0cC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICBpbnQgaHR0cENvZGUgPSBodHRwLlBPU1QoIntcIm5hbWVcIjpcIk1peGx5XCJ9Iik7CiAgICBpZiAoaHR0cENvZGUgPiAwKSB7CiAgICAgIFN0cmluZyBSZXF1ZXN0X3Jlc3VsdCA9IGh0dHAuZ2V0U3RyaW5nKCk7CiAgICAgIFNlcmlhbC5wcmludGxuKFJlcXVlc3RfcmVzdWx0KTsKICAgIH0KICAgIGVsc2UgewogICAgICBTZXJpYWwucHJpbnRsbigiSW52YWxpZCByZXNwb25zZSEiKTsKICAgIH0KICAgIGh0dHAuZW5kKCk7CiAgfQogIGRlbGF5KDEwMDApOwoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP32@ESP32 Dev Module" xmlns="http://www.w3.org/1999/xhtml"><block type="controls_hw_timer" id="_%K_JJk(P:A*-F%)HDqF" x="0" y="0"><field name="TIMER_NUM">0</field><field name="mode">true</field><value name="TIME"><shadow type="math_number" id="o=stQXi@^rAy#|[eyRn#"><field name="NUM">500</field></shadow></value><statement name="DO"><block type="inout_digital_write2" id="3OPOz:m7?(qEy~~qVzKx"><value name="PIN"><shadow type="pins_digital" id="y]?z8q{Gsl-[^`(@gCO5"><field name="PIN">16</field></shadow></value><value name="STAT"><shadow xmlns="http://www.w3.org/1999/xhtml" type="inout_highlow" id="u[Z3clLW[VSLD6$aCTS}"><field name="BOOL">HIGH</field></shadow><block type="logic_negate" id="`9{Go02^/pku%6wZUK7s"><value name="BOOL"><block type="inout_digital_read2" id="`Up*SXG@ldP~Q,bMTmmi"><value name="PIN"><shadow type="pins_digital" id="wpgpD6;|5/ch8w~Ee*2_"><field name="PIN">16</field></shadow></value></block></value></block></value></block></statement></block><block type="base_setup" id="nVpv[3Oe#Q(Y/+mA,y{x" x="0" y="126"><statement name="DO"><block type="controls_hw_timer_start" id="o^Hyh1T@!xyPpqRfS-Hv"><field name="TIMER_NUM">0</field></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32@ESP32 Dev Module"><block type="base_setup" id="g*r0]1@=las.:(yD.m3B" x="0" y="0"><statement name="DO"><block type="serial_begin" id="`VqE@VIz2i4ZTl-[;/Gc"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="ri*$QB#6{~qTn#MA!(p|"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="Uw~G@u8:m_@z*@*c;zP^"><value name="SSID"><shadow type="text" id="Ey:aKszXu)`r4vWjag/h"><field name="TEXT">Xiaomi_0432</field></shadow></value><value name="PWD"><shadow type="text" id="0bI_rI}.[`2L={OVG#38"><field name="TEXT">18768195210</field></shadow></value><next><block type="weather_seniverse_city_weather" id="2ZAlFd]D(JwLB*G6]GW["><field name="api">weather/now</field><field name="language">zh-Hans</field><field name="unit">c</field><value name="location"><shadow type="china_city" id="Z_GsI6dGW^8tMT=P$t./"><field name="province">浙江</field><field name="city">杭州</field></shadow></value><value name="private_key"><shadow type="weather_private_key" id="9(JLiaXDPjnbq)X;JAcF"><field name="key">S9l2sb_ZK-UsWaynG</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="=`Y=}3Jm`$mWmGEyfHui" x="0" y="272"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="-$HlZ`^73[JPSU~E//nA"><field name="NUM">5000</field></shadow></value><statement name="zxhs"><block type="controls_if" id="DsW[4_XWbQC4z@k8T^BC"><value name="IF0"><block type="weather_get_seniverse_weather_info" id="l.h0/q(/)?JsLROxecj?"><field name="api">weather/now</field><field name="type">update</field></block></value><statement name="DO0"><block type="serial_println" id=":$IL0#{j[2!GrH(8,$E2"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="weather_get_seniverse_weather_info1" id="kM|Byza!D]Snz_Uou9jk"><field name="type">getWeatherText</field></block></value></block></statement></block></statement></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi/BT)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"230400","label":"230400"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxFU1A4MjY2X1Nlbml2ZXJzZS5oPgojaW5jbHVkZSA8U2ltcGxlVGltZXIuaD4KCldlYXRoZXJOb3cgd2VhdGhlck5vdzsKU2ltcGxlVGltZXIgdGltZXI7Cgp2b2lkIFNpbXBsZV90aW1lcl8xKCkgewogIGlmICh3ZWF0aGVyTm93LnVwZGF0ZSgpKSB7CiAgICBTZXJpYWwucHJpbnRsbih3ZWF0aGVyTm93LmdldFdlYXRoZXJUZXh0KCkpOwoKICB9Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgV2lGaS5iZWdpbigiWGlhb21pXzA0MzIiLCAiMTg3NjgxOTUyMTAiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIHdlYXRoZXJOb3cuY29uZmlnKCJTOWwyc2JfWkstVXNXYXluRyIsICJoYW5nemhvdSIsICJjIiwgInpoLUhhbnMiKTsKICB0aW1lci5zZXRJbnRlcnZhbCg1MDAwTCwgU2ltcGxlX3RpbWVyXzEpOwoKfQoKdm9pZCBsb29wKCl7CiAgdGltZXIucnVuKCk7Cgp9</code>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc3" board="Arduino ESP32@ESP32 Dev Module"><block type="factory_notes" id="SZANlq@{;ieAx*aFNtR6" x="-852" y="-573"><field name="VALUE">ESP32拥有两个核心核心0与核心1默认程序运行在核心1&amp;#10;可以使用Task调用核心0或者核心1执行不同任务且不会相互干扰&amp;#10;(同一时刻,同一硬件资源,只能被一个核心调用,记住这个&amp;#10;使用限制,使用需注意否则会导致开发板无限重启),双核是&amp;#10;真正意义上的独立运行不会受到另一个核心的影响例如下方的&amp;#10;例子当中主循环的延时函数并不会影响核心0的任务执行Task&amp;#10;使用类似于UNO多线程</field></block><block type="base_setup" id="+HDQjQ!O*7+E?)KTY5GY" x="-855" y="-381"><statement name="DO"><block type="serial_begin" id="maOL13dAc`pH5~B1!C,7"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="#iqw|v[ItJt3yZtZ#Ym*"><field name="NUM">9600</field></shadow></value><next><block type="serial_print" id="CESI+4unx1EQgr{N6ke@"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id=",()vl/(NtjnQL{_vw87J"><field name="TEXT">开始任务1</field></block></value></block></next></block></statement></block><block type="controls_runnig_core" id="]:TpR+=frQ6zW)A/{Bg+" x="-860" y="-252"><field name="task">1</field><field name="core">0</field><value name="length"><shadow type="math_number" id="fdUh)Jex;LB3oxX:4^hx"><field name="NUM">4096</field></shadow></value><statement name="setup"><block type="serial_print" id="7`n.-VgxYvEY+I9lFFA="><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="Q9|3*.Nh^`Ed9sLd,.@3"><field name="TEXT">开始任务2</field></block></value></block></statement><statement name="loop"><block type="serial_print" id="khxsD~Jmo)i||hFP|1fU"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="bEfOS^S:9~uQ#)bs`qAH"><field name="TEXT">任务2</field></block></value><next><block type="controls_delay" id="KNIPB4ZWAS+^v0UNE}x7"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="Hf}n+`+T@GtnHZd98ErJ"><field name="NUM">1000</field></shadow></value></block></next></block></statement></block><block type="serial_print" id="FPa)SfQY3xUn1Nea+6sH" x="-865" y="-40"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="WPsFX?E{Q+9)k1MOfD/4"><field name="TEXT">任务1</field></block></value><next><block type="controls_delay" id="9peMnFEG(LEiUE6Aga6d"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="|C)H|/y*W=aa`[uN5i)l"><field name="NUM">2000</field></shadow></value></block></next></block></xml><config>{"PSRAM":"disabled","PartitionScheme":"default","CPUFreq":"240","FlashMode":"qio","FlashFreq":"80","FlashSize":"4M","UploadSpeed":"115200","LoopCore":"1","EventsCore":"1"}</config><code>dm9pZCB0YXNrXzEoIHZvaWQgKiBwdlBhcmFtZXRlcnMgKXsKZm9yKDs7KXsKICBTZXJpYWwucHJpbnRsbigi5Lu75YqhMiIpOwogIGRlbGF5KDEwMDApOwogIHZUYXNrRGVsYXkoMSk7Cn0KfQoKdm9pZCBzZXR1cCgpewogIFNlcmlhbC5iZWdpbig5NjAwKTsKICBTZXJpYWwucHJpbnRsbigi5byA5aeL5Lu75YqhMSIpOwogIFNlcmlhbC5wcmludGxuKCLlvIDlp4vku7vliqEyIik7CiAgeFRhc2tDcmVhdGVQaW5uZWRUb0NvcmUodGFza18xLCAidGFza18xIiwgNDA5NiwgTlVMTCwgMiwgTlVMTCwgMCk7Cgp9Cgp2b2lkIGxvb3AoKXsKICAvL0VTUDMy5oul5pyJ5Lik5Liq5qC45b+D77yM5qC45b+DMOS4juaguOW/gzHvvIzpu5jorqTnqIvluo/ov5DooYzlnKjmoLjlv4MxCiAgLy/lj6/ku6Xkvb/nlKhUYXNr6LCD55So5qC45b+DMOaIluiAheaguOW/gzHmiafooYzkuI3lkIzku7vliqHkuJTkuI3kvJrnm7jkupLlubLmibAKICAvL++8iOWQjOS4gOaXtuWIu++8jOWQjOS4gOehrOS7tui1hOa6kO+8jOWPquiDveiiq+S4gOS4quaguOW/g+iwg+eUqO+8jOiusOS9j+i/meS4qgogIC8v5L2/55So6ZmQ5Yi277yM5L2/55So6ZyA5rOo5oSP5ZCm5YiZ5Lya5a+86Ie05byA5Y+R5p2/5peg6ZmQ6YeN5ZCv77yJ77yM5Y+M5qC45pivCiAgLy/nnJ/mraPmhI/kuYnkuIrnmoTni6znq4vov5DooYzkuI3kvJrlj5fliLDlj6bkuIDkuKrmoLjlv4PnmoTlvbHlk43kvovlpoLkuIvmlrnnmoQKICAvL+S+i+WtkOW9k+S4reS4u+W+queOr+eahOW7tuaXtuWHveaVsOW5tuS4jeS8muW9seWTjeaguOW/gzDnmoTku7vliqHmiafooYzvvIxUYXNrCiAgLy/kvb/nlKjnsbvkvLzkuo5VTk/lpJrnur/nqIsKCiAgdlRhc2tEZWxheSgxKTsKCiAgU2VyaWFsLnByaW50bG4oIuS7u+WKoTEiKTsKICBkZWxheSgyMDAwKTsKCn0=</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP32@ESP32 Dev Module" xmlns="http://www.w3.org/1999/xhtml"><block type="touchAttachInterrupt" id="3UI?(wV5Z+j]|]ZVRQWT" x="196" y="271"><value name="PIN"><shadow type="pins_touch" id="OW(4UZ[nvJq%n$(FDwEO"><field name="PIN">2</field></shadow></value><value name="threshold"><shadow type="math_number" id="ghBtm@-jrC;U;;U+,uq6"><field name="NUM">20</field></shadow></value><statement name="DO"><block type="inout_digital_write2" id="?xtH;W)LMv9[MI23oAYh"><value name="PIN"><shadow type="pins_digitalWrite" id=":!)s?*iBI?d%G%E/%NmI"><field name="PIN">19</field></shadow></value><value name="STAT"><shadow xmlns="http://www.w3.org/1999/xhtml" type="inout_highlow" id="d1)yIBrd|lX%Z*o+}Vgk"><field name="BOOL">HIGH</field></shadow><block type="logic_negate" id="^jn6GQ8X3FC~aq[QM!u="><value name="BOOL"><block type="inout_digital_read2" id="226%#F,/Ax)gfKuuIzI{"><value name="PIN"><shadow type="pins_digital" id="!P{?+s~3+rnyK8Z$bpZ7"><field name="PIN">19</field></shadow></value></block></value></block></value></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32C3@ESP32C3 Dev Module"><block type="base_setup" id="BW;FlBf1=G?PkND`ijxA" x="-379" y="174"><statement name="DO"><block type="serial_begin" id="bf~pF7aXupJ`d!ni9{68"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="L6P8YTnXzqPD[tMuYoan"><field name="NUM">9600</field></shadow></value><next><block type="serial_print" id="H/W]`Rt#.-?a:RJwLa$M"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="@I$Ng+4K()e}UF0,Xjp]"><field name="TEXT">=========Base64编解码=========</field></block></value><next><block type="serial_print" id="`d3Hh_Ti?-UY7wOY@vcf"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="J8?H9Q.iIWq.rf(:w*PB"><field name="TYPE">BASE64</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id="GDFKfTOw=UIpH-VEmz!/"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id=")eo[4Lod8kDO_pDa?4lv"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="0V2xn=os|pqjE#rZew3P"><field name="TYPE">BASE64</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="=jqkwR}aVi!83kx1(0ky"><field name="TEXT">5L2g5aW9TWl4bHk=</field></shadow></value></block></value><next><block type="serial_print" id="#7K}Yhk3qhmV./bwQr5;"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="ut3YM,rxoiYJXdvk23W^"><field name="TEXT">==========Url编解码===========</field></block></value><next><block type="serial_print" id="Aq^Vioo*xK={vh9e}@Vp"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="s43sgBC4KQb+s{?,Z}K0"><field name="TYPE">URL</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id=",bDlu;#x}f|b@ElFwUz1"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id="x:kJ1HcUw_r,_A7qWP#s"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="82A@G!l-zG-JQ5S0a,P6"><field name="TYPE">URL</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="|75viF}9th~6=1-!TzT}"><field name="TEXT">%E4%BD%A0%E5%A5%BDMixly</field></shadow></value></block></value><next><block type="serial_print" id="5fmmL?u86:g6G[Q~E)_j"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="cXmXosOy0Ir(s1{30/WN"><field name="TEXT">==============================</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{"CDCOnBoot":{"key":"default","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"160","label":"160MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"230400","label":"230400"}}</config><code>CiNpbmNsdWRlIDxyQmFzZTY0Lmg+CiNpbmNsdWRlIDxVUkxDb2RlLmg+CgpVUkxDb2RlIHVybENvZGU7CgpTdHJpbmcgdXJsRW5jb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnN0cmNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxlbmNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS51cmxjb2RlOwp9CgpTdHJpbmcgdXJsRGVjb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnVybGNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxkZWNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS5zdHJjb2RlOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFNlcmlhbC5wcmludGxuKCI9PT09PT09PT1CYXNlNjTnvJbop6PnoIE9PT09PT09PT0iKTsKICBTZXJpYWwucHJpbnRsbihyYmFzZTY0LmVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4ocmJhc2U2NC5kZWNvZGUoIjVMMmc1YVc5VFdsNGJIaz0iKSk7CiAgU2VyaWFsLnByaW50bG4oIj09PT09PT09PT1VcmznvJbop6PnoIE9PT09PT09PT09PSIpOwogIFNlcmlhbC5wcmludGxuKHVybEVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4odXJsRGVjb2RlKCIlRTQlQkQlQTAlRTUlQTUlQkRNaXhseSIpKTsKICBTZXJpYWwucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Cn0KCnZvaWQgbG9vcCgpewoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32C3@ESP32C3 Dev Module"><block type="base_setup" id="*{6gvYug,:6](/yz?0+S" x="0" y="0"><statement name="DO"><block type="WIFI_info" id="dP9EFCJA?8mq~ZQ-2O9y"><value name="SSID"><shadow type="text" id="*THzNH#t95gyFB+6T+4,"><field name="TEXT">WIFI名称</field></shadow></value><value name="PWD"><shadow type="text" id="gg6Tl:ih7H*f~Sq1*o:e"><field name="TEXT">WIFI密码</field></shadow></value></block></statement></block><block type="http_post" id="q!ybIpE5MIFsXHF:xgAG" x="0" y="106"><field name="TYPE">POST</field><value name="api"><shadow type="text" id="U=C8wcqDr|/1L1,]BPuH"><field name="TEXT">http://IPAddress:3000/login/</field></shadow></value><value name="data"><shadow type="text" id=";Ff*NMEDul|#gt0TQi(P"><field name="TEXT">{\"name\":\"Mixly\"}</field></shadow></value><statement name="success"><block type="serial_println" id="Rm$e2lw|3~?cBayS}_dL"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="ZrX;qVMf-`AU76z/lbnE"><field name="VAR">Request_result</field></block></value></block></statement><statement name="failure"><block type="serial_println" id="1Hv2M~j]/xh9f+O{(N[U"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="7gRGTJTmHNfnZ+y5mciZ"><field name="TEXT">Invalid response!</field></block></value></block></statement><next><block type="controls_delay" id="1bN(m7oCQ;+(E@+_7@zR"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="FlA;{ShbPi#L=MpX,_@E"><field name="NUM">1000</field></shadow></value></block></next></block></xml><config>{"CDCOnBoot":{"key":"default","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"160","label":"160MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"230400","label":"230400"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxIVFRQQ2xpZW50Lmg+Cgp2b2lkIHNldHVwKCl7CiAgV2lGaS5iZWdpbigiV0lGSeWQjeensCIsICJXSUZJ5a+G56CBIik7CiAgd2hpbGUgKFdpRmkuc3RhdHVzKCkgIT0gV0xfQ09OTkVDVEVEKSB7CiAgICBkZWxheSg1MDApOwogICAgU2VyaWFsLnByaW50KCIuIik7CiAgfQogIFNlcmlhbC5wcmludGxuKCJMb2NhbCBJUDoiKTsKICBTZXJpYWwucHJpbnQoV2lGaS5sb2NhbElQKCkpOwoKICBTZXJpYWwuYmVnaW4oOTYwMCk7Cn0KCnZvaWQgbG9vcCgpewogIGlmIChXaUZpLnN0YXR1cygpID09IFdMX0NPTk5FQ1RFRCkgewogICAgSFRUUENsaWVudCBodHRwOwogICAgaHR0cC5iZWdpbigiaHR0cDovL0lQQWRkcmVzczozMDAwL2xvZ2luLyIpOwogICAgaHR0cC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICBpbnQgaHR0cENvZGUgPSBodHRwLlBPU1QoIntcIm5hbWVcIjpcIk1peGx5XCJ9Iik7CiAgICBpZiAoaHR0cENvZGUgPiAwKSB7CiAgICAgIFN0cmluZyBSZXF1ZXN0X3Jlc3VsdCA9IGh0dHAuZ2V0U3RyaW5nKCk7CiAgICAgIFNlcmlhbC5wcmludGxuKFJlcXVlc3RfcmVzdWx0KTsKICAgIH0KICAgIGVsc2UgewogICAgICBTZXJpYWwucHJpbnRsbigiSW52YWxpZCByZXNwb25zZSEiKTsKICAgIH0KICAgIGh0dHAuZW5kKCk7CiAgfQogIGRlbGF5KDEwMDApOwoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32C3@ESP32C3 Dev Module"><block type="base_setup" id="NxRa5*(He2R*9}H;vq.k" x="0" y="0"><statement name="DO"><block type="serial_begin" id="*+LE:c5-5SJbbC}njdQS"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="a$X+Ts^BZ*=GGxKJp9/m"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="#yc4^@{(t5|kGrWw_D;g"><value name="SSID"><shadow type="text" id="1|#diGgqfUC,F8-Nyw8$"><field name="TEXT">Xiaomi_0432</field></shadow></value><value name="PWD"><shadow type="text" id="sXQttltTvQpg9hlM{w/1"><field name="TEXT">18768195210</field></shadow></value><next><block type="weather_seniverse_city_weather" id="Ug+6{.JeNK:(Z-+QMb*O"><field name="api">weather/now</field><field name="language">zh-Hans</field><field name="unit">c</field><value name="location"><shadow type="china_city" id="w4i8{.uL/OD~8/}$V8C|"><field name="province">浙江</field><field name="city">杭州</field></shadow></value><value name="private_key"><shadow type="weather_private_key" id="yy;)W${R~h|ppa~IKlSs"><field name="key">S9l2sb_ZK-UsWaynG</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="N+T9b8^H^f[bWK+z+}X}" x="0" y="272"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="|ID;d?1+51W,ME4B7-`v"><field name="NUM">5000</field></shadow></value><statement name="zxhs"><block type="controls_if" id="|c3Wf7|qcVqY=tEjIikW"><value name="IF0"><block type="weather_get_seniverse_weather_info" id="(^t[$lHmT3m?0j3,[{oj"><field name="api">weather/now</field><field name="type">update</field></block></value><statement name="DO0"><block type="serial_println" id=";y_2;w5C;yNk9Sp[V)8w"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="weather_get_seniverse_weather_info1" id="91})7l7/#gX*uoxg6?JQ"><field name="type">getWeatherText</field></block></value></block></statement></block></statement></block></xml><config>{"CDCOnBoot":{"key":"cdc","label":"Enabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"160","label":"160MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxFU1A4MjY2X1Nlbml2ZXJzZS5oPgojaW5jbHVkZSA8U2ltcGxlVGltZXIuaD4KCldlYXRoZXJOb3cgd2VhdGhlck5vdzsKU2ltcGxlVGltZXIgdGltZXI7Cgp2b2lkIFNpbXBsZV90aW1lcl8xKCkgewogIGlmICh3ZWF0aGVyTm93LnVwZGF0ZSgpKSB7CiAgICBTZXJpYWwucHJpbnRsbih3ZWF0aGVyTm93LmdldFdlYXRoZXJUZXh0KCkpOwoKICB9Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgV2lGaS5iZWdpbigiWGlhb21pXzA0MzIiLCAiMTg3NjgxOTUyMTAiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIHdlYXRoZXJOb3cuY29uZmlnKCJTOWwyc2JfWkstVXNXYXluRyIsICJoYW5nemhvdSIsICJjIiwgInpoLUhhbnMiKTsKICB0aW1lci5zZXRJbnRlcnZhbCg1MDAwTCwgU2ltcGxlX3RpbWVyXzEpOwoKfQoKdm9pZCBsb29wKCl7CiAgdGltZXIucnVuKCk7Cgp9</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S2@Generic ESP32S2 Module"><block type="base_setup" id="BW;FlBf1=G?PkND`ijxA" x="-379" y="174"><statement name="DO"><block type="serial_begin" id="bf~pF7aXupJ`d!ni9{68"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="L6P8YTnXzqPD[tMuYoan"><field name="NUM">9600</field></shadow></value><next><block type="serial_print" id="H/W]`Rt#.-?a:RJwLa$M"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="@I$Ng+4K()e}UF0,Xjp]"><field name="TEXT">=========Base64编解码=========</field></block></value><next><block type="serial_print" id="`d3Hh_Ti?-UY7wOY@vcf"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="J8?H9Q.iIWq.rf(:w*PB"><field name="TYPE">BASE64</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id="GDFKfTOw=UIpH-VEmz!/"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id=")eo[4Lod8kDO_pDa?4lv"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="0V2xn=os|pqjE#rZew3P"><field name="TYPE">BASE64</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="=jqkwR}aVi!83kx1(0ky"><field name="TEXT">5L2g5aW9TWl4bHk=</field></shadow></value></block></value><next><block type="serial_print" id="#7K}Yhk3qhmV./bwQr5;"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="ut3YM,rxoiYJXdvk23W^"><field name="TEXT">==========Url编解码===========</field></block></value><next><block type="serial_print" id="Aq^Vioo*xK={vh9e}@Vp"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="s43sgBC4KQb+s{?,Z}K0"><field name="TYPE">URL</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id=",bDlu;#x}f|b@ElFwUz1"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id="x:kJ1HcUw_r,_A7qWP#s"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="82A@G!l-zG-JQ5S0a,P6"><field name="TYPE">URL</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="|75viF}9th~6=1-!TzT}"><field name="TEXT">%E4%BD%A0%E5%A5%BDMixly</field></shadow></value></block></value><next><block type="serial_print" id="5fmmL?u86:g6G[Q~E)_j"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="cXmXosOy0Ir(s1{30/WN"><field name="TEXT">==============================</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0"},"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxyQmFzZTY0Lmg+CiNpbmNsdWRlIDxVUkxDb2RlLmg+CgpVUkxDb2RlIHVybENvZGU7CgpTdHJpbmcgdXJsRW5jb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnN0cmNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxlbmNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS51cmxjb2RlOwp9CgpTdHJpbmcgdXJsRGVjb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnVybGNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxkZWNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS5zdHJjb2RlOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFNlcmlhbC5wcmludGxuKCI9PT09PT09PT1CYXNlNjTnvJbop6PnoIE9PT09PT09PT0iKTsKICBTZXJpYWwucHJpbnRsbihyYmFzZTY0LmVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4ocmJhc2U2NC5kZWNvZGUoIjVMMmc1YVc5VFdsNGJIaz0iKSk7CiAgU2VyaWFsLnByaW50bG4oIj09PT09PT09PT1VcmznvJbop6PnoIE9PT09PT09PT09PSIpOwogIFNlcmlhbC5wcmludGxuKHVybEVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4odXJsRGVjb2RlKCIlRTQlQkQlQTAlRTUlQTUlQkRNaXhseSIpKTsKICBTZXJpYWwucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Cn0KCnZvaWQgbG9vcCgpewoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S2@Generic ESP32S2 Module"><block type="base_setup" id="*{6gvYug,:6](/yz?0+S" x="-553" y="-105"><statement name="DO"><block type="WIFI_info" id="dP9EFCJA?8mq~ZQ-2O9y"><value name="SSID"><shadow type="text" id="*THzNH#t95gyFB+6T+4,"><field name="TEXT">WIFI名称</field></shadow></value><value name="PWD"><shadow type="text" id="gg6Tl:ih7H*f~Sq1*o:e"><field name="TEXT">WIFI密码</field></shadow></value></block></statement></block><block type="http_post" id="q!ybIpE5MIFsXHF:xgAG" x="-550" y="29"><field name="TYPE">POST</field><value name="api"><shadow type="text" id="U=C8wcqDr|/1L1,]BPuH"><field name="TEXT">http://IPAddress:3000/login/</field></shadow></value><value name="data"><shadow type="text" id=";Ff*NMEDul|#gt0TQi(P"><field name="TEXT">{\"name\":\"Mixly\"}</field></shadow></value><statement name="success"><block type="serial_println" id="Rm$e2lw|3~?cBayS}_dL"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="ZrX;qVMf-`AU76z/lbnE"><field name="VAR">Request_result</field></block></value></block></statement><statement name="failure"><block type="serial_println" id="1Hv2M~j]/xh9f+O{(N[U"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="7gRGTJTmHNfnZ+y5mciZ"><field name="TEXT">Invalid response!</field></block></value></block></statement><next><block type="controls_delay" id="1bN(m7oCQ;+(E@+_7@zR"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="FlA;{ShbPi#L=MpX,_@E"><field name="NUM">1000</field></shadow></value></block></next></block></xml><config>{"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0"},"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxIVFRQQ2xpZW50Lmg+Cgp2b2lkIHNldHVwKCl7CiAgV2lGaS5iZWdpbigiV0lGSeWQjeensCIsICJXSUZJ5a+G56CBIik7CiAgd2hpbGUgKFdpRmkuc3RhdHVzKCkgIT0gV0xfQ09OTkVDVEVEKSB7CiAgICBkZWxheSg1MDApOwogICAgU2VyaWFsLnByaW50KCIuIik7CiAgfQogIFNlcmlhbC5wcmludGxuKCJMb2NhbCBJUDoiKTsKICBTZXJpYWwucHJpbnQoV2lGaS5sb2NhbElQKCkpOwoKICBTZXJpYWwuYmVnaW4oOTYwMCk7Cn0KCnZvaWQgbG9vcCgpewogIGlmIChXaUZpLnN0YXR1cygpID09IFdMX0NPTk5FQ1RFRCkgewogICAgSFRUUENsaWVudCBodHRwOwogICAgaHR0cC5iZWdpbigiaHR0cDovL0lQQWRkcmVzczozMDAwL2xvZ2luLyIpOwogICAgaHR0cC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICBpbnQgaHR0cENvZGUgPSBodHRwLlBPU1QoIntcIm5hbWVcIjpcIk1peGx5XCJ9Iik7CiAgICBpZiAoaHR0cENvZGUgPiAwKSB7CiAgICAgIFN0cmluZyBSZXF1ZXN0X3Jlc3VsdCA9IGh0dHAuZ2V0U3RyaW5nKCk7CiAgICAgIFNlcmlhbC5wcmludGxuKFJlcXVlc3RfcmVzdWx0KTsKICAgIH0KICAgIGVsc2UgewogICAgICBTZXJpYWwucHJpbnRsbigiSW52YWxpZCByZXNwb25zZSEiKTsKICAgIH0KICAgIGh0dHAuZW5kKCk7CiAgfQogIGRlbGF5KDEwMDApOwoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S2@Generic ESP32S2 Module"><block type="base_setup" id="(sdBM99RePI;g~/jn]N!" x="0" y="0"><statement name="DO"><block type="serial_begin" id="Y-wJ{80ik(8b2{IhG.}c"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="VG,cyN@?@`:W?HAM.zg9"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="]S?ASG~POy(-Azt#7q,S"><value name="SSID"><shadow type="text" id="QAh|Xlt16YrnKzo:GsH?"><field name="TEXT">Xiaomi_0432</field></shadow></value><value name="PWD"><shadow type="text" id="89m278A2_1!Jxj_Wxq#{"><field name="TEXT">18768195210</field></shadow></value><next><block type="weather_seniverse_city_weather" id="yd^79|jJ6LHt2,v4jE:i"><field name="api">weather/now</field><field name="language">zh-Hans</field><field name="unit">c</field><value name="location"><shadow type="china_city" id="O!z!0Qfr4Dm)v;SOad[="><field name="province">浙江</field><field name="city">杭州</field></shadow></value><value name="private_key"><shadow type="weather_private_key" id="TH]*0FBP,DIt+,m3xf@g"><field name="key">S9l2sb_ZK-UsWaynG</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="rs6H:~P(1s?EVa1L457j" x="0" y="272"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="JWI{T7az65hn?cI!}uPX"><field name="NUM">5000</field></shadow></value><statement name="zxhs"><block type="controls_if" id="-};=O68LRJWhaJ+=j8FX"><value name="IF0"><block type="weather_get_seniverse_weather_info" id="wKvsmflTM~:2wt9r8pX`"><field name="api">weather/now</field><field name="type">update</field></block></value><statement name="DO0"><block type="serial_println" id="`nx).nsL}T_p[FM;BH-h"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="weather_get_seniverse_weather_info1" id="^9u?5umYl?o(?INE@JLZ"><field name="type">getWeatherText</field></block></value></block></statement></block></statement></block></xml><config>{"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0"},"PSRAM":{"key":"disabled","label":"Disabled"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"FlashMode":{"key":"qio","label":"QIO"},"FlashFreq":{"key":"80","label":"80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxFU1A4MjY2X1Nlbml2ZXJzZS5oPgojaW5jbHVkZSA8U2ltcGxlVGltZXIuaD4KCldlYXRoZXJOb3cgd2VhdGhlck5vdzsKU2ltcGxlVGltZXIgdGltZXI7Cgp2b2lkIFNpbXBsZV90aW1lcl8xKCkgewogIGlmICh3ZWF0aGVyTm93LnVwZGF0ZSgpKSB7CiAgICBTZXJpYWwucHJpbnRsbih3ZWF0aGVyTm93LmdldFdlYXRoZXJUZXh0KCkpOwoKICB9Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgV2lGaS5iZWdpbigiWGlhb21pXzA0MzIiLCAiMTg3NjgxOTUyMTAiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIHdlYXRoZXJOb3cuY29uZmlnKCJTOWwyc2JfWkstVXNXYXluRyIsICJoYW5nemhvdSIsICJjIiwgInpoLUhhbnMiKTsKICB0aW1lci5zZXRJbnRlcnZhbCg1MDAwTCwgU2ltcGxlX3RpbWVyXzEpOwoKfQoKdm9pZCBsb29wKCl7CiAgdGltZXIucnVuKCk7Cgp9</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S3@ESP32S3 Dev Module"><block type="base_setup" id="BW;FlBf1=G?PkND`ijxA" x="-379" y="174"><statement name="DO"><block type="serial_begin" id="bf~pF7aXupJ`d!ni9{68"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="L6P8YTnXzqPD[tMuYoan"><field name="NUM">9600</field></shadow></value><next><block type="serial_print" id="H/W]`Rt#.-?a:RJwLa$M"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="@I$Ng+4K()e}UF0,Xjp]"><field name="TEXT">=========Base64编解码=========</field></block></value><next><block type="serial_print" id="`d3Hh_Ti?-UY7wOY@vcf"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="J8?H9Q.iIWq.rf(:w*PB"><field name="TYPE">BASE64</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id="GDFKfTOw=UIpH-VEmz!/"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id=")eo[4Lod8kDO_pDa?4lv"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="0V2xn=os|pqjE#rZew3P"><field name="TYPE">BASE64</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="=jqkwR}aVi!83kx1(0ky"><field name="TEXT">5L2g5aW9TWl4bHk=</field></shadow></value></block></value><next><block type="serial_print" id="#7K}Yhk3qhmV./bwQr5;"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="ut3YM,rxoiYJXdvk23W^"><field name="TEXT">==========Url编解码===========</field></block></value><next><block type="serial_print" id="Aq^Vioo*xK={vh9e}@Vp"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="s43sgBC4KQb+s{?,Z}K0"><field name="TYPE">URL</field><field name="OPTION">ENCODE</field><value name="VALUE"><shadow type="text" id=",bDlu;#x}f|b@ElFwUz1"><field name="TEXT">你好Mixly</field></shadow></value></block></value><next><block type="serial_print" id="x:kJ1HcUw_r,_A7qWP#s"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text_base64_url_codec" id="82A@G!l-zG-JQ5S0a,P6"><field name="TYPE">URL</field><field name="OPTION">DECODE</field><value name="VALUE"><shadow type="text" id="|75viF}9th~6=1-!TzT}"><field name="TEXT">%E4%BD%A0%E5%A5%BDMixly</field></shadow></value></block></value><next><block type="serial_print" id="5fmmL?u86:g6G[Q~E)_j"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="cXmXosOy0Ir(s1{30/WN"><field name="TEXT">==============================</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"FlashMode":{"key":"qio","label":"QIO 80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"},"USBMode":{"key":"default","label":"USB-OTG (TinyUSB)"},"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0 / Hardware CDC"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxyQmFzZTY0Lmg+CiNpbmNsdWRlIDxVUkxDb2RlLmg+CgpVUkxDb2RlIHVybENvZGU7CgpTdHJpbmcgdXJsRW5jb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnN0cmNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxlbmNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS51cmxjb2RlOwp9CgpTdHJpbmcgdXJsRGVjb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnVybGNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxkZWNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS5zdHJjb2RlOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFNlcmlhbC5wcmludGxuKCI9PT09PT09PT1CYXNlNjTnvJbop6PnoIE9PT09PT09PT0iKTsKICBTZXJpYWwucHJpbnRsbihyYmFzZTY0LmVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4ocmJhc2U2NC5kZWNvZGUoIjVMMmc1YVc5VFdsNGJIaz0iKSk7CiAgU2VyaWFsLnByaW50bG4oIj09PT09PT09PT1VcmznvJbop6PnoIE9PT09PT09PT09PSIpOwogIFNlcmlhbC5wcmludGxuKHVybEVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4odXJsRGVjb2RlKCIlRTQlQkQlQTAlRTUlQTUlQkRNaXhseSIpKTsKICBTZXJpYWwucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Cn0KCnZvaWQgbG9vcCgpewoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S3@ESP32S3 Dev Module"><block type="base_setup" id="*{6gvYug,:6](/yz?0+S" x="0" y="0"><statement name="DO"><block type="WIFI_info" id="dP9EFCJA?8mq~ZQ-2O9y"><value name="SSID"><shadow type="text" id="*THzNH#t95gyFB+6T+4,"><field name="TEXT">WIFI名称</field></shadow></value><value name="PWD"><shadow type="text" id="gg6Tl:ih7H*f~Sq1*o:e"><field name="TEXT">WIFI密码</field></shadow></value></block></statement></block><block type="http_post" id="q!ybIpE5MIFsXHF:xgAG" x="0" y="106"><field name="TYPE">POST</field><value name="api"><shadow type="text" id="U=C8wcqDr|/1L1,]BPuH"><field name="TEXT">http://IPAddress:3000/login/</field></shadow></value><value name="data"><shadow type="text" id=";Ff*NMEDul|#gt0TQi(P"><field name="TEXT">{\"name\":\"Mixly\"}</field></shadow></value><statement name="success"><block type="serial_println" id="Rm$e2lw|3~?cBayS}_dL"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="ZrX;qVMf-`AU76z/lbnE"><field name="VAR">Request_result</field></block></value></block></statement><statement name="failure"><block type="serial_println" id="1Hv2M~j]/xh9f+O{(N[U"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="7gRGTJTmHNfnZ+y5mciZ"><field name="TEXT">Invalid response!</field></block></value></block></statement><next><block type="controls_delay" id="1bN(m7oCQ;+(E@+_7@zR"><field name="UNIT">delay</field><value name="DELAY_TIME"><shadow type="math_number" id="FlA;{ShbPi#L=MpX,_@E"><field name="NUM">1000</field></shadow></value></block></next></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"FlashMode":{"key":"qio","label":"QIO 80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"},"USBMode":{"key":"default","label":"USB-OTG (TinyUSB)"},"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0 / Hardware CDC"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxIVFRQQ2xpZW50Lmg+Cgp2b2lkIHNldHVwKCl7CiAgV2lGaS5iZWdpbigiV0lGSeWQjeensCIsICJXSUZJ5a+G56CBIik7CiAgd2hpbGUgKFdpRmkuc3RhdHVzKCkgIT0gV0xfQ09OTkVDVEVEKSB7CiAgICBkZWxheSg1MDApOwogICAgU2VyaWFsLnByaW50KCIuIik7CiAgfQogIFNlcmlhbC5wcmludGxuKCJMb2NhbCBJUDoiKTsKICBTZXJpYWwucHJpbnQoV2lGaS5sb2NhbElQKCkpOwoKICBTZXJpYWwuYmVnaW4oOTYwMCk7Cn0KCnZvaWQgbG9vcCgpewogIGlmIChXaUZpLnN0YXR1cygpID09IFdMX0NPTk5FQ1RFRCkgewogICAgSFRUUENsaWVudCBodHRwOwogICAgaHR0cC5iZWdpbigiaHR0cDovL0lQQWRkcmVzczozMDAwL2xvZ2luLyIpOwogICAgaHR0cC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICBpbnQgaHR0cENvZGUgPSBodHRwLlBPU1QoIntcIm5hbWVcIjpcIk1peGx5XCJ9Iik7CiAgICBpZiAoaHR0cENvZGUgPiAwKSB7CiAgICAgIFN0cmluZyBSZXF1ZXN0X3Jlc3VsdCA9IGh0dHAuZ2V0U3RyaW5nKCk7CiAgICAgIFNlcmlhbC5wcmludGxuKFJlcXVlc3RfcmVzdWx0KTsKICAgIH0KICAgIGVsc2UgewogICAgICBTZXJpYWwucHJpbnRsbigiSW52YWxpZCByZXNwb25zZSEiKTsKICAgIH0KICAgIGh0dHAuZW5kKCk7CiAgfQogIGRlbGF5KDEwMDApOwoKfQ==</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP32S3@ESP32S3 Dev Module"><block type="base_setup" id=":e(X(.yjdYO.Yz-Kf$u3" x="0" y="0"><statement name="DO"><block type="serial_begin" id="Au|@MgzxSU!32v9VgwYR"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="Z!F]@/]d(@rGZQI(e0J4"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="O6o8gq[=4$UP(@O2lB)_"><value name="SSID"><shadow type="text" id=":9sggDkJ{JeYwM)7*?3B"><field name="TEXT">Xiaomi_0432</field></shadow></value><value name="PWD"><shadow type="text" id="bS][iZ;vwo+kZsxIa3f$"><field name="TEXT">18768195210</field></shadow></value><next><block type="weather_seniverse_city_weather" id="~dc|R@1ZkNmx~}{i!jMy"><field name="api">weather/now</field><field name="language">zh-Hans</field><field name="unit">c</field><value name="location"><shadow type="china_city" id="s#5!byiZHAU@r)rOz`WW"><field name="province">浙江</field><field name="city">杭州</field></shadow></value><value name="private_key"><shadow type="weather_private_key" id="/19Z=K9?y(-i6w-l2avX"><field name="key">S9l2sb_ZK-UsWaynG</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="aO79v:iB3gET1,LzIsWW" x="0" y="272"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="KA_UlDv*[;u2PObbq*M3"><field name="NUM">5000</field></shadow></value><statement name="zxhs"><block type="controls_if" id="@^T5!9r|rBA~mH:V?D8J"><value name="IF0"><block type="weather_get_seniverse_weather_info" id="QNsVa~j0;/hooz`K6#dD"><field name="api">weather/now</field><field name="type">update</field></block></value><statement name="DO0"><block type="serial_println" id="dFx]/,mIh-(OW?dnV@$Z"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="weather_get_seniverse_weather_info1" id=",sE*|CmczcEijbsy!DZU"><field name="type">getWeatherText</field></block></value></block></statement></block></statement></block></xml><config>{"PSRAM":{"key":"disabled","label":"Disabled"},"FlashMode":{"key":"qio","label":"QIO 80MHz"},"FlashSize":{"key":"4M","label":"4MB (32Mb)"},"LoopCore":{"key":"1","label":"Core 1"},"EventsCore":{"key":"1","label":"Core 1"},"USBMode":{"key":"default","label":"USB-OTG (TinyUSB)"},"CDCOnBoot":{"key":"default","label":"Disabled"},"MSCOnBoot":{"key":"default","label":"Disabled"},"DFUOnBoot":{"key":"default","label":"Disabled"},"UploadMode":{"key":"default","label":"UART0 / Hardware CDC"},"PartitionScheme":{"key":"default","label":"Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"},"CPUFreq":{"key":"240","label":"240MHz (WiFi)"},"UploadSpeed":{"key":"921600","label":"921600"}}</config><code>CiNpbmNsdWRlIDxXaUZpLmg+CiNpbmNsdWRlIDxFU1A4MjY2X1Nlbml2ZXJzZS5oPgojaW5jbHVkZSA8U2ltcGxlVGltZXIuaD4KCldlYXRoZXJOb3cgd2VhdGhlck5vdzsKU2ltcGxlVGltZXIgdGltZXI7Cgp2b2lkIFNpbXBsZV90aW1lcl8xKCkgewogIGlmICh3ZWF0aGVyTm93LnVwZGF0ZSgpKSB7CiAgICBTZXJpYWwucHJpbnRsbih3ZWF0aGVyTm93LmdldFdlYXRoZXJUZXh0KCkpOwoKICB9Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgV2lGaS5iZWdpbigiWGlhb21pXzA0MzIiLCAiMTg3NjgxOTUyMTAiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIHdlYXRoZXJOb3cuY29uZmlnKCJTOWwyc2JfWkstVXNXYXluRyIsICJoYW5nemhvdSIsICJjIiwgInpoLUhhbnMiKTsKICB0aW1lci5zZXRJbnRlcnZhbCg1MDAwTCwgU2ltcGxlX3RpbWVyXzEpOwoKfQoKdm9pZCBsb29wKCl7CiAgdGltZXIucnVuKCk7Cgp9</code>

View File

@@ -0,0 +1,142 @@
{
"ESP32 Dev Module": {
"Handbit": {
"buzzer play two tigers.mix": {
"__file__": true,
"__name__": "buzzer play two tigers.mix"
},
"display Chinese.mix": {
"__file__": true,
"__name__": "display Chinese.mix"
},
"display Text.mix": {
"__file__": true,
"__name__": "display Text.mix"
},
"RGB LED.mix": {
"__file__": true,
"__name__": "RGB LED.mix"
},
"__file__": false,
"__name__": "Handbit"
},
"MixGo": {
"MPU9250.mix": {
"__file__": true,
"__name__": "MPU9250.mix"
},
"__file__": false,
"__name__": "MixGo"
},
"MPU6050打印数值.mix": {
"__file__": true,
"__name__": "MPU6050打印数值.mix"
},
"PWM模拟输出.mix": {
"__file__": true,
"__name__": "PWM模拟输出.mix"
},
"SPIFFS读写数据测试.mix": {
"__file__": true,
"__name__": "SPIFFS读写数据测试.mix"
},
"URL和Base64编解码.mix": {
"__file__": true,
"__name__": "URL和Base64编解码.mix"
},
"WiFi事件.mix": {
"__file__": true,
"__name__": "WiFi事件.mix"
},
"wifi控制小车.mix": {
"__file__": true,
"__name__": "wifi控制小车.mix"
},
"中断控制.mix": {
"__file__": true,
"__name__": "中断控制.mix"
},
"使用http发送POST请求.mix": {
"__file__": true,
"__name__": "使用http发送POST请求.mix"
},
"定时器.mix": {
"__file__": true,
"__name__": "定时器.mix"
},
"心知天气.mix": {
"__file__": true,
"__name__": "心知天气.mix"
},
"旋转编码器读取数据.mix": {
"__file__": true,
"__name__": "旋转编码器读取数据.mix"
},
"简明教程": {
"ESP32双核的简单使用.mix": {
"__file__": true,
"__name__": "ESP32双核的简单使用.mix"
},
"ESPnow无线通讯简单案例.mix": {
"__file__": true,
"__name__": "ESPnow无线通讯简单案例.mix"
},
"__file__": false,
"__name__": "简明教程"
},
"触摸中断.mix": {
"__file__": true,
"__name__": "触摸中断.mix"
},
"__file__": false,
"__name__": "ESP32 Dev Module"
},
"ESP32C3 Dev Module": {
"URL和Base64编解码.mix": {
"__file__": true,
"__name__": "URL和Base64编解码.mix"
},
"使用http发送POST请求.mix": {
"__file__": true,
"__name__": "使用http发送POST请求.mix"
},
"心知天气.mix": {
"__file__": true,
"__name__": "心知天气.mix"
},
"__file__": false,
"__name__": "ESP32C3 Dev Module"
},
"ESP32S2 Dev Module": {
"URL和Base64编解码.mix": {
"__file__": true,
"__name__": "URL和Base64编解码.mix"
},
"使用http发送POST请求.mix": {
"__file__": true,
"__name__": "使用http发送POST请求.mix"
},
"心知天气.mix": {
"__file__": true,
"__name__": "心知天气.mix"
},
"__file__": false,
"__name__": "ESP32S2 Dev Module"
},
"ESP32S3 Dev Module": {
"URL和Base64编解码.mix": {
"__file__": true,
"__name__": "URL和Base64编解码.mix"
},
"使用http发送POST请求.mix": {
"__file__": true,
"__name__": "使用http发送POST请求.mix"
},
"心知天气.mix": {
"__file__": true,
"__name__": "心知天气.mix"
},
"__file__": false,
"__name__": "ESP32S3 Dev Module"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
{
"name": "@mixly/arduino-esp32",
"version": "1.1.0",
"description": "适用于mixly的arduino esp32模块",
"scripts": {
"build:dev": "webpack --config=webpack.dev.js",
"build:prod": "webpack --config=webpack.prod.js"
},
"main": "./export.js",
"author": "Mixly Team",
"keywords": [
"mixly",
"mixly-plugin",
"arduino-esp32"
],
"homepage": "https://gitee.com/mixly2/mixly2.0_src/tree/develop/boards/default_src/arduino_esp32",
"bugs": {
"url": "https://gitee.com/mixly2/mixly2.0_src/issues"
},
"repository": {
"type": "git",
"url": "https://gitee.com/mixly2/mixly2.0_src.git",
"directory": "default_src/arduino_esp32"
},
"publishConfig": {
"access": "public"
},
"license": "Apache 2.0"
}

View File

@@ -0,0 +1,307 @@
import { Profile } from 'mixly';
const pins = {};
pins.arduino_esp32 = {
description: "esp32_Arduino",
digital: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
digitalWrite: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
interrupt: [["0", "0"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
pwm: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
analog: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
tx: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["31", "31"]],
dac: [["25", "25"], ["26", "26"]],
SDA: [["21", "21"]],
SCL: [["22", "22"]],
MOSI: [["23", "23"]],
MISO: [["19", "19"]],
SCK: [["18", "18"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
touch: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins.arduino_esp32s2 = {
description: "esp32s2_Arduino",
digital: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["24", "24"], ["25", "25"], ["26", "26"], ["27", "27"], ["28", "28"], ["29", "29"], ["30", "30"], ["31", "31"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"], ["40", "40"], ["41", "41"], ["42", "42"], ["43", "43"], ["44", "44"], ["45", "45"], ["46", "46"]],
digitalWrite: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["24", "24"], ["25", "25"], ["26", "26"], ["27", "27"], ["28", "28"], ["29", "29"], ["30", "30"], ["31", "31"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"], ["40", "40"], ["41", "41"], ["42", "42"], ["43", "43"], ["44", "44"], ["45", "45"]],
interrupt: [["0", "0"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
pwm: [["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["24", "24"], ["25", "25"], ["26", "26"], ["27", "27"], ["28", "28"], ["29", "29"], ["30", "30"], ["31", "31"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"], ["40", "40"], ["41", "41"], ["42", "42"], ["43", "43"], ["44", "44"], ["45", "45"]],
analog: [["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
tx: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["31", "31"]],
dac: [["17", "17"], ["18", "18"]],
SDA: [["8", "8"]],
SCL: [["9", "9"]],
MOSI: [["41", "41"]],
MISO: [["40", "40"]],
SCK: [["39", "39"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
touch: [["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"]],
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins.esp32_handbit = {
description: "esp32_handbit",
digital: [["P0", "33"], ["P1", "32"], ["P2", "35"], ["P3", "34"], ["P4", "39"], ["P5", "0"], ["P6", "16"], ["P7", "17"], ["P8", "26"], ["P9", "25"], ["P10", "36"], ["P11", "2"], ["P13", "18"], ["P14", "19"], ["P15", "21"], ["P16", "5"], ["P19", "22"], ["P20", "23"]],
digitalWrite: [["P0", "33"], ["P1", "32"], ["P2", "35"], ["P3", "34"], ["P4", "39"], ["P5", "0"], ["P6", "16"], ["P7", "17"], ["P8", "26"], ["P9", "25"], ["P10", "36"], ["P11", "2"], ["P13", "18"], ["P14", "19"], ["P15", "21"], ["P16", "5"], ["P19", "22"], ["P20", "23"]],
interrupt: [["P0", "33"], ["P1", "32"], ["P2", "35"], ["P3", "34"], ["P4", "39"], ["P5", "0"], ["P6", "16"], ["P7", "17"], ["P8", "26"], ["P9", "25"], ["P10", "36"], ["P11", "2"], ["P13", "18"], ["P14", "19"], ["P15", "21"], ["P16", "5"], ["P19", "22"], ["P20", "23"]],
pwm: [["P0", "33"], ["P1", "32"], ["P8", "26"], ["P9", "25"], ["P13", "18"], ["P14", "19"], ["P15", "21"], ["P16", "5"]],
analog: [["P11", "2"], ["P28", "4"], ["P25", "12"], ["P26", "13"], ["P24", "14"], ["P27", "15"], ["P6", "16"], ["P9", "25"], ["P8", "26"], ["P23", "27"], ["P1", "32"], ["P0", "33"], ["P3", "34"], ["P2", "35"],],
tx: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["P23", "27"], ["31", "31"]],
dac: [["P9", "25"], ["P8", "26"]],
SDA: [["P20", "23"]],
SCL: [["P19", "22"]],
MOSI: [["P20", "23"]],
MISO: [["P14", "19"]],
SCK: [["P13", "18"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
touch: [["P", "27"], ["Y", "14"], ["T", "12"], ["H", "13"], ["O", "15"], ["N", "4"]],
button: [["A", "0"], ["B", "2"]],
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins.esp32_MixGo = {
description: "esp32_MixGo",
digital: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
digitalWrite: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
interrupt: [["0", "0"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
pwm: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"]],
analog: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
tx: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["31", "31"]],
dac: [["25", "25"], ["26", "26"]],
SDA: [["21", "21"]],
SCL: [["22", "22"]],
MOSI: [["23", "23"]],
MISO: [["19", "19"]],
SCK: [["18", "18"]],
button: [["A", "17"], ["B", "16"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
touch: [["1", "32"], ["2", "33"], ["3", "25"], ["4", "26"]],
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins.PocketCard = {
description: "PocketCard",
digital: [["P0", "26"], ["P1", "33"], ["P2", "32"], ["P3", "35"], ["P4", "4"], ["P5", "14"], ["P6", "16"], ["P7", "17"], ["P8", "27"], ["P9", "13"], ["P10", "2"], ["P11", "25"], ["P12", "15"], ["P13", "18"], ["P14", "19"], ["P15", "23"], ["P16", "5"], ["P19", "22"], ["P20", "21"]],
digitalWrite: [["P0", "26"], ["P1", "33"], ["P2", "32"], ["P4", "4"], ["P5", "14"], ["P6", "16"], ["P7", "17"], ["P8", "27"], ["P9", "13"], ["P10", "2"], ["P11", "25"], ["P12", "15"], ["P13", "18"], ["P14", "19"], ["P15", "23"], ["P16", "5"], ["P19", "22"], ["P20", "21"]],
interrupt: [["P0", "26"], ["P1", "33"], ["P2", "32"], ["P4", "4"], ["P5", "14"], ["P6", "16"], ["P7", "17"], ["P8", "27"], ["P9", "13"], ["P10", "2"], ["P11", "25"], ["P12", "15"], ["P13", "18"], ["P14", "19"], ["P15", "23"], ["P16", "5"], ["P19", "22"], ["P20", "21"]],
pwm: [["P0", "26"], ["P1", "33"], ["P2", "32"], ["P4", "4"], ["P5", "14"], ["P6", "16"], ["P7", "17"], ["P8", "27"], ["P9", "13"], ["P10", "2"], ["P11", "25"], ["P12", "15"], ["P13", "18"], ["P14", "19"], ["P15", "23"], ["P16", "5"], ["P19", "22"], ["P20", "21"]],
analog: [["P0", "26"], ["P1", "33"], ["P2", "32"], ["P3", "35"], ["P4", "4"], ["P5", "14"], ["P8", "27"], ["P9", "13"], ["P10", "2"], ["P11", "25"], ["P12", "15"]],
tx: [["P0", "26"], ["P10", "2"], ["P4", "4"], ["P16", "5"], ["P9", "13"], ["P5", "14"], ["P12", "15"], ["P6", "16"], ["P7", "17"], ["P13", "18"], ["P14", "19"], ["P20", "21"], ["P19", "22"], ["P15", "23"], ["P11", "25"], ["P8", "27"]],
dac: [["P11", "25"], ["P0", "26"]],
SDA: [["P20", "21"]],
SCL: [["P19", "22"]],
MOSI: [["P15", "23"]],
MISO: [["P14", "19"]],
SCK: [["P13", "18"]],
button: [["A", "14"], ["B", "25"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["P10", "2"], ["3", "3"], ["P4", "4"], ["P16", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["P9", "13"], ["P5", "14"], ["P12", "15"], ["P6", "16"], ["P7", "17"], ["P13", "18"], ["P14", "19"]],
touch: [["P0", "26"], ["P1", "33"], ["P2", "32"]],
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins.m5stick_c = {
description: "M5Stick-C",
digital: [["G0", "G0"], ["G9", "G9"], ["G10", "G10"], ["G26", "G26"], ["G32", "G32"], ["G33", "G33"], ["G36", "G36"], ["G37", "G37"], ["G39", "G39"]],
digitalWrite: [["G0", "G0"], ["G9", "G9"], ["G10", "G10"], ["G26", "G26"], ["G32", "G32"], ["G33", "G33"], ["G36", "G36"], ["G37", "G37"], ["G39", "G39"]],
analog: [["G0", "G0"], ["G26", "G26"], ["G32", "G32"]],
pwm: [["G0", "G0"], ["G26", "G26"], ["G32", "G32"]],
interrupt: [["G0", "G0"], ["G9", "G9"], ["G10", "G10"], ["G26", "G26"], ["G32", "G32"], ["G33", "G33"], ["G36", "G36"], ["G37", "G37"], ["G39", "G39"]],
tx: [["G0", "G0"], ["G26", "G26"]],
dac: [["DAC1", "DAC1"], ["DAC2", "DAC2"]],
SDA: [["SDA", "SDA"]],
SCL: [["SCL", "SCL"]],
MOSI: [["MOSI", "MOSI"]],
MISO: [["MISO", "MISO"]],
SCK: [["SCK", "SCK"]],
TONE_NOTE: [["NOTE_C", "NOTE_C"], ["NOTE_Cs", "NOTE_Cs"], ["NOTE_D", "NOTE_D"], ["NOTE_Eb", "NOTE_Eb"], ["NOTE_E", "NOTE_E"], ["NOTE_F", "NOTE_F"], ["NOTE_Fs", "NOTE_Fs"], ["NOTE_G", "NOTE_G"], ["NOTE_Gs", "NOTE_Gs"], ["NOTE_A", "NOTE_A"], ["NOTE_Bb", "NOTE_Bb"], ["NOTE_B", "NOTE_B"], ["NOTE_MAX", "NOTE_MAX"]],
OCTAVE: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
CHANNEL: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
PWM_RESOLUTION: [["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"]],
touch: [["G0", "G0"], ["G32", "G32"], ["G33", "G33"]],
serial_select: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial: 9600
};
pins.arduino_esp32c3 = {
description: "esp32c3_Arduino",
digital: Profile.generate([ '0-11', '18-21' ]),
digitalWrite: Profile.generate([ '0-11', '18-21' ]),
interrupt: Profile.generate([ '0-11', '18-21' ]),
pwm: Profile.generate([ '0-10', '18-21' ]),
analog: Profile.generate([ '0-5' ]),
tx: Profile.generate([ '21' ]),
dac: [["25", "25"], ["26", "26"]],
SDA: [["8","8"]],
SCL: [["9","9"]],
MOSI: [["6","6"]],
MISO: [["5","5"]],
SCK: [["4","4"]],
TONE_NOTE: [["NOTE_C","NOTE_C"],["NOTE_Cs","NOTE_Cs"],["NOTE_D","NOTE_D"],["NOTE_Eb","NOTE_Eb"],["NOTE_E","NOTE_E"],["NOTE_F","NOTE_F"],["NOTE_Fs","NOTE_Fs"],["NOTE_G","NOTE_G"],["NOTE_Gs","NOTE_Gs"],["NOTE_A","NOTE_A"],["NOTE_Bb","NOTE_Bb"],["NOTE_B","NOTE_B"],["NOTE_MAX","NOTE_MAX"]],
OCTAVE: Profile.generate([ '0-7' ]),
CHANNEL: Profile.generate([ '0-15' ]),
touch: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
PWM_RESOLUTION: Profile.generate([ '8-20' ]),
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial : 9600
};
pins.arduino_core_esp32c3 = {
description: "core_esp32c3_Arduino",
digital: Profile.generate([ '0-13', '18-21' ]),
digitalWrite: Profile.generate([ '0-8', '10-13', '18-21' ]),
interrupt: Profile.generate([ '0-13', '18-21' ]),
pwm: Profile.generate([ '2', '6', '8', '10' ]),
analog: Profile.generate([ '0-5' ]),
tx: Profile.generate([ '21' ]),
dac: [["25", "25"], ["26", "26"]],
SDA: [["8","8"]],
SCL: [["9","9"]],
MOSI: [["6","6"]],
MISO: [["5","5"]],
SCK: [["4","4"]],
TONE_NOTE: [["NOTE_C","NOTE_C"],["NOTE_Cs","NOTE_Cs"],["NOTE_D","NOTE_D"],["NOTE_Eb","NOTE_Eb"],["NOTE_E","NOTE_E"],["NOTE_F","NOTE_F"],["NOTE_Fs","NOTE_Fs"],["NOTE_G","NOTE_G"],["NOTE_Gs","NOTE_Gs"],["NOTE_A","NOTE_A"],["NOTE_Bb","NOTE_Bb"],["NOTE_B","NOTE_B"],["NOTE_MAX","NOTE_MAX"]],
OCTAVE: Profile.generate([ '0-7' ]),
CHANNEL: Profile.generate([ '0-15' ]),
touch: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
PWM_RESOLUTION: Profile.generate([ '8-20' ]),
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial : 9600
};
pins.arduino_esp32s3 = {
description: "esp32s3_Arduino",
digital: Profile.generate([ '0-21', '26-48' ]),
digitalWrite: Profile.generate([ '0-21', '26-48' ]),
interrupt: Profile.generate([ '0-21', '26-48' ]),
pwm: Profile.generate([ '0-21', '26-46' ]),
analog: Profile.generate([ '1-20' ]),
tx: Profile.generate([ '0-21', '26-48' ]),
dac: [["25", "25"], ["26", "26"]],
SDA:[["8","8"]],
SCL:[["9","9"]],
MOSI:[["11","11"]],
MISO:[["13","13"]],
SCK:[["12","12"]],
TONE_NOTE:[["NOTE_C","NOTE_C"],["NOTE_Cs","NOTE_Cs"],["NOTE_D","NOTE_D"],["NOTE_Eb","NOTE_Eb"],["NOTE_E","NOTE_E"],["NOTE_F","NOTE_F"],["NOTE_Fs","NOTE_Fs"],["NOTE_G","NOTE_G"],["NOTE_Gs","NOTE_Gs"],["NOTE_A","NOTE_A"],["NOTE_Bb","NOTE_Bb"],["NOTE_B","NOTE_B"],["NOTE_MAX","NOTE_MAX"]],
OCTAVE: Profile.generate([ '0-7' ]),
CHANNEL: Profile.generate([ '0-15' ]),
PWM_RESOLUTION: Profile.generate([ '8-20' ]),
touch: Profile.generate([ '1-14' ]),
serial_HardwareSelect: [["Serial", "Serial"], ["Serial1", "Serial1"], ["Serial2", "Serial2"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial : 9600
};
pins['Arduino ESP32'] =
pins['Arduino ESP32 Generic'] =
pins['"WeMos" WiFi&Bluetooth Battery'] =
pins["ESP32 Dev Module"] =
pins["ESP32 Wrover Module"] =
pins["ESP32 Pico Kit"] =
pins["Turta IoT Node"] =
pins["TTGO LoRa32-OLED V1"] =
pins["XinaBox CW02"] =
pins["SparkFun ESP32 Thing"] =
pins["u-blox NINA-W10 series (ESP32)"] =
pins["Widora AIR"] =
pins["Electronic SweetPeas - ESP320"] =
pins["Nano32"] =
pins["LOLIN D32"] =
pins["LOLIN D32 PRO"] =
pins["WEMOS LOLIN32"] =
pins["Dongsen Tech Pocket 32"] =
pins["ESPea32"] =
pins["Noduino Quantum"] =
pins["Node32s"] =
pins["Hornbill ESP32 Dev"] =
pins["Hornbill ESP32 Minima"] =
pins["FireBeetle-ESP32"] =
pins["IntoRobot Fig"] =
pins["Onehorse ESP32 Dev Module"] =
pins["Adafruit ESP32 Feather"] =
pins["NodeMCU-32S"] =
pins["MH ET LIVE ESP32DevKIT"] =
pins["MH ET LIVE ESP32MiniKit"] =
pins["ESP32vn IoT Uno"] =
pins["ESP32 Dev Module"] =
pins["DOIT ESP32 DEVKIT V1"] =
pins["OLIMEX ESP32-EVB"] =
pins["OLIMEX ESP32-GATEWAY"] =
pins["OLIMEX ESP32-PoE"] =
pins["ThaiEasyElec's ESPino32"] =
pins["M5Stick-C"] =
pins["M5Stack-CORE"] =
pins["M5Stack-FIRE"] =
pins["ODROID ESP32"] =
pins["Heltec_WIFI_Kit_32"] =
pins["Heltec_WIFI_LoRa_32"] =
pins["ESPectro32"] =
pins["Microduino-CoreESP32"] =
pins["ALKS ESP32"] =
pins["WiPy 3.0"] =
pins["BPI-BIT"] =
pins["Silicognition wESP32"] =
pins["T-Beam"] =
pins["D-duino-32"] =
pins["LoPy"] =
pins["LoPy4"] =
pins["OROCA EduBot"] =
pins["OROCA EduBot"] =
pins["ESP32 FM DevKit"] =
pins['MixGo CE'] =
pins['MixGo Car'] =
pins['AI Thinker ESP32-CAM'] =
pins["arduino_esp32"];
pins['Arduino HandBit'] =
pins['mPython'] =
pins["esp32_handbit"];
pins['Arduino MixGo'] =
pins["esp32_MixGo"];
/* Arduino ESP32S2用管脚定义 */
pins['Generic ESP32S2 Module'] =
pins['ESP32S2 Dev Module'] =
pins["arduino_esp32s2"];
/* Arduino ESP32C3用管脚定义 */
pins['ESP32C3 Dev Module'] =
pins["arduino_esp32c3"];
pins['CORE-ESP32-C3'] =
pins["arduino_core_esp32c3"];
/* Arduino ESP32S3用管脚定义 */
pins['ESP32S3 Dev Module'] =
pins['arduino_esp32s3'];
export default pins;

View File

@@ -0,0 +1,3 @@
<%= htmlWebpackPlugin.tags.headTags.join('\n') %>
<xml>
</xml>

View File

@@ -0,0 +1,19 @@
<div>
<h5 style="
font-weight: bold;
padding-bottom: 8px;
user-select: text;
">{{-d.title}}</h5>
<div>
{{# if (d.message) { }}
<p style="white-space: normal;user-select: text;padding-bottom: 5px;">
{{-d.message}}
</p>
{{# } }}
{{# if (d.href === '#') { }}
<p style="user-select: text;">{{d.moreInfo}}: <a class="link-secondary" href="javascript:void(0)">{{-d.name}}</a></p>
{{# } else { }}
<p style="user-select: text;">{{d.moreInfo}}: <a class="link-primary" href="javascript:void(0)" onclick="Mixly.Url.open('{{-d.href}}')" style="user-select: text;">{{-d.name}}</a></p>
{{# } }}
</div>
</div>

View File

@@ -0,0 +1,12 @@
const path = require("path");
const common = require("../../../webpack.common");
const { merge } = require("webpack-merge");
module.exports = merge(common, {
resolve: {
alias: {
'@mixly/arduino': path.resolve(__dirname, '../arduino'),
'@mixly/arduino-avr': path.resolve(__dirname, '../arduino_avr')
}
}
});

Some files were not shown because too many files have changed in this diff Show More