初始化提交

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,41 @@
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/");
}
};

View File

@@ -0,0 +1,355 @@
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/sensor.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/sensor2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/motor.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/motor2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/voice.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/voice2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/light.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div:nth-child(2)>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/light2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>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(12)>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(12)>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(12)>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(12)>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(12)>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(12)>div:nth-child(2)>div:nth-child(4)>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(12)>div:nth-child(2)>div:nth-child(4)>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(12)>div:nth-child(2)>div:nth-child(5)>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(12)>div:nth-child(2)>div:nth-child(5)>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(13)>div.blocklyTreeRow>span.blocklyTreeIcon.blocklyTreeIconNone {
background: url('../../../../common/media/mark/comuni.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(13)>div.blocklyTreeRow.blocklyTreeSelected>span.blocklyTreeIcon.blocklyTreeIconNone {
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第1个图标未选中时*/
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/comuni.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第1个图标选中时*/
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/comuni2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第2个图标未选中时*/
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/comuni.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第2个图标选中时*/
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/comuni2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第3个图标未选中时*/
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/comuni.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第3个图标选中时*/
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/comuni2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第4个图标未选中时*/
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/comuni.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第4个图标选中时*/
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/comuni2.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow>span.blocklyTreeIcon.blocklyTreeIconNone {
background: url('../../../../common/media/mark/store.png') no-repeat;
background-size: 100% auto;
}
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>div.blocklyTreeRow.blocklyTreeSelected>span.blocklyTreeIcon.blocklyTreeIconNone {
background: url('../../../../common/media/mark/store2.png') no-repeat;
background-size: 100% auto;
}
/*子模块的第一个图标(未选中时)*/
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(14)>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(14)>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(14)>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(14)>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(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(15)>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(15)>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(15)>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(15)>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(15)>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(15)>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(15)>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(17)>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(17)>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(18)>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(18)>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,16 @@
import ArduinoESP8266Pins from './pins/pins';
import * as ArduinoESP8266EthernetBlocks from './blocks/ethernet';
import * as ArduinoESP8266EthernetGenerators from './generators/ethernet';
import ArduinoESP8266ZhHans from './language/zh-hans';
import ArduinoESP8266ZhHant from './language/zh-hant';
import ArduinoESP8266En from './language/en';
export {
ArduinoESP8266Pins,
ArduinoESP8266EthernetBlocks,
ArduinoESP8266EthernetGenerators,
ArduinoESP8266ZhHans,
ArduinoESP8266ZhHant,
ArduinoESP8266En
};

View File

@@ -0,0 +1,112 @@
// LM35 Temperature
export const LM35 = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = 'analogRead(' + dropdown_pin + ')*0.322';
return [code, generator.ORDER_ATOMIC];
}
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 controls_attachInterrupt = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var dropdown_mode = this.getFieldValue('mode');
generator.setups_['setup_input_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', INPUT_PULLUP);';
//var interrupt_pin=digitalPinToInterrupt(dropdown_pin).toString();
var interrupt_pin = 'digitalPinToInterrupt(' + dropdown_pin + ')';
var code = 'attachInterrupt' + '(' + interrupt_pin + ',' + 'attachInterrupt_fun_' + dropdown_pin + ',' + dropdown_mode + ');\n'
var funcName = 'attachInterrupt_fun_' + dropdown_pin;
var branch = generator.statementToCode(this, 'DO');
var code2 = 'ICACHE_RAM_ATTR void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return code;
}
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';
}
export const controls_soft_reset = function () {
return ' ESP.restart();\n';
}
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_Servo'] = '#include <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;
}

View File

