Blockly串口积木开发

Blockly串口积木开发

今天出一期关于Blockly串口积木开发的教程,废话不多说,上代码

串口积木

串口积木借鉴mixly,python代码可以参考docs.singtown.com/micropython...

一:构建积木

1,涉及要修改得文件(blocks,serial这个是要自己创建) 2,blocks文件引入serial文件,并在export导出积木

javascript 复制代码
serial文件

/**
 * @license
 * Copyright 2012 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

// Former goog.module ID: Blockly.libraryBlocks.serial
import '../core/field_dropdown.js';
import {
  createBlockDefinitionsFromJsonArray,
  defineBlocks,
} from '../core/common.js';

export const blocks = createBlockDefinitionsFromJsonArray([
    {
        type: 'serial_init',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_INIT}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'input_value',
                name: 'RX',
                value: 0
            },
            {
                type: 'input_value',
                name: 'TX',
                value: 0
            },
            {
                type: 'field_dropdown',
                name: 'baudrate',
                options: [
                    ['115200', '115200'],
                    ['57600', '57600'],
                    ['37400', '37400'],
                    ['31250', '31250'],
                    ['28800', '28800'],
                    ['19200', '19200'],
                    ['14400', '14400'],
                    ['9600', '9600'],
                    ['4800', '4800'],
                    ['2400', '2400'],
                    ['1200', '1200'],
                    ['300', '300']
                ]
            }
        ]
    },
    {
        type: 'serial_print',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_PRINT}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'input_value',
                name: 'TEXT',
                check: 'String'
            }
        ]
    },
    {
        type: 'serial_println',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_PRINTLN}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'input_value',
                name: 'TEXT',
                check: 'String'
            }
        ]
    },
    {
        type: 'serial_println_radix',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_PRINTLN_RADIX}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'field_dropdown',
                name: 'radix',
                options: [
                    ['二进制', 'bin'],
                    ['八进制', 'oct'],
                    ['十进制', 'int'],
                    ['十六进制', 'hex']
                ]
            },
            {
                type: 'input_value',
                name: 'TEXT',
                check: 'String'
            },
        ]
    },
    {
        type: 'serial_send_msg',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_SEND_MSG}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'input_value',
                name: 'codes',
                check: 'String'
            },
            {
                type: 'field_dropdown',
                name: 'repeat',
                options: [
                    ['是', 'True'],
                    ['否', 'False']
                ]
            }
        ]
    },
    {
        type: 'serial_output',
        style: 'mechanical_arm',
        previousStatement: null,
        nextStatement: null,
        message0: '%{BKY_SERIAL_OUTPUT}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            },
            {
                type: 'input_value',
                name: 'TEXT',
                check: 'String'
            }
        ]
    },
    {
        type: 'serial_any',
        style: 'mechanical_arm',
        output: 'Boolean',
        message0: '%{BKY_SERIAL_ANY}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            }
        ]
    },
    {
        type: 'serial_read',
        style: 'mechanical_arm',
        output: 'String',
        message0: '%{BKY_SERIAL_READ}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            }
        ]
    },
    {
        type: 'serial_readline',
        style: 'mechanical_arm',
        output: 'String',
        message0: '%{BKY_SERIAL_READLINE}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            }
        ]
    },
    {
        type: 'serial_read_others',
        style: 'mechanical_arm',
        output: 'String',
        message0: '%{BKY_SERIAL_READ_OTHERS}',
        args0: [
            {
                type: 'field_dropdown',
                name: 'variable',
                options: [
                    ['uart1', 'uart1'],
                ]
            }
        ]
    }
]);

// Register provided blocks.
defineBlocks(blocks);

至此串口积木已经完成,看一下效果图

二:构建python

1,涉及要修改得文件(python,serial这个是要自己创建) 2,python文件引入serial文件,并在export导出python代码

javascript 复制代码
serial文件

/**
 * @license
 * Copyright 2012 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file Generating Python for serial blocks.
 */

// Former goog.module ID: Blockly.Python.serial

import type {Block} from '../../core/block.js';
import type {PythonGenerator} from './python_generator.js';
import {Order} from './python_generator.js';

export function serial_init(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')
    let RX = generator.valueToCode(block, 'RX', Order.NONE) || 0
    let TX = generator.valueToCode(block, 'TX', Order.NONE) || 0
    let baudrate = block.getFieldValue('baudrate')

    let code = `${variable} = machine.UART(1, tx=${TX}, rx=${RX}, baudrate=${baudrate})\n`
    return code
}
export function serial_print(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')
    let text = generator.valueToCode(block, 'TEXT', Order.NONE) || "''";

    let code = `${variable}.write(str(${text}))\n`
    return code
}
export function serial_println(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')
    let text = generator.valueToCode(block, 'TEXT', Order.NONE) || "''";

    let code = `${variable}.write(str(${text})+'\\r\\n')\n`
    return code
}
export function serial_println_radix(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')
    let radix = block.getFieldValue('radix')
    let text = generator.valueToCode(block, 'TEXT', Order.NONE) || "''";

    let code = `${variable}.write(str(${radix}(${text}))+'\\r\\n')\n`
    return code
}
export function serial_send_msg(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_uart_com'] = `import uart_com`

    let variable = block.getFieldValue('variable')
    let codes = block.getFieldValue('codes')
    let repeat = block.getFieldValue('repeat')

    let code = `uart_com.send(${variable}, ${codes}, repeat=${repeat})\n`
    return code
}
export function serial_output(block: Block, generator: PythonGenerator) {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')
    let text = generator.valueToCode(block, 'TEXT', Order.NONE) || "''";

    let code = `${variable}.write(${text})\n`
    return code
}
export function serial_any(block: Block, generator: PythonGenerator): [string, Order] {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')

    let code = `${variable}.any()\n`
    return [code, Order.ATOMIC]
}
export function serial_read(block: Block, generator: PythonGenerator): [string, Order] {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')

    let code = `${variable}.read()\n`
    return [code, Order.ATOMIC]
}
export function serial_readline(block: Block, generator: PythonGenerator): [string, Order] {
    (generator as AnyDuringMigration).definitions_['import_machine'] = `import machine`

    let variable = block.getFieldValue('variable')

    let code = `${variable}.read()\n`
    return [code, Order.ATOMIC]
}
export function serial_read_others(block: Block, generator: PythonGenerator): [string, Order] {
    (generator as AnyDuringMigration).definitions_['import_uart_com'] = `import uart_com`

    let variable = block.getFieldValue('variable')

    let code = `uart_com.recv(${variable})\n`
    return [code, Order.ATOMIC]
}

至此元组python已经完成,看一下效果图 总结:串口积木,python都是依据mixly,库文件不是所有板子都是一样的,更具自己板子去做相应开发

相关推荐
Listen·Rain6 分钟前
Vue3中computed详解
前端·javascript·vue.js
kyle~1 小时前
Swagger ---基于 描述文件 生成 交互式API文档 的工具
前端·后端·规格说明书·说明文档
世界哪有真情9 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
Listen·Rain10 小时前
Vue3:setup详解
前端·javascript·vue.js
Patrick_Wilson11 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
kyriewen11 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
小粉粉hhh12 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js
Csvn12 小时前
🤖 AI 生成前端代码的 5 个典型翻车现场及修复指南
前端
IT_陈寒13 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端
索西引擎14 小时前
【React】key 属性:协调算法中的元素标识机制与最佳实践
前端·javascript·react.js