Mixly 二次开发 自定义库
发布日期:2021-06-29 11:29:37 浏览次数:2 分类:技术文章

本文共 4298 字,大约阅读时间需要 14 分钟。

Mixly基本原理

Mixly可以看作是介于普通用户与Arduino IDE之间桥梁,通过这个桥梁,即使用户不懂C语言的语法,也可以利用图形化程序编写Arduino程序。Mixly的基本原理是将图形化程序转化成C语言,再利用Arduino IDE上传到硬件中。在我们动手编写第三方库之前,先来了解Mixly是如何将图形化程序转化成C语言的。

根目录下的xxx.xml文件定义了图形块的基本信息,比如类别、名称,ID等。block/xxx.js文件定义了每个图形块的样式,比如颜色、文字、图标等。generator/xxx.js文件是将图形块程序转化成C语言的关键部分。language/xxx/en.js(zh-hans.js)等文件是语言文件,en.js是英文语言文件,zh-hans.js是简体中文语言文件,zh-hant.js是繁体中文语言文件。该类文件定义了图形块程序中每一个字段显示的文字内容。
各文件作用的流程如下图所示:
在这里插入图片描述Mixly第三方库基本结构如下图 所示:
在这里插入图片描述

简介&软件准备:

Mixly 1.1.5

官方指南: Instructions -使用Mixly写自定义库

第三方库范例: dfrobot、Otto

文本编辑工具: 记事本

此教程中所有文件可新建文本文档,修改其后缀实现编译。

这里用的编译器是Adobe Dreamweaver CS4,脚本语言是JavaScript

Mixly二次开发 文件结构

在这里插入图片描述block/xxx.js文件:定义了你定制的图形化模块的样子。

generator/xxx.js文件:定义了每一个图形化模块对应的 Arduino C语言代码。

block/xxx.js文件:定义了你定制的图形化模块的样子。

generator/xxx.js文件:定义了每一个图形化模块对应的 Arduino C语言代码。

block和generator :文件夹下各有一个与项目同名但内容不同的xxx.js文件,一个控制“外观”,另一个控制“内涵”。

xxx.xml: 必须的,所有模块的路径,相当于字典

开始开发:

开发内容: OLED中文显示模块

开发准备:

新建文件,如下图:

在这里插入图片描述

  • 在 block 和 generator 文件夹中新建文本文档,并重命名为 kivinOLED.js , 如下图所示:

在这里插入图片描述

  • 再新建一个 kivinOLED 文件夹,放入u8g2库文件,如下图所示:

在这里插入图片描述开始编程:

共分为3个部分, 也就是说,需要编写3个必要的脚本:

  1. block文件夹下 kivinOLED.js 脚本
//下列三行代码,为刚需,此提供了下列所有代码的入口'use strict'; goog.provide('Blockly.Blocks.kivinOLED');//注意脚本类别及路径名称 goog.require('Blockly.Blocks'); // ---OLED模块图形配置--- //include模块Blockly.Blocks.U8g2lib_include = {
init: function() {
this.setColour(120);//模块图形颜色 this.appendDummyInput("")//此行代码刚需,为模块创建提供入口 .appendField("#include <") //代码块上的文字内容 .appendField(new Blockly.FieldTextInput('U8g2lib'), 'INCLUDE')//创建文本输入对象 .appendField(".h>"); this.setPreviousStatement(true);//是否可以与上一模块连接 this.setNextStatement(true);//是否可以与下一模块连接 }}; //配置构造函数模块Blockly.Blocks.config = {
init: function() {
this.setColour(120); this.appendDummyInput("") .appendField("配置构造函数") .appendField("U8g2 SSD1306 128X64") this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setInputsInline(false);//是否开启模块单行显示(true为单行,false为多行) }}; //开启 U8g2驱动模块Blockly.Blocks.initOled = {
init: function() {
this.setColour(120); this.appendDummyInput("") .appendField("开启U8g2驱动程序") this.setPreviousStatement(true, null); this.setNextStatement(true, null); }}; //中文输入模块Blockly.Blocks.displayCN = {
init: function() {
this.setColour(50); this.appendDummyInput("") .appendField("输入字符串...") this.appendValueInput("VALUE", String) .setCheck([String,Number]) .setAlign(Blockly.ALIGN_RIGHT);//开启模块右侧可连接 this.setPreviousStatement(true, null); this.setNextStatement(false, null); }};
  1. 根文件夹中的 kivinOLED.xml 文件
U8g2lib.h
textOled
  1. generator 文件夹中 kivinOLED.js 脚本
//下列三行代码,为刚需,此提供了下列所有代码的入口'use strict'; goog.provide('Blockly.Arduino.kivinOLED');//注意脚本类别及路径名称 goog.require('Blockly.Arduino');  // ---OLED模块图形转代码---  //include模块  Blockly.Arduino.U8g2lib_include = function() {
var INCLUDE = this.getFieldValue('INCLUDE');//使用INCLUDE 变量来存储,block文件夹中的kivinOLED.js脚本,文本输入对象的值 Blockly.Arduino.definitions_['define_'+INCLUDE] = '#include <'+INCLUDE+'.h>';//严格函数,固定写法(转include调用内容) return '';}; //配置构造函数模块 Blockly.Arduino.config = function() {
Blockly.Arduino.definitions_['define_'] = 'U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,SCL,SDA);\n'; return '';}; //开启 U8g2驱动模块 Blockly.Arduino.initOled = function() {
Blockly.Arduino.setups_['setup_intOled'] = 'u8g2.begin();\n';//严格函数固定写法(转setup函数中代码) return '';}; //中文输入模块 Blockly.Arduino.displayCN=function(){
var value = Blockly.Arduino.valueToCode(this, 'VALUE', Blockly.Arduino.ORDER_ATOMIC) || '\"\"'; return 'u8g2.firstPage();' + '\n' + 'do {' + '\n' + 'u8g2.setFont(u8g2_font_unifont_t_chinese1);' + '\n' + 'u8g2.drawUTF8(0,15,' +value+ ');' + '\n' + '} while ( u8g2.nextPage() );' + '\n' + 'delay(1000);'; };

开发完成并导入成功效果图:

在这里插入图片描述

测试结果:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

总结:

通过本次作业,我学会了在Mixly 上进行二次开发导入自定义库并顺利地完成了测试。第三方库开发是一劳永逸的事情,开发完成后,可以降低学生学习难度,让学生能更快地实现想要的功能,为学生的创意想法插上实现的翅膀。

转载地址:https://blog.csdn.net/zycwlkq/article/details/116922059 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:基于STM32开发板实现传感数据采集及上云
下一篇:Mind+第三方用户库实现

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月28日 08时51分41秒