@@ -0,0 +1,82 @@
// 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 <ESP8266WiFi.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.persistent(false);
WiFi.mode(WIFI_AP);
WiFi.disconnect();
WiFi.softAP("ESPNOW", nullptr, 3);
WiFi.softAPdisconnect(false);
Serial.print("当前设备MAC:");
Serial.println(WiFi.softAPmacAddress());
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 <ESP8266WiFi.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 message = "";\n'
+ ' for (int i = 0; i < static_cast<int>(_count); i++) {\n'
+ ' message += 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.persistent(false);
WiFi.mode(WIFI_AP);
WiFi.disconnect();
WiFi.softAP("ESPNOW", nullptr, 3);
WiFi.softAPdisconnect(false);
Serial.print("当前设备MAC:");
Serial.println(WiFi.softAPmacAddress());
bool ok = WifiEspNow.begin();
if (!ok) {
Serial.println("WifiEspNow初始化失败");
ESP.restart();
}`;
var code = '';
return code;
}

View File

@@ -0,0 +1,134 @@
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 {
ArduinoESP8266Pins,
ArduinoESP8266EthernetBlocks,
ArduinoESP8266EthernetGenerators,
ArduinoESP8266ZhHans,
ArduinoESP8266ZhHant,
ArduinoESP8266En
} from './';
import addBoardFSItem from './mixly-modules/loader';
import './css/color.css';
Blockly.Arduino = Arduino;
Blockly.generator = Arduino;
Object.assign(Blockly.Variables, Variables);
Object.assign(Blockly.Procedures, Procedures);
Profile.default = {};
Object.assign(Profile, ArduinoESP8266Pins);
Object.assign(Profile.default, ArduinoESP8266Pins.arduino_esp8266);
Object.assign(Blockly.Lang.ZhHans, ArduinoESP8266ZhHans);
Object.assign(Blockly.Lang.ZhHant, ArduinoESP8266ZhHant);
Object.assign(Blockly.Lang.En, ArduinoESP8266En);
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,
ArduinoESP8266EthernetBlocks
);
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,
ArduinoESP8266EthernetGenerators
);

View File

@@ -0,0 +1,140 @@
import * as Blockly from 'blockly/core';
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const { XML } = Mixly;
const { En } = Blockly.Lang;
En.ESP8266_CONFIG_TEMPLATE = TEMPLATE;
En.ESP8266_CONFIG_INTRODUCE = 'For more information, please visit';
En.ESP8266_CONFIG_MESSAGE_XTAL = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'CPU Frequency',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#cpu-frequency',
name: 'CPU Frequency'
});
En.ESP8266_CONFIG_MESSAGE_VT = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'VTable location',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#vtable-location',
name: 'VTable'
});
En.ESP8266_CONFIG_MESSAGE_EXCEPTION = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'C++ Exceptions',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#c-exceptions',
name: 'C++ Exceptions'
});
En.ESP8266_CONFIG_MESSAGE_STACKSMASH = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Stack Protection',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#stack-protection',
name: 'Stack Protection'
});
En.ESP8266_CONFIG_MESSAGE_SSL = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'SSL支持',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#ssl-support',
name: 'SSL Support'
});
En.ESP8266_CONFIG_MESSAGE_MMU = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Memory Management Unit',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#mmu-memory-management-unit',
name: 'MMU'
});
En.ESP8266_CONFIG_MESSAGE_NON32XFER = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Non-32-Bit Access',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#non-32-bit-access',
name: 'Non-32-Bit Access'
});
En.ESP8266_CONFIG_MESSAGE_RESET_METHOD = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Reset Method',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#reset-method',
name: 'Reset Method'
});
En.ESP8266_CONFIG_MESSAGE_CRYSTAL_FREQ = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Crystal Frequency',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#crystal-frequency',
name: 'Crystal Frequency'
});
En.ESP8266_CONFIG_MESSAGE_FLASH_FREQ = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Flash Frequency',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: 'None'
});
En.ESP8266_CONFIG_MESSAGE_FLASH_MODE = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Flash Mode',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-mode',
name: 'Flash Mode'
});
En.ESP8266_CONFIG_MESSAGE_EESZ = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Flash Size',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-size',
name: 'Flash Size'
});
En.ESP8266_CONFIG_MESSAGE_LED = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Builtin Led',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: 'None'
});
En.ESP8266_CONFIG_MESSAGE_SDK = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'NONOS SDK Version',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#nonos-sdk-version',
name: 'NONOS SDK Version'
});
En.ESP8266_CONFIG_MESSAGE_IP = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'lwIP Variant',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#lwip-variant',
name: 'lwIP Variant'
});
En.ESP8266_CONFIG_MESSAGE_DBG = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Debug port',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#debug-port',
name: 'Debug port'
});
En.ESP8266_CONFIG_MESSAGE_WIPE = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Erase Flash',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#erase-flash',
name: 'Erase Flash'
});
En.ESP8266_CONFIG_MESSAGE_BAUD = XML.render(En.ESP8266_CONFIG_TEMPLATE, {
title: 'Upload Speed',
moreInfo: En.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: 'None'
});
En.BOARD_FS = 'Board FS';
export default En;

View File

@@ -0,0 +1,140 @@
import * as Blockly from 'blockly/core';
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const { XML } = Mixly;
const { ZhHans } = Blockly.Lang;
ZhHans.ESP8266_CONFIG_TEMPLATE = TEMPLATE;
ZhHans.ESP8266_CONFIG_INTRODUCE = '详细介绍请参考';
ZhHans.ESP8266_CONFIG_MESSAGE_XTAL = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'CPU时钟频率',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#cpu-frequency',
name: 'CPU Frequency'
});
ZhHans.ESP8266_CONFIG_MESSAGE_VT = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'VTable location',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#vtable-location',
name: 'VTable'
});
ZhHans.ESP8266_CONFIG_MESSAGE_EXCEPTION = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'C++异常',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#c-exceptions',
name: 'C++ Exceptions'
});
ZhHans.ESP8266_CONFIG_MESSAGE_STACKSMASH = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '堆栈保护',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#stack-protection',
name: 'Stack Protection'
});
ZhHans.ESP8266_CONFIG_MESSAGE_SSL = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'SSL支持',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#ssl-support',
name: 'SSL Support'
});
ZhHans.ESP8266_CONFIG_MESSAGE_MMU = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '内存管理单元',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#mmu-memory-management-unit',
name: 'MMU'
});
ZhHans.ESP8266_CONFIG_MESSAGE_NON32XFER = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '非32位访问',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#non-32-bit-access',
name: 'Non-32-Bit Access'
});
ZhHans.ESP8266_CONFIG_MESSAGE_RESET_METHOD = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '复位方式',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#reset-method',
name: 'Reset Method'
});
ZhHans.ESP8266_CONFIG_MESSAGE_CRYSTAL_FREQ = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '晶振频率',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#crystal-frequency',
name: 'Crystal Frequency'
});
ZhHans.ESP8266_CONFIG_MESSAGE_FLASH_FREQ = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '闪存频率',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '无'
});
ZhHans.ESP8266_CONFIG_MESSAGE_FLASH_MODE = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '烧录方式',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-mode',
name: 'Flash Mode'
});
ZhHans.ESP8266_CONFIG_MESSAGE_EESZ = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '闪存大小',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-size',
name: 'Flash Size'
});
ZhHans.ESP8266_CONFIG_MESSAGE_LED = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '内置LED',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '无'
});
ZhHans.ESP8266_CONFIG_MESSAGE_SDK = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'NonOS SDK版本',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#nonos-sdk-version',
name: 'NONOS SDK Version'
});
ZhHans.ESP8266_CONFIG_MESSAGE_IP = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: 'lwIP变体',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#lwip-variant',
name: 'lwIP Variant'
});
ZhHans.ESP8266_CONFIG_MESSAGE_DBG = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '调试端口',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#debug-port',
name: 'Debug port'
});
ZhHans.ESP8266_CONFIG_MESSAGE_WIPE = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '擦除Flash',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#erase-flash',
name: 'Erase Flash'
});
ZhHans.ESP8266_CONFIG_MESSAGE_BAUD = XML.render(ZhHans.ESP8266_CONFIG_TEMPLATE, {
title: '上传速度',
moreInfo: ZhHans.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '无'
});
ZhHans.BOARD_FS = '板卡文件管理';
export default ZhHans;

View File

@@ -0,0 +1,140 @@
import * as Blockly from 'blockly/core';
import * as Mixly from 'mixly';
import TEMPLATE from '../template/board-config-message.html';
const { XML } = Mixly;
const { ZhHant } = Blockly.Lang;
ZhHant.ESP8266_CONFIG_TEMPLATE = TEMPLATE;
ZhHant.ESP8266_CONFIG_INTRODUCE = '詳細介紹請參攷';
ZhHant.ESP8266_CONFIG_MESSAGE_XTAL = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'CPU時鐘頻率',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#cpu-frequency',
name: 'CPU Frequency'
});
ZhHant.ESP8266_CONFIG_MESSAGE_VT = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'VTable location',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#vtable-location',
name: 'VTable'
});
ZhHant.ESP8266_CONFIG_MESSAGE_EXCEPTION = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'C++异常',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#c-exceptions',
name: 'C++ Exceptions'
});
ZhHant.ESP8266_CONFIG_MESSAGE_STACKSMASH = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '堆棧保護',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#stack-protection',
name: 'Stack Protection'
});
ZhHant.ESP8266_CONFIG_MESSAGE_SSL = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'SSL支持',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#ssl-support',
name: 'SSL Support'
});
ZhHant.ESP8266_CONFIG_MESSAGE_MMU = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '記憶體管理單元',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#mmu-memory-management-unit',
name: 'MMU'
});
ZhHant.ESP8266_CONFIG_MESSAGE_NON32XFER = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '非32比特訪問',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#non-32-bit-access',
name: 'Non-32-Bit Access'
});
ZhHant.ESP8266_CONFIG_MESSAGE_RESET_METHOD = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '復位管道',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#reset-method',
name: 'Reset Method'
});
ZhHant.ESP8266_CONFIG_MESSAGE_CRYSTAL_FREQ = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '晶振頻率',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#crystal-frequency',
name: 'Crystal Frequency'
});
ZhHant.ESP8266_CONFIG_MESSAGE_FLASH_FREQ = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '閃存頻率',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '無'
});
ZhHant.ESP8266_CONFIG_MESSAGE_FLASH_MODE = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '燒錄管道',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-mode',
name: 'Flash Mode'
});
ZhHant.ESP8266_CONFIG_MESSAGE_EESZ = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '閃存大小',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#flash-size',
name: 'Flash Size'
});
ZhHant.ESP8266_CONFIG_MESSAGE_LED = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '內寘LED',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '無'
});
ZhHant.ESP8266_CONFIG_MESSAGE_SDK = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'NonOS SDK版本',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#nonos-sdk-version',
name: 'NONOS SDK Version'
});
ZhHant.ESP8266_CONFIG_MESSAGE_IP = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: 'lwIP變體',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#lwip-variant',
name: 'lwIP Variant'
});
ZhHant.ESP8266_CONFIG_MESSAGE_DBG = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '調試埠',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#debug-port',
name: 'Debug port'
});
ZhHant.ESP8266_CONFIG_MESSAGE_WIPE = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '擦除Flash',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: 'https://arduino-esp8266.readthedocs.io/en/latest/ideoptions.html#erase-flash',
name: 'Erase Flash'
});
ZhHant.ESP8266_CONFIG_MESSAGE_BAUD = XML.render(ZhHant.ESP8266_CONFIG_TEMPLATE, {
title: '上傳速度',
moreInfo: ZhHant.ESP8266_CONFIG_INTRODUCE,
href: '#',
name: '無'
});
ZhHant.BOARD_FS = '闆卡文件管理';
export default ZhHant;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
export default {
littlefs: {
download: "{{&esptool}} --chip esp8266 --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}} --chip esp8266 --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
},
spiffs: {
download: "{{&esptool}} --chip esp8266 --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}} --chip esp8266 --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
},
fatfs: {
download: "{{&esptool}} --chip esp8266 --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}} --chip esp8266 --port {{&port}} --baud {{&baud}} write_flash --flash_mode {{&flashMode}} --flash_freq {{&flashFreq}} --flash_size {{&flashSize}} {{&offset}} {{&img}}"
}
};

View File

@@ -0,0 +1,80 @@
import { Env, Boards, FSBoardHandler } from 'mixly';
import * as path from 'path';
import COMMANDS from './commands';
import BOARDS_EESZ_INFO from './boards-eesz-info';
import MENU from './menu';
import FS_INFO from './fs-info';
export default class FSArduEsp8266Handler 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';
}
const baud = Boards.getSelectedBoardConfigParam('baud') || '115200';
const eesz = Boards.getSelectedBoardConfigParam('eesz');
const info = BOARDS_EESZ_INFO[boardKey][eesz];
const partition = {
offset: info.spiffs_start,
size: info.spiffs_end - info.spiffs_start,
blockSize: info.spiffs_blocksize,
pageSize: info.spiffs_pagesize
};
const flashSize = info.flash_size + 'B';
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('baud') || '115200';
const eesz = Boards.getSelectedBoardConfigParam('eesz');
const info = BOARDS_EESZ_INFO[boardKey][eesz];
const partition = {
offset: info.spiffs_start,
size: info.spiffs_end - info.spiffs_start,
blockSize: info.spiffs_blocksize,
pageSize: info.spiffs_pagesize
};
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,34 @@
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"
}
}
};

View File

@@ -0,0 +1,29 @@
import { Workspace, ContextMenu } from 'mixly';
import FSArduEsp8266Handler 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 FSArduEsp8266Handler());
}
}
});
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="base_setup" id="K8YD0`WZdrz}kh[$!P#C" x="0" y="0"><statement name="DO"><block type="serial_begin" id="T{6=cLU=KJZl82N{rTA%"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="NKEs$]{60-D1Q8qY$)VC"><field name="NUM">115200</field></shadow></value><next><block type="WIFI_info" id="|P%PM5hwLmy/--{{UH-F"><value name="SSID"><shadow type="text" id="B+2Ml.mEpx:#{AEE@Ejk"><field name="TEXT">ssid</field></shadow></value><value name="PWD"><shadow type="text" id="GnE[SUu^a[;C?j2YBlrb"><field name="TEXT">password</field></shadow></value><next><block type="MQTT_server" id="S=*T:!l~mm6AY?@*A;{L"><value name="server_add"><shadow type="text" id="Ca%W#$L#gu9o*yI][BRb"><field name="TEXT">39.98.114.122</field></shadow></value><value name="server_port"><shadow type="math_number" id="3OLX3/_BPIow-F^J}23q"><field name="NUM">1883</field></shadow></value><value name="IOT_ID"><shadow type="text" id="Z?GjjUdSCcSM@LiHN}l+"><field name="TEXT">siot</field></shadow></value><value name="IOT_PWD"><shadow type="text" id="3qnvwQu.|@qYI{l^gkQI"><field name="TEXT">siot</field></shadow></value><value name="Client_ID"><shadow type="text" id="emsiy)psQ2(yYumBpF,{"><field name="TEXT">ID</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="[u=@XBR,{*F1`wU:7S#d" x="0" y="331"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="^[T@5h]zuI+/nX)mgjUZ"><field name="NUM">1000</field></shadow></value><statement name="zxhs"><block type="MQTT_publish" id="9KP(}PKH^$tb@Qrn-xl$"><field name="Topic">Topic</field><value name="data"><shadow type="math_number" id="|AcQ#f/zi7-^.`rp4=GB"><field name="NUM">120</field></shadow></value></block></statement></block><block type="MQTT_subscribe" id="U@fEBy9_YXJp(R#krXpj" x="-9" y="437"><field name="Topic_0">Topic_0</field><statement name="DO0"><block type="serial_println" id="skqRg$su@1McV1!mMwYs"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="MQTT_subscribe_value" id="D5#UkJT?H$SW3V!OJXxu"><field name="Topic_0">Topic_0</field></block></value></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="q=N7)ba@cJ~oKa9^bp3B" x="0" y="0"><value name="server_add"><shadow type="text" id="*Es+ZjL,Bl56L!,]-aY)"><field name="TEXT"></field></shadow></value><value name="wifi_ssid"><shadow type="text" id="Z`-8?G~!FnzL%rl@[=UP"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="j@jD791woyhBBQ$QC~-L"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id="Q;9gW29_7P3nuueH@dj}"><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value></block><block type="base_setup" id=")zzvjCG35lm.JDGQZa(~" x="0" y="163"><statement name="DO"><block type="display_rgb_init" id="dgPkXeQ;P5Tm$,O}l4X^"><field name="PIN">12</field><field name="TYPE">NEO_GRB</field><value name="LEDCOUNT"><shadow type="math_number" id="Q@do8SU6ZVurUs]bCvWJ"><field name="NUM">4</field></shadow></value><next><block type="display_rgb_Brightness" id="ukxVnoc)~sl%T)jmYS^."><field name="PIN">12</field><value name="Brightness"><shadow type="math_number" id="j1du@E?^wU#t5Fx^b4iY"><field name="NUM">20</field></shadow></value></block></next></block></statement></block><block type="blynk_iot_get_data" id="$S.[r9aoW8XzyKM(7Hl#" x="0" y="303"><mutation xmlns="http://www.w3.org/1999/xhtml"><arg name="R" vartype="int"></arg><arg name="G" vartype="int"></arg><arg name="B" vartype="int"></arg></mutation><field name="Vpin">V0</field><statement name="STACK"><block type="display_rgb" id="r10^C!DLI]btp7JwLh,L"><field name="PIN">12</field><value name="_LED_"><shadow type="math_number" id="6uF9tBKY9h859VO/?{RS"><field name="NUM">1</field></shadow></value><value name="COLOR"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number"><field name="NUM">\n </field></shadow><block type="RGB_color_rgb" id=".TF*]EEljeP-Tp/6F@l^"><value name="R"><shadow type="math_number" id="*5{XeiyzUhC2XpJ^sPDx"><field name="NUM">R</field></shadow></value><value name="G"><shadow type="math_number" id="060w$8b^V^d|8S1^SMXa"><field name="NUM">G</field></shadow></value><value name="B"><shadow type="math_number" id="bpMoI+;w#n7AD%x3!RI8"><field name="NUM">B</field></shadow></value></block></value><next><block type="display_rgb_show" id="I,]M^}DOz`I1X*aErQk}"><field name="PIN">12</field></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="p/!#MT4.V,SjXAlMP#e/" x="-5" y="3"><value name="server_add"><shadow type="text" id="X}3n*tTG|8v4v=CQBNMi"><field name="TEXT"></field></shadow></value><value name="wifi_ssid"><shadow type="text" id=",@9XKXtHtN1yQh]mV4f*"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="R;B*!8lf`/53KgM{*HaI"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id="Uq_U9vZ7Q#z2l-Jcyw.0"><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value></block><block type="blynk_iot_get_data" id="awP.TjEYfp+d^tGVEy/P" x="0" y="163"><mutation xmlns="http://www.w3.org/1999/xhtml"><arg name="vpin_value" vartype="int"></arg></mutation><field name="Vpin">V0</field><statement name="STACK"><block type="serial_println" id="vf#st9lZqjqfa#GL~=48"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="t/-evP{X9iZc;zT5dABz"><field name="VAR">vpin_value</field></block></value><next><block type="servo_move" id="%2|`3VdL8jI5SLSF)O}="><field name="PIN">12</field><value name="DEGREE"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="S*ItD#^+2#qo3=emSD2S"><field name="NUM">0</field></shadow><block type="variables_get" id="en}0(3Ej1riFHE{Qb},q"><field name="VAR">vpin_value</field></block></value><value name="DELAY_TIME"><shadow type="math_number" id="KWN0{)Qp=A4ldIeA9!#J"><field name="NUM">200</field></shadow></value></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="U^c~|vW)e:rHRx),vNVC" x="0" y="0"><value name="server_add"><shadow type="text" id="Ij/yD:vRf^FS*U$tEk`?"><field name="TEXT"></field></shadow></value><value name="wifi_ssid"><shadow type="text" id=",c=BNLUN=cM]iWZMGX3I"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="zS9J(9ubRwb%]BQnTt13"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id="~2E(nr]cAisWW5}s,s(o"><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value><next><block type="blynk_bridge_auth" id="=_4s9.iSQ]@nHd:=+zZd"><field name="Vpin">V0</field><value name="auth"><shadow type="text" id="(Mdo/5U;,XIT0HgN:`YX"><field name="TEXT">e8d3214523d148a1beacc8022af22553d</field></shadow></value></block></next></block><block type="Blynk_iot_timer" id="$l7#EE/`Kslv/N-h=Pzd" x="0" y="204"><field name="timerNo">1</field><value name="TIME"><shadow type="math_number" id="(ac:Xox?9JGZgl+!7w~}"><field name="NUM">1000</field></shadow></value><statement name="DO"><block type="controls_if" id="4ro(+3o+p`B-ZJ}trCSs"><mutation xmlns="http://www.w3.org/1999/xhtml" else="1"></mutation><value name="IF0"><block type="inout_digital_read2" id="TD*mK+PTDd|8_TA(2P(,"><value name="PIN"><shadow type="pins_digital" id="SSKvs0*_#LoAJ/?5dqoT"><field name="PIN">12</field></shadow></value></block></value><statement name="DO0"><block type="blynk_bridge_digitalWrite" id="[(CQ5F!}Cr9w+7;kNd$b"><field name="Vpin">V0</field><value name="PIN"><shadow type="pins_digital" id="$f)e=lXNzeUt{W:vXS8Q"><field name="PIN">2</field></shadow></value><value name="STAT"><shadow type="inout_highlow" id=")YXbhiNRVt)kFFiets4)"><field name="BOOL">HIGH</field></shadow></value></block></statement><statement name="ELSE"><block type="blynk_bridge_digitalWrite" id="N?.:R9=EVCDg,pEwB5ml"><field name="Vpin">V0</field><value name="PIN"><shadow type="pins_digital" id="qNwS/B/-vY1WULznX2KL"><field name="PIN">2</field></shadow></value><value name="STAT"><shadow type="inout_highlow" id="A{)x!*pC*Xxa9f4$S~K/"><field name="BOOL">LOW</field></shadow></value></block></statement></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="K}4o1WcPLt:kjtkr;Wub" x="0" y="0"><value name="server_add"><shadow type="text" id="OzZpu+cZRwY=gOcOXcLu"><field name="TEXT">116.62.49.166</field></shadow></value><value name="wifi_ssid"><shadow type="text" id="c6]BZci||i-fM^+OvsRi"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="G,JwZm%C(SZY(cSLO@4L"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id="EE7dSM3e48l?HlK|rTVs"><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value><next><block type="oled_init" id="[^EgBY)m*iK+!P.k7~[-"><field name="OLED_TYPE">SSD1306_128X64_NONAME</field><field name="NAME">u8g2</field><field name="ROTATION">U8G2_R0</field><field name="SCL">5</field><field name="SDA">4</field><value name="ADDRESS"><shadow type="math_number" id="j;OGvEI@M?tlLRS6f$-r"><field name="NUM">0x3C</field></shadow></value><next><block type="variables_declare" id=".+j;5VyVYDweN}xwyo(j"><field name="variables_type">global_variate</field><field name="VAR">temp</field><field name="TYPE">int</field><value name="VALUE"><block type="DHT" id="-h@-XAUDR(RyU`+Q9H1N"><field name="TYPE">11</field><field name="PIN">12</field><field name="WHAT">temperature</field></block></value><next><block type="variables_declare" id="G$]P,WllO/xZNX1)*ELM"><field name="variables_type">global_variate</field><field name="VAR">hum</field><field name="TYPE">int</field><value name="VALUE"><block type="DHT" id="^=i}NS;`fP5z9-zsrv@d"><field name="TYPE">11</field><field name="PIN">12</field><field name="WHAT">humidity</field></block></value></block></next></block></next></block></next></block><block type="simple_timer" id="F,u2Ja[gy3;tsKM:kz9b" x="0" y="252"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="+~g2qG(um[*xsu.D[^%5"><field name="NUM">1000</field></shadow></value><statement name="zxhs"><block type="oled_page" id="2%y_Pk23Pa`~M+(L84p7"><field name="NAME">u8g2</field><statement name="DO"><block type="procedures_callnoreturn" id="8o82zXQDpUGO[8=+zwQV"><mutation xmlns="http://www.w3.org/1999/xhtml" name="page1"></mutation></block></statement></block></statement></block><block type="procedures_defnoreturn" id="`{u+DtI4Ma5],#g9;R]V" x="0" y="394"><field name="NAME">page1</field><statement name="STACK"><block type="oled_set_CN_Font" id="Ye~X4ZJJD$60{+^{axh)"><field name="NAME">u8g2</field><field name="FONT_NAME">_t_gb2312a</field><field name="FONT_SIZE">wqy12</field><next><block type="oled_print" id="k1Xqu90w3XSgUIm^8VYy"><field name="NAME">u8g2</field><value name="POS_X"><shadow type="math_number" id="wA{Ufu;Vg=~-wq?UiO[j"><field name="NUM">10</field></shadow></value><value name="POS_Y"><shadow type="math_number" id="J~b!V^u4G^%T,z*jy-*B"><field name="NUM">0</field></shadow></value><value name="TEXT"><shadow type="text" id="F6s=,9NG*TKwDL{radN("><field name="TEXT">校园气象站</field></shadow></value><next><block type="oled_print" id="p}d8$9]9P1keB#X4/BbT"><field name="NAME">u8g2</field><value name="POS_X"><shadow type="math_number" id="B_V!FJ6h-txQy0]=fD)B"><field name="NUM">10</field></shadow></value><value name="POS_Y"><shadow type="math_number" id="uC4l+|urqHY979x|9I#N"><field name="NUM">20</field></shadow></value><value name="TEXT"><shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="F6s=,9NG*TKwDL{radN("><field name="TEXT">1234</field></shadow><block type="text_join" id="F{s5Ii;R-u`N.;SInqT#"><value name="A"><shadow type="text" id="dG+c(4Ybb?C/zjhjb7LX"><field name="TEXT">温度:</field></shadow></value><value name="B"><shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="zgu4u[6G[YFG:Poc,+t|"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="hSm20F?o|q-F7J!rJX{S"><field name="VAR">temp</field></block></value></block></value><next><block type="oled_print" id="DTY-0;lQ:xap]Rq|%OJ{"><field name="NAME">u8g2</field><value name="POS_X"><shadow type="math_number" id="4m`zWMcNV`QoYG2DC0O*"><field name="NUM">10</field></shadow></value><value name="POS_Y"><shadow type="math_number" id="US9#[D%6/:FzHzt!*@EV"><field name="NUM">40</field></shadow></value><value name="TEXT"><shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="F6s=,9NG*TKwDL{radN("><field name="TEXT">1234</field></shadow><block type="text_join" id="BqRQj]-I:0OHsQ7!;fR9"><value name="A"><shadow type="text" id="Pq$?ZtfZd!R5+65|)7~8"><field name="TEXT">湿度:</field></shadow></value><value name="B"><shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id="zgu4u[6G[YFG:Poc,+t|"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="(nM432TNXJ$3JV]-8AaV"><field name="VAR">hum</field></block></value></block></value></block></next></block></next></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="m.rFsbJh?To_N$J*|sCG" x="0" y="0"><value name="server_add"><shadow type="text" id="(56Y^e0]2Wz#]v~tf.eA"><field name="TEXT"></field></shadow></value><value name="wifi_ssid"><shadow type="text" id="0#,d!T~VDpFb}`]gT]f0"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="=Qbr4UpA5V(];K_GR5A#"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id=".0w4Gpb_R0WIc-@3%/{Z"><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value><next><block type="oled_init" id="~:eoZ$I(o|~{J$e]o8Q}"><field name="OLED_TYPE">SSD1306_128X64_NONAME</field><field name="NAME">u8g2</field><field name="ROTATION">U8G2_R0</field><field name="SCL">5</field><field name="SDA">4</field><value name="ADDRESS"><shadow type="math_number" id="(Ewg`]|t^z,s:|EV6Tgd"><field name="NUM">0x3C</field></shadow></value></block></next></block><block type="procedures_defnoreturn" id="4iW3AIC!tG#.vIlhO2N+" x="0" y="200"><field name="NAME">page1</field><statement name="STACK"><block type="oled_set_CN_Font" id="E`eXD3`?7lFbzUgJDBA."><field name="NAME">u8g2</field><field name="FONT_NAME">_t_gb2312a</field><field name="FONT_SIZE">wqy12</field><next><block type="oled_print" id="~nH#J|a0=v1Ffp,2f=aC"><field name="NAME">u8g2</field><value name="POS_X"><shadow type="math_number" id="sFUfc#P+5/(U[U:Wp{+l"><field name="NUM">0</field></shadow></value><value name="POS_Y"><shadow type="math_number" id="0`=Nf6K9A}/.-HC!E}96"><field name="NUM">0</field></shadow></value><value name="TEXT"><shadow xmlns="http://www.w3.org/1999/xhtml" type="text" id=")PN891(r6agWM.ot$4U("><field name="TEXT">1234</field></shadow><block type="variables_get" id="sFt{|v[:k6{A7fu23}rq"><field name="VAR">message</field></block></value></block></next></block></statement></block><block type="blynk_iot_get_data" id="d`Aq9rFTXOaU^=-K@BSA" x="0" y="329"><mutation xmlns="http://www.w3.org/1999/xhtml"><arg name="message" vartype="String"></arg></mutation><field name="Vpin">V0</field><statement name="STACK"><block type="serial_println" id="UOgXJ6~0ThY+Uv3[{ZV7"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="variables_get" id="EmBz$_$AGkH]-sQjGH9Q"><field name="VAR">message</field></block></value><next><block type="oled_page" id="zaKo/PF@pkg*xcG]DeaH"><field name="NAME">u8g2</field><statement name="DO"><block type="procedures_callnoreturn" id="?p+UD8|sx~BkagqS=ghh"><mutation xmlns="http://www.w3.org/1999/xhtml" name="page1"></mutation></block></statement></block></next></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="blynk_server" id="5g/J;M[S@M/M$FX*}1@L" x="5" y="91"><value name="server_add"><shadow type="text" id="8*p;y#w7=}Q7!0Q#A/`O"><field name="TEXT"></field></shadow></value><value name="wifi_ssid"><shadow type="text" id="3#h-MIS7#~hR`}w`AB!i"><field name="TEXT">wifi-ssid</field></shadow></value><value name="wifi_pass"><shadow type="text" id="9=MCBR^OOqu5+Jl@_GrK"><field name="TEXT">wifi-pass</field></shadow></value><value name="auth_key"><shadow type="text" id="2PsHHx3!@c,90lKRRz8."><field name="TEXT">d9efdd0413ec4b74ab0057a0b8675654</field></shadow></value></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc2" board="Arduino ESP8266@WeMos D1 R1"><block type="base_setup" id="(yKS~^D:8cgzSYG?UGWY" x="0" y="0"><statement name="DO"><block type="serial_begin" id="V7)_$e38aw`6bk89kZYU"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="CW{(i2#@ybUp3[XQI~D]"><field name="NUM">115200</field></shadow></value><next><block type="WIFI_info" id="]{jtD_pSvka~JaMo.M,b"><value name="SSID"><shadow type="text" id="kFT|)?*er$5Uou8)9@(E"><field name="TEXT"></field></shadow></value><value name="PWD"><shadow type="text" id="D:gJ:;*vv{]eI=28!~nn"><field name="TEXT"></field></shadow></value><next><block type="MQTT_server" id="PKuvoX]E1_OG.(hgWR*l"><comment pinned="true" h="80" w="160">连接df的easy iot服务器时项目ID必须留空</comment><value name="server_add"><shadow type="text" id="sB`:71-GSoCJepDMGAQq"><field name="TEXT">iot.dfrobot.com.cn</field></shadow></value><value name="server_port"><shadow type="math_number" id="Us#H)@ZC_dG+9u}h`YfX"><field name="NUM">1883</field></shadow></value><value name="IOT_ID"><shadow type="text" id="-p)*#m]R*4!i3oZd`}H)"><field name="TEXT">55hNFlj7g</field></shadow></value><value name="IOT_PWD"><shadow type="text" id="P+6r^oAD#au4D{N.mBhu"><field name="TEXT">cchNK_j7g</field></shadow></value><value name="Client_ID"><shadow type="text" id="(]H~.R$|~4=db{|9h5XU"><field name="TEXT"></field></shadow></value></block></next></block></next></block></statement></block><block type="controls_if" id=":VRV-WE3Rt4=L/xW`C*Z" x="0" y="330"><value name="IF0"><block type="inout_digital_read2" id="w/OR`Z[:FPcAg``QO[~9"><value name="PIN"><shadow type="pins_digital" id="}I$@qhu$_yL?_GG{_DgL"><field name="PIN">0</field></shadow></value></block></value><statement name="DO0"><block type="serial_println" id="2g]9cm9gpZZ6T]`+}ix8"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="mn;a!qhLPv`9$$yXu|X6"><field name="TEXT">hello</field></block></value><next><block type="MQTT_publish" id=".e~TF~-]aeELv^;?{eu)"><field name="Topic">Iv_SEca7g</field><value name="data"><shadow type="math_number" id="}^T`$MHA(0:ba}.q|_eF"><field name="NUM">120</field></shadow></value></block></next></block></statement></block></xml><code>CiNpbmNsdWRlIDxFU1A4MjY2V2lGaS5oPgojaW5jbHVkZSAiQWRhZnJ1aXRfTVFUVC5oIgojaW5jbHVkZSAiQWRhZnJ1aXRfTVFUVF9DbGllbnQuaCIKV2lGaUNsaWVudCBjbGllbnQ7CgpBZGFmcnVpdF9NUVRUX0NsaWVudCBtcXR0KCZjbGllbnQsICJpb3QuZGZyb2JvdC5jb20uY24iLCAxODgzLCAiNTVoTkZsajdnIiwgImNjaE5LX2o3ZyIpOwp2b2lkIE1RVFRfY29ubmVjdCgpOwp2b2lkIE1RVFRfY29ubmVjdCgpIHsKICBpbnQ4X3QgcmV0OwogIGlmIChtcXR0LmNvbm5lY3RlZCgpKSB7CiAgICByZXR1cm47CiAgfQogIFNlcmlhbC5wcmludCgiQ29ubmVjdGluZyB0byBNUVRULi4uICIpOwogIHVpbnQ4X3QgcmV0cmllcyA9IDM7CiAgd2hpbGUgKChyZXQgPSBtcXR0LmNvbm5lY3QoKSkgIT0gMCkgewogICAgU2VyaWFsLnByaW50bG4obXF0dC5jb25uZWN0RXJyb3JTdHJpbmcocmV0KSk7CiAgICBTZXJpYWwucHJpbnRsbigiUmV0cnlpbmcgTVFUVCBjb25uZWN0aW9uIGluIDUgc2Vjb25kcy4uLiIpOwogICAgbXF0dC5kaXNjb25uZWN0KCk7CiAgICBkZWxheSg1MDAwKTsKICAgIHJldHJpZXMtLTsKICAgIGlmIChyZXRyaWVzID09IDApIHsKICAgICAgd2hpbGUgKDEpOwogICAgfQogIH0KICBTZXJpYWwucHJpbnRsbigiTVFUVCBDb25uZWN0ZWQhIik7Cn0KCkFkYWZydWl0X01RVFRfUHVibGlzaCBNUVRUX1RvcGljX0l2X1NFY2E3ZyA9IEFkYWZydWl0X01RVFRfUHVibGlzaCgmbXF0dCwgIkl2X1NFY2E3ZyIpOwoKdm9pZCBzZXR1cCgpewogIFNlcmlhbC5iZWdpbigxMTUyMDApOwogIFdpRmkuYmVnaW4oIiIsICIiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIC8vIOi/nuaOpWRm55qEZWFzeSBpb3TmnI3liqHlmajml7bvvIzpobnnm65JROW/hemhu+eVmeepugogIE1RVFRfY29ubmVjdCgpOwogIHBpbk1vZGUoMCwgSU5QVVQpOwp9Cgp2b2lkIGxvb3AoKXsKICBpZiAoZGlnaXRhbFJlYWQoMCkpIHsKICAgIFNlcmlhbC5wcmludGxuKCJoZWxsbyIpOwogICAgTVFUVF9Ub3BpY19Jdl9TRWNhN2cucHVibGlzaCgxMjApOwoKICB9Cgp9</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="base_setup" id="X,T{e3m|sw.xt9[900Bf" x="0" y="0"><statement name="DO"><block type="serial_begin" id="/;;jy)nz*2Cp${m6z71z"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="=_3Y08AX?!FkAz~H*R[y"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="S$tHl7DIRU+C9av(RXBp"><value name="SSID"><shadow type="text" id="oMWhd}*{18)_[q_+^+VC"><field name="TEXT">ssid</field></shadow></value><value name="PWD"><shadow type="text" id="wQ5RnB;mc`M59W/dpoO:"><field name="TEXT">password</field></shadow></value><next><block type="NTP_server" id="n|`h%#QFQux;A5VWU7pp"><value name="server_add"><shadow type="text" id="fs0E:thT;kC/R0Z6vb*Z"><field name="TEXT">ntp1.aliyun.com</field></shadow></value><value name="timeZone"><shadow type="math_number" id="CZ/g~6i,}Y]_%c!o}=M5"><field name="NUM">8</field></shadow></value><value name="Interval"><shadow type="math_number" id="S,@RlPy3--pz|pxZ4qYC"><field name="NUM">600</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id=",0yNeH?U/^V77d)yi|C%" x="0" y="247"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="C]%ZSHbJS5Qv0Gs8yjzJ"><field name="NUM">1000</field></shadow></value><statement name="zxhs"><block type="serial_print" id="1p/:%I,{HXQ!,DmrvF]~"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="NTP_server_get_time" id="7OHc^Gm]=gDrK#Gt$41d"><field name="TIME_TYPE">NTP.getDateYear()</field></block></value><next><block type="serial_print" id=",1^i(xLuQsz^oKc_oKlv"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="text_char" id="f*vGaBOSZkiOuP;8ry/,"><field name="TEXT">-</field></block></value><next><block type="serial_print" id="#nR=EEoVUHF_zc@W.o#*"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="NTP_server_get_time" id="{H),jrZw;+Ri`]?7LZK^"><field name="TIME_TYPE">NTP.getDateMonth()</field></block></value><next><block type="serial_print" id="M-_+Si8lQbPjrjg7(mk9"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="text_char" id="0qhi~=1~!)Fzx]IGU^Pp"><field name="TEXT">-</field></block></value><next><block type="serial_println" id="VG105Xgt,_Q~r72r_-CB"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="NTP_server_get_time" id="u/}YUh5Zr#n|QZl=nnb8"><field name="TIME_TYPE">NTP.getDateDay()</field></block></value><next><block type="serial_print" id="SOW4)k:SJTb@uwFHY7Zb"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="NTP_server_get_time" id="D*e0$Mp=}P]m-.WFqSKX"><field name="TIME_TYPE">NTP.getTimeHour24()</field></block></value><next><block type="serial_print" id="Gxv.xT$}@iHTrB:P6+FR"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="text_char" id="#fV#[3huip(Y;kb{Sex$"><field name="TEXT">:</field></block></value><next><block type="serial_print" id="t3Eo0k;|lzHB$R(5|JMP"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="NTP_server_get_time" id="0|P3CDs[yN,TYL7w/EX_"><field name="TIME_TYPE">NTP.getTimeMinute()</field></block></value><next><block type="serial_print" id="9v$,0(Vww#ti,;XaFx[k"><field name="serial_select">Serial</field><field name="new_line">print</field><value name="CONTENT"><block type="text_char" id=".E69![]toct!%NnLoorY"><field name="TEXT">:</field></block></value><next><block type="serial_println" id="9=r7eT%AnR]Y{qP]GjqJ"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="NTP_server_get_time" id="*MFKC#Vm$bBA?p(3)Rt["><field name="TIME_TYPE">NTP.getTimeSecond()</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></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="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="base_setup" id="KSVtjQdDio?h2}R?bo!O" x="0" y="0"><statement name="DO"><block type="WIFI_info" id="H9nXn[8]ywuE|FfCv3uA"><value name="SSID"><shadow type="text" id="$ra!a1KeOZ6:[h0~@Zw^"><field name="TEXT">ssid</field></shadow></value><value name="PWD"><shadow type="text" id="u$3!6(NtNb/#M2(o-b=o"><field name="TEXT">password</field></shadow></value><next><block type="NTP_server" id="wEh_M!u5SFXZE7%]n4b|"><value name="server_add"><shadow type="text" id="_ec:p,[3i0)uq#%9^kuL"><field name="TEXT">ntp1.aliyun.com</field></shadow></value><value name="timeZone"><shadow type="math_number" id="N%iwch,^Rl#J#ek+XtCw"><field name="NUM">8</field></shadow></value><value name="Interval"><shadow type="math_number" id="Rf^~]0+YILzpnl^/08S;"><field name="NUM">600</field></shadow></value><next><block type="display_TM1637_init" id="iYj)3`_a=f#pKy4YH~PB"><field name="NAME">display</field><field name="CLK">2</field><field name="DIO">4</field></block></next></block></next></block></statement></block><block type="simple_timer" id="SUJZl~JelJPfb8z9|w{/" x="0" y="236"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="-_1JChs5[%x}@J(STZ4v"><field name="NUM">1000</field></shadow></value><statement name="zxhs"><block type="display_TM1637_displayTime" id="mnFk-xio#|*3y?yXVzPI"><field name="NAME">display</field><field name="STAT">true</field><value name="hour"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="b8,okET#QsTow99A2]MT"><field name="NUM">12</field></shadow><block type="NTP_server_get_time" id="GCMN):mjgQe)3e.Qa[h_"><field name="TIME_TYPE">NTP.getTimeHour24()</field></block></value><value name="minute"><shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number" id="h(BJ~b$}[Qu6zSKsJ^{N"><field name="NUM">30</field></shadow><block type="NTP_server_get_time" id="M123[jTPzt9WgXLp/,Z?"><field name="TIME_TYPE">NTP.getTimeMinute()</field></block></value></block></statement></block></xml>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP8266@Generic ESP8266 Module"><block type="base_setup" id="BW;FlBf1=G?PkND`ijxA" x="-435" y="62"><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>{"xtal":{"key":"80","label":"80 MHz"},"vt":{"key":"flash","label":"Flash"},"exception":{"key":"disabled","label":"Disabled (new aborts on oom)"},"stacksmash":{"key":"disabled","label":"Disabled"},"ssl":{"key":"all","label":"All SSL ciphers (most compatible)"},"mmu":{"key":"3232","label":"32KB cache + 32KB IRAM (balanced)"},"non32xfer":{"key":"fast","label":"Use pgm_read macros for IRAM/PROGMEM"},"ResetMethod":{"key":"nodemcu","label":"dtr (aka nodemcu)"},"CrystalFreq":{"key":"26","label":"26 MHz"},"FlashFreq":{"key":"40","label":"40MHz"},"FlashMode":{"key":"dout","label":"DOUT (compatible)"},"eesz":{"key":"1M64","label":"1MB (FS:64KB OTA:~470KB)"},"led":{"key":"2","label":"2"},"sdk":{"key":"nonosdk_190703","label":"nonos-sdk 2.2.1+100 (190703)"},"ip":{"key":"lm2f","label":"v2 Lower Memory"},"dbg":{"key":"Disabled","label":"Disabled"},"wipe":{"key":"none","label":"Only Sketch"},"baud":{"key":"115200","label":"115200"}}</config><code>CiNpbmNsdWRlIDxyQmFzZTY0Lmg+CiNpbmNsdWRlIDxVUkxDb2RlLmg+CgpVUkxDb2RlIHVybENvZGU7CgpTdHJpbmcgdXJsRW5jb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnN0cmNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxlbmNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS51cmxjb2RlOwp9CgpTdHJpbmcgdXJsRGVjb2RlKFN0cmluZyB1cmxTdHIpIHsKICB1cmxDb2RlLnVybGNvZGUgPSB1cmxTdHI7CiAgdXJsQ29kZS51cmxkZWNvZGUoKTsKICByZXR1cm4gdXJsQ29kZS5zdHJjb2RlOwp9Cgp2b2lkIHNldHVwKCl7CiAgU2VyaWFsLmJlZ2luKDk2MDApOwogIFNlcmlhbC5wcmludGxuKCI9PT09PT09PT1CYXNlNjTnvJbop6PnoIE9PT09PT09PT0iKTsKICBTZXJpYWwucHJpbnRsbihyYmFzZTY0LmVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4ocmJhc2U2NC5kZWNvZGUoIjVMMmc1YVc5VFdsNGJIaz0iKSk7CiAgU2VyaWFsLnByaW50bG4oIj09PT09PT09PT1VcmznvJbop6PnoIE9PT09PT09PT09PSIpOwogIFNlcmlhbC5wcmludGxuKHVybEVuY29kZSgi5L2g5aW9TWl4bHkiKSk7CiAgU2VyaWFsLnByaW50bG4odXJsRGVjb2RlKCIlRTQlQkQlQTAlRTUlQTUlQkRNaXhseSIpKTsKICBTZXJpYWwucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Cn0KCnZvaWQgbG9vcCgpewoKfQ==</code>

View File

@@ -0,0 +1,82 @@
{
"15-MQTT Send Message.mix": {
"__file__": true,
"__name__": "15-MQTT Send Message.mix"
},
"Blynk-远程七彩灯.mix": {
"__file__": true,
"__name__": "Blynk-远程七彩灯.mix"
},
"Blynk控制舵机.mix": {
"__file__": true,
"__name__": "Blynk控制舵机.mix"
},
"Blynk无线桥接通信.mix": {
"__file__": true,
"__name__": "Blynk无线桥接通信.mix"
},
"Blynk气象站.mix": {
"__file__": true,
"__name__": "Blynk气象站.mix"
},
"Blynk留言机.mix": {
"__file__": true,
"__name__": "Blynk留言机.mix"
},
"Blynk连接服务器.mix": {
"__file__": true,
"__name__": "Blynk连接服务器.mix"
},
"MAX7219点阵时钟.mix": {
"__file__": true,
"__name__": "MAX7219点阵时钟.mix"
},
"MQTT连接DF EASY_IOT.mix": {
"__file__": true,
"__name__": "MQTT连接DF EASY_IOT.mix"
},
"NTP时间服务器.mix": {
"__file__": true,
"__name__": "NTP时间服务器.mix"
},
"OLED网络时钟.mix": {
"__file__": true,
"__name__": "OLED网络时钟.mix"
},
"TM1637网络时钟.mix": {
"__file__": true,
"__name__": "TM1637网络时钟.mix"
},
"URL和Base64编解码.mix": {
"__file__": true,
"__name__": "URL和Base64编解码.mix"
},
"使用http发送POST请求.mix": {
"__file__": true,
"__name__": "使用http发送POST请求.mix"
},
"心知天气.mix": {
"__file__": true,
"__name__": "心知天气.mix"
},
"旋转编码器读取数据.mix": {
"__file__": true,
"__name__": "旋转编码器读取数据.mix"
},
"简明教程": {
"AP模式一键配置网络与清除网络信息.mix": {
"__file__": true,
"__name__": "AP模式一键配置网络与清除网络信息.mix"
},
"MQTT断线反馈与重连.mix": {
"__file__": true,
"__name__": "MQTT断线反馈与重连.mix"
},
"网络连接超时优化.mix": {
"__file__": true,
"__name__": "网络连接超时优化.mix"
},
"__file__": false,
"__name__": "简明教程"
}
}

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Arduino ESP8266@Generic ESP8266 Module"><block type="base_setup" id="*{6gvYug,:6](/yz?0+S" x="-581" y="-161"><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="-578" y="-27"><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>{"xtal":{"key":"80","label":"80 MHz"},"vt":{"key":"flash","label":"Flash"},"exception":{"key":"disabled","label":"Disabled (new aborts on oom)"},"stacksmash":{"key":"disabled","label":"Disabled"},"ssl":{"key":"all","label":"All SSL ciphers (most compatible)"},"mmu":{"key":"3232","label":"32KB cache + 32KB IRAM (balanced)"},"non32xfer":{"key":"fast","label":"Use pgm_read macros for IRAM/PROGMEM"},"ResetMethod":{"key":"nodemcu","label":"dtr (aka nodemcu)"},"CrystalFreq":{"key":"26","label":"26 MHz"},"FlashFreq":{"key":"40","label":"40MHz"},"FlashMode":{"key":"dout","label":"DOUT (compatible)"},"eesz":{"key":"1M64","label":"1MB (FS:64KB OTA:~470KB)"},"led":{"key":"2","label":"2"},"sdk":{"key":"nonosdk_190703","label":"nonos-sdk 2.2.1+100 (190703)"},"ip":{"key":"lm2f","label":"v2 Lower Memory"},"dbg":{"key":"Disabled","label":"Disabled"},"wipe":{"key":"none","label":"Only Sketch"},"baud":{"key":"115200","label":"115200"}}</config><code>CiNpbmNsdWRlIDxFU1A4MjY2V2lGaS5oPgojaW5jbHVkZSA8RVNQODI2NkhUVFBDbGllbnQuaD4KCnZvaWQgc2V0dXAoKXsKICBXaUZpLmJlZ2luKCJXSUZJ5ZCN56ewIiwgIldJRknlr4bnoIEiKTsKICB3aGlsZSAoV2lGaS5zdGF0dXMoKSAhPSBXTF9DT05ORUNURUQpIHsKICAgIGRlbGF5KDUwMCk7CiAgICBTZXJpYWwucHJpbnQoIi4iKTsKICB9CiAgU2VyaWFsLnByaW50bG4oIkxvY2FsIElQOiIpOwogIFNlcmlhbC5wcmludChXaUZpLmxvY2FsSVAoKSk7CgogIFNlcmlhbC5iZWdpbig5NjAwKTsKfQoKdm9pZCBsb29wKCl7CiAgaWYgKFdpRmkuc3RhdHVzKCkgPT0gV0xfQ09OTkVDVEVEKSB7CiAgICBIVFRQQ2xpZW50IGh0dHA7CiAgICBXaUZpQ2xpZW50IGNsaWVudDsKICAgIGh0dHAuYmVnaW4oY2xpZW50LCAiaHR0cDovL0lQQWRkcmVzczozMDAwL2xvZ2luLyIpOwogICAgaHR0cC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICBpbnQgaHR0cENvZGUgPSBodHRwLlBPU1QoIntcIm5hbWVcIjpcIk1peGx5XCJ9Iik7CiAgICBpZiAoaHR0cENvZGUgPiAwKSB7CiAgICAgIFN0cmluZyBSZXF1ZXN0X3Jlc3VsdCA9IGh0dHAuZ2V0U3RyaW5nKCk7CiAgICAgIFNlcmlhbC5wcmludGxuKFJlcXVlc3RfcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgIFNlcmlhbC5wcmludGxuKCJJbnZhbGlkIHJlc3BvbnNlISIpOwogICAgfQogICAgaHR0cC5lbmQoKTsKICB9CiAgZGVsYXkoMTAwMCk7Cgp9</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 Beta11" board="Arduino ESP8266@Generic ESP8266 Module" xmlns="http://www.w3.org/1999/xhtml"><block type="base_setup" id="X,T{e3m|sw.xt9[900Bf" x="0" y="0"><statement name="DO"><block type="serial_begin" id="/;;jy)nz*2Cp${m6z71z"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="=_3Y08AX?!FkAz~H*R[y"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_info" id="S$tHl7DIRU+C9av(RXBp"><value name="SSID"><shadow type="text" id="oMWhd}*{18)_[q_+^+VC"><field name="TEXT">Xiaomi_0432</field></shadow></value><value name="PWD"><shadow type="text" id="wQ5RnB;mc`M59W/dpoO:"><field name="TEXT">18768195210</field></shadow></value><next><block type="weather_seniverse_city_weather" id="sQ,B6+IBLGSqA5[{tcAE"><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="QuA?L|}NKMElnH)1Dss)"><field name="province">浙江</field><field name="city">杭州</field></shadow></value><value name="private_key"><shadow type="weather_private_key" id="7)pGyI`~N#G*Uuh14DWR"><field name="key">S9l2sb_ZK-UsWaynG</field></shadow></value></block></next></block></next></block></statement></block><block type="simple_timer" id="T!1p73n2`8/eTf`.UJ" x="0" y="272"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="M_rB?je%do_%oj$s]QU?"><field name="NUM">5000</field></shadow></value><statement name="zxhs"><block type="controls_if" id="oeHg^P_x0H4:tg_$L)I+"><value name="IF0"><block type="weather_get_seniverse_weather_info" id="pu:8R1ObR+pS-r;4BKw-"><field name="api">weather/now</field><field name="type">update</field></block></value><statement name="DO0"><block type="serial_println" id="F|N_Ly4O8q(D9(2t,{IE"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="weather_get_seniverse_weather_info1" id="DX3X%0T;i(EG#A/O;P{u"><field name="type">getWeatherText</field></block></value></block></statement></block></statement></block></xml>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc3" board="Arduino ESP8266@Generic ESP8266 Module"><block type="factory_notes" id="N/v:0@^M0B;6eZ6`Zlni" x="-297" y="-639"><field name="VALUE">当我们使用ESP系列开发板编写好程序后可能会&amp;#10;遇到更改设备位置等情况,这个时候我们不需要&amp;#10;重新编写程序连接wifi只需要用下方的AP一键配网&amp;#10;便可随时更改网络</field><next><block type="factory_notes" id="1L8`gENf;Ir.JT::I|$J"><field name="VALUE">一键配网在程序初始化时执行一次会尝试连接上次&amp;#10;已连接成功的wifi若连接失败或者不在原来的网&amp;#10;络环境则会启用一个ESP开头的热点名称无密码&amp;#10;使用手机或者电脑连接此网络输入ip地址192.168.4.1&amp;#10;就可以通过网页配置wifi信息</field><next><block type="factory_notes" id="tT{{/Fujvfg4/jT)g[C~"><field name="VALUE">第一次使用建议打开串口监视器先体验一键配网,&amp;#10;按照串口监视器提示操作</field><next><block type="factory_notes" id="KPZht_Ip{(eA@VFj-0{H"><field name="VALUE">单机按钮0可以清除上次已连接的网络信息从而重新配网</field></block></next></block></next></block></next></block><block type="base_setup" id="7}-q;3K5!Le]R2t@tRPz" x="-296" y="-291"><statement name="DO"><block type="serial_begin" id="Q/KI+2,,nNoU6#D6u@#w"><field name="serial_select">Serial</field><value name="CONTENT"><shadow type="math_number" id="2;RoXW}5cbX}-#M14j9-"><field name="NUM">9600</field></shadow></value><next><block type="WIFI_smartConfig" id="rTjBa)EW3s5u-qg(C@qj"><field name="MODE">AP</field></block></next></block></statement></block><block type="simple_timer" id="oHoRL?;2#/1u$~K~-zC-" x="-294" y="-164"><field name="NO">1</field><value name="timein"><shadow type="math_number" id="f5PGuRS.R!NZ4NRq-xG("><field name="NUM">1000</field></shadow></value><statement name="zxhs"><block type="serial_println" id="`6oHq8}m934YM_BXKSBb"><field name="serial_select">Serial</field><field name="new_line">println</field><value name="CONTENT"><block type="text" id="/rj7[?]e`@[ZyU3zY:+5"><field name="TEXT">hello</field></block></value></block></statement></block><block type="OneButton_interrupt" id="zVL{?wJDX^[7xY=aV$Ob" x="-297" y="-67"><field name="mode">attachClick</field><value name="PIN"><shadow type="pins_digital" id="SsV)pq0FW./.!?WRpQYU"><field name="PIN">0</field></shadow></value><value name="STAT"><shadow type="inout_highlow" id="ncf}@(XQzzyMc0IwAqbR"><field name="BOOL">LOW</field></shadow></value><statement name="DO"><block type="factory_block_with_textarea" id="OSYe-K7l@fUvHZU?+$CR"><field name="VALUE">WiFiManager wifiManager;&amp;#10;wifiManager.resetSettings();</field><comment pinned="false" h="80" w="160">这两句代码可以清除已连接的网络信息</comment></block></statement></block></xml><config>{"xtal":"80","vt":"flash","exception":"disabled","stacksmash":"disabled","ssl":"all","mmu":"3232","non32xfer":"fast","ResetMethod":"nodemcu","CrystalFreq":"26","FlashFreq":"40","FlashMode":"dout","eesz":"1M64","led":"2","sdk":"nonosdk_190703","ip":"lm2f","dbg":"Disabled","wipe":"none","baud":"115200"}</config><code>CiNpbmNsdWRlIDxXaUZpTWFuYWdlci5oPgojaW5jbHVkZSA8U2ltcGxlVGltZXIuaD4KCiNpbmNsdWRlIDxPbmVCdXR0b24uaD4KCldpRmlTZXJ2ZXIgc2VydmVyKDgwKTsKU2ltcGxlVGltZXIgdGltZXI7Ck9uZUJ1dHRvbiBidXR0b24wKDAsdHJ1ZSk7Cgp2b2lkIFNpbXBsZV90aW1lcl8xKCkgewogIFNlcmlhbC5wcmludGxuKCJoZWxsbyIpOwp9Cgp2b2lkIGF0dGFjaENsaWNrMCgpIHsKICAvLyDov5nkuKTlj6Xku6PnoIHlj6/ku6XmuIXpmaTlt7Lov57mjqXnmoTnvZHnu5zkv6Hmga8KICBXaUZpTWFuYWdlciB3aWZpTWFuYWdlcjsKICB3aWZpTWFuYWdlci5yZXNldFNldHRpbmdzKCk7Cn0KCnZvaWQgc2V0dXAoKXsKICBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgV2lGaS5tb2RlKFdJRklfU1RBKTsKICBXaUZpTWFuYWdlciB3bTsKICBib29sIHJlczsKICByZXM9d20uYXV0b0Nvbm5lY3QoKTsKICB0aW1lci5zZXRJbnRlcnZhbCgxMDAwTCwgU2ltcGxlX3RpbWVyXzEpOwoKICBidXR0b24wLmF0dGFjaENsaWNrKGF0dGFjaENsaWNrMCk7Cn0KCnZvaWQgbG9vcCgpewogIC8v5b2T5oiR5Lus5L2/55SoRVNQ57O75YiX5byA5Y+R5p2/57yW5YaZ5aW956iL5bqP5ZCO77yM5Y+v6IO95LyaCiAgLy/pgYfliLDmm7TmlLnorr7lpIfkvY3nva7nrYnmg4XlhrXvvIzov5nkuKrml7blgJnmiJHku6zkuI3pnIDopoEKICAvL+mHjeaWsOe8luWGmeeoi+W6j+i/nuaOpXdpZmnlj6rpnIDopoHnlKjkuIvmlrnnmoRBUOS4gOmUrumFjee9kQogIC8v5L6/5Y+v6ZqP5pe25pu05pS5572R57ucCiAgLy/kuIDplK7phY3nvZHlnKjnqIvluo/liJ3lp4vljJbml7bmiafooYzkuIDmrKHkvJrlsJ3or5Xov57mjqXkuIrmrKEKICAvL+W3sui/nuaOpeaIkOWKn+eahHdpZmnvvIzoi6Xov57mjqXlpLHotKXmiJbogIXkuI3lnKjljp/mnaXnmoTnvZEKICAvL+e7nOeOr+Wig+WImeS8muWQr+eUqOS4gOS4qkVTUOW8gOWktOeahOeDreeCueWQjeensO+8iOaXoOWvhuegge+8ie+8jAogIC8v5L2/55So5omL5py65oiW6ICF55S16ISR6L+e5o6l5q2k572R57uc6L6T5YWlaXDlnLDlnYAxOTIuMTY4LjQuMQogIC8v5bCx5Y+v5Lul6YCa6L+H572R6aG16YWN572ud2lmaeS/oeaBrwogIC8v56ys5LiA5qyh5L2/55So5bu66K6u5omT5byA5Liy5Y+j55uR6KeG5Zmo5YWI5L2T6aqM5LiA6ZSu6YWN572R77yMCiAgLy/mjInnhafkuLLlj6Pnm5Hop4blmajmj5DnpLrmk43kvZwKICAvL+WNleacuuaMiemSrjDlj6/ku6XmuIXpmaTkuIrmrKHlt7Lov57mjqXnmoTnvZHnu5zkv6Hmga/vvIzku47ogIzph43mlrDphY3nvZEKCiAgdGltZXIucnVuKCk7CgogIGJ1dHRvbjAudGljaygpOwp9</code>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

@@ -0,0 +1,29 @@
{
"name": "@mixly/arduino-esp8266",
"version": "1.1.0",
"description": "适用于mixly的arduino esp8266模块",
"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-esp8266"
],
"homepage": "https://gitee.com/mixly2/mixly2.0_src/tree/develop/boards/default_src/arduino_esp8266",
"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_esp8266"
},
"publishConfig": {
"access": "public"
},
"license": "Apache 2.0"
}

View File

@@ -0,0 +1,56 @@
const pins = {};
pins.arduino_esp8266 = {
description: "esp8266_Arduino",
digital: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["A0", "A0"]],
analog: [["A0", "A0"]],
pwm: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["A0", "A0"]],
interrupt: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["A0", "A0"]],
SDA: [["4", "4"]],
SCL: [["5", "5"]],
MOSI: [["13", "13"]],
MISO: [["12", "12"]],
SCK: [["14", "14"]],
serial_select: [["Serial", "Serial"], ["SoftwareSerial", "mySerial"], ["SoftwareSerial1", "mySerial1"], ["SoftwareSerial2", "mySerial2"], ["SoftwareSerial3", "mySerial3"]],
serial: 9600
};
pins["ESPectro Core"] =
pins['Arduino ESP8266 Generic'] =
pins["Generic_ESP8266"] =
pins["ESP8266_Modules"] =
pins["Generic ESP8266 Module"] =
pins["Generic ESP8285 Module"] =
pins["Adafruit HUZZAH ESP8266"] =
pins["NodeMCU 0.9 (ESP-12 Module)"] =
pins["NodeMCU 1.0 (ESP-12E Module)"] =
pins["Olimex MOD-WIFI-ESP8266(-DEV)"] =
pins["SparkFun ESP8266 Thing"] =
pins["SweetPea ESP-210"] =
pins["ESPDuino"] =
pins["Adafruit Feather HUZZAH ESP8266"] =
pins["Invent One"] =
pins["XinaBox CW01"] =
pins["ESPresso Lite 1.0"] =
pins["ESPresso Lite 2.0"] =
pins["Phoenix 1.0"] =
pins["Phoenix 2.0"] =
pins["NodeMCU 0.9"] =
pins["NodeMCU 1.0"] =
pins["Olimex MOD-WIFI-ESP8266"] =
pins["SparkFun ESP8266 Thing Dev"] =
pins["LOLIN"] =
pins["WeMos D1 R1"] =
pins["ESPino"] =
pins["ThaiEasyElec's ESPino"] =
pins["Arduino ESP8266"] =
pins["WifInfo"] =
pins["esp8266_Arduino"] =
pins["4D Systems gen4 IoD Range"] =
pins["Digistump Oak"] =
pins["WiFiduino"] =
pins["Amperka WiFi Slot"] =
pins["Seeed Wio Link"] =
pins.arduino_esp8266;
export default pins;

File diff suppressed because it is too large Load Diff

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')
}
}
});

View File

@@ -0,0 +1,21 @@
const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = merge(common, {
mode: "development",
devtool: 'source-map',
plugins: [
new ESLintPlugin({
context: process.cwd(),
}),
new HtmlWebpackPlugin({
inject: false,
template: path.resolve(process.cwd(), 'template.xml'),
filename: 'index.xml',
minify: false
}),
]
});

View File

@@ -0,0 +1,27 @@
const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");
const TerserPlugin = require("terser-webpack-plugin");
var HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = merge(common, {
mode: "production",
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
}),
new HtmlWebpackPlugin({
inject: false,
template: path.resolve(process.cwd(), 'template.xml'),
filename: 'index.xml',
minify: {
removeAttributeQuotes: true,
collapseWhitespace: true,
removeComments: true,
}
})
]
}
});