匿名
未登录
登录
丢石头百科
搜索
查看“Micro:bit系列教程25:自定义Micro:bit软件包”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
Micro:bit系列教程25:自定义Micro:bit软件包
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
当要使用Micro:bit驱动非板载外设时,制作专用软件包并添加到项目,可提高程序的重复利用率,同时提高开发效率。 本节将介绍如何制作Micro:bit扩展软件包: <h1> 1.<span style="font-size:15.0pt; line-height:240%;font-family:黑体">搭载环境 </h1> <h2> <span lang="EN-US" style="font-size:12.0pt; line-height:173%;font-family:黑体">1.1.<span style="font-size:12.0pt; line-height:173%;font-family:黑体">安装node.js </h2> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">下载地址: <span style="font-size:12.0pt;line-height:150%; font-family:宋体">https://nodejs.org/en/ <span style="font-size: 12.0pt;line-height:150%;font-family:宋体">,根据32位或64位系统下载不同版本,并安装,推荐安装官方推荐版本: [[File:153040kofy7269o2o9snkf.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">检查是否安装成功:打开Windows命令行,输入node -v,输出版本号则表明安装成功: [[File:153041mx7nnp3z6pf651wi.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">若未正常显示版本号,请将安装路径添加到系统环境变量,或重新安装node.js <h2>1.2.安装pxt命令行工具 </h2> <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 打开Windows命令行,输入: <syntaxhighlight lang="python"> <a name="_Hlk524710277"> <span courier="" lang="EN-US" new="" style="mso-bidi-font-family: ">npm install -g pxt</syntaxhighlight> == 打若出现以下提示,则成功安装: == [[File:153041ksv8sq9azwuucvtu.png]] <h2>1.3.安装Visual Studio Code </h2> 下载地址: <span style="font-size: 12.0pt;line-height:150%;font-family:宋体">https://code.visualstudio.com/ ,根据32位或64位系统选择不同的版本下载安装,该工具为官方推荐工具,编辑TypeScript脚本时有语法提示,错误检查等,推荐使用。 检查是否安装成功:打开Windows控制台,输入code -v,输出版本号则表明安装成功: [[File:153041c996ara8xxzu335y.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">若未正常显示版本号,请将安装路径添加到系统环境变量,或重新安装Visual Studio Code。 <span style="font-size:12.0pt; line-height:150%;font-family:宋体">== 1.4.安装Git == 下载地址: https://git-scm.com/ ,根据32位或64位系统选择不同的版本下载安装,发布软件包的时候需要用到该软件。 <h2>1.5<span lang="EN-US" new="" roman="" style="font-size:12.0pt;line-height:173%;font-family:黑体;mso-bidi-font-family: " times="">.<span new="" roman="" style="font-size:12.0pt;line-height:173%;font-family:黑体;mso-bidi-font-family: " times="">加载工具链 </h2> 新建文件夹,(注意:制作的软件包也需放至该文件夹的子文件夹下,本次操作是在E:\Program\Project\MicroBit_Project\Server路径建立microbit文件夹) 在microbit文件夹下加载Micro:bit工具链,打开Windows命令行进入该文件夹,输入: <syntaxhighlight lang="python"> pxt target microbit</syntaxhighlight> 该过程可能持续几分钟,如果出现如下提示,则表明Micro:bit工具链加载成功: [[File:153041nmzwgvg8udtag8gt.png]] 此时输入: <syntaxhighlight lang="python"> pxt help</syntaxhighlight> 可查看pxt的命令行帮助: [[File:153041odkinn247huis74t.png]] 打开microbit文件夹,可见该文件夹下新增如下文件: [[File:153042u3nw7wznd30zii30.png]] = 2.生成软件包所需文件 = 在microbit文件夹下,建立projects文件夹,(注意,必须命名为projects,当执行pxt serve命令时,将会寻找projects文件夹)。 进入projects文件夹,新建文件夹,并以软件包名称命名(最终会将该文件夹下所有文件上传至Github,本次操作中,在projects文件夹下新建MCP23017文件夹),如下图所示: [[File:153042tpa790nnh3in4g9s.png]] 打开Windows命令行,进入到新建的以软件包名称命名的文件夹 (本次进入到MCP23017文件夹),执行以下命令,生成软件包所需的部分文件: <syntaxhighlight lang="python"> pxt init</syntaxhighlight> [[File:153042shc372jt27hdfdpn.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">此操作需输入相关信息,分别如下: name:模块名称,为软件包名称,该名称将来也将显示到makecode界面中。 description:对软件包功能的描述,用makecode加载软件包时将展示。 license: <span style="font-size:12.0pt;line-height:150%;font-family: 宋体">软件授权条款 <span style="font-size:12.0pt; line-height:150%;font-family:宋体">输入相关信息后,MCP23017文件夹下新增了如下文件: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:153042znk77inlbqqizbf4.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">其中pxt.json则记录了模块名称,软件包描述,软件授权条款等信息,如下图所示: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:153042jvqm61zockoddv1z.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">数据以json键值对的形式存储,如果需要修改数据,修改键对应的值即可。 <h1>3.设计驱动代码及图形块 </h1> 打开Windows命令行,进入到新建的以软件包名称命名的文件夹 (本次进入到MCP23017文件夹),输入以下命令,采用Visual Studio Code 打开该项目: code . <span style="font-size:12.0pt; line-height:150%;font-family:宋体">输入回车后,VS Code打开了该项目(pxt init命令生成的就是一个VS Code项目): [[File:153043u85m5226yymp0q5b.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">由于是制作软件包,不需要main.ts文件,因此,将main.ts重命名为 mcp23017.ts,并在该文件下采用TypeScrip编写MCP23017的驱动代码,设计图形块(图形块与注释相关联,图形块设计请参考: <span style="font-size:12.0pt; line-height:150%;font-family:宋体">https://makecode.com/defining-blocks <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体">),<span style="font-size:12.0pt; line-height:150%;font-family:宋体">之后,将pxt.json文件中”file”:下的main.ts修改为MCP23017.ts,如下图所示: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:153043nre9gepaexek9xrl.png]] [[File:153044itp6g67qkvakga2a.png]] <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体">MCP23017<span style="font-size: 12.0pt;line-height:150%;font-family:宋体">驱动及图形块代码如下图所示: === cpp代码: ===<syntaxhighlight lang="python"> /** * 使用此文件来定义自定义函数和图形块。 * 想了解更详细的信息,请前往 https://makecode.microbit.org/blocks/custom */ /** * 自定义图形块 */ enum REGISTER { IODIRA = 0x00, IODIRB = 0x01, IPOLA = 0x02, IPOLB = 0x03, GPINTENA = 0x04, GPINTENB = 0x05, DEFVALA = 0x06, DEFVALB = 0x07, INTCONA = 0x08, INTCONB = 0x09, IOCONA = 0x0A, IOCONB = 0x0B, GPPUA = 0x0C, GPPUB = 0x0D, INTFA = 0x0E, INTFB = 0x0F, INTCAPA = 0x10, INTCAPB = 0x11, GPIOA = 0x12, GPIOB = 0x13, OLATA = 0x14, OLATB = 0x15 } enum PIN { A = 0, B = 1 } //% weight=5 color=#9900CC icon="\uf53b" namespace MCP23017 { const MCP23017_ADDRESS = 0x20 const MCP23017_IODIRA = 0x00 const MCP23017_IPOLA = 0x02 const MCP23017_GPINTENA = 0x04 const MCP23017_DEFVALA = 0x06 const MCP23017_INTCONA = 0x08 const MCP23017_IOCONA = 0x0A const MCP23017_GPPUA = 0x0C const MCP23017_INTFA = 0x0E const MCP23017_INTCAPA = 0x10 const MCP23017_GPIOA = 0x12 const MCP23017_OLATA = 0x14 const MCP23017_IODIRB = 0x01 const MCP23017_IPOLB = 0x03 const MCP23017_GPINTENB = 0x05 const MCP23017_DEFVALB = 0x07 const MCP23017_INTCONB = 0x09 const MCP23017_IOCONB = 0x0B const MCP23017_GPPUB = 0x0D const MCP23017_INTFB = 0x0F const MCP23017_INTCAPB = 0x11 const MCP23017_GPIOB = 0x13 const MCP23017_OLATB = 0x15 let initialized = false function i2cwrite(addr: number, reg: number, value: number): void { let buf = pins.createBuffer(2); buf[0] = reg; buf[1] = value; pins.i2cWriteBuffer(addr, buf); } function i2cread(addr: number, reg: number): number { pins.i2cWriteNumber(addr, reg, NumberFormat.UInt8BE); let val = pins.i2cReadNumber(addr, NumberFormat.UInt8BE); return val; } function initMCP23017(): void { for (let regAddr = 0; regAddr < 22; regAddr++) { if (regAddr == 0 || regAddr == 1) { i2cwrite(MCP23017_ADDRESS, regAddr, 0xFF); } else { i2cwrite(MCP23017_ADDRESS, regAddr, 0x00); } } //configue all PinA output i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRA, 0x00); //configue all PinB input i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRB, 0xFF); //configue all PinB pullUP i2cwrite(MCP23017_ADDRESS, MCP23017_GPPUB, 0xFF); initialized = true; } /** *Read data from the register * @param reg [0-21] register of mcp23017; eg: 0, 15, 23 */ //% blockId=ReadReg block="Read register |%reg| data" //% weight=65 export function ReadReg(reg: REGISTER): number { let val = i2cread(MCP23017_ADDRESS, reg); return val; } /** * WriteData to PinA or PinB * @param pin [0-1] choose PinA or PinB; eg: 0, 1 * @param value [0-255] pulse of servo; eg: 128, 0, 255 */ //% blockId=WritePin block="Set P |%pin| value |%value|" //% weight=75 //% value.min=0 value.max=255 export function WritePin(pin: PIN, value: number): void { if (!initialized) { initMCP23017(); } if (pin == 0) { i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOA, value); } else { i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOB, value); } } /** *ReadData From PinA or PinB * @param pin [0-1] choose PinA or PinB; eg: 0, 1 */ //% blockId=ReadPin block="Read data from |%pin|" //% weight=85 export function ReadPin(pin: PIN): number { if (!initialized) { initMCP23017(); } if (pin == 0) { let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOA); return val; } else { let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOB); return val; } } } </syntaxhighlight> <h1>4.编写测试代码 </h1> <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 在采用pxt init 生成的文件中,test.ts文件为测试文件,当作为软件包添加到其它项目中时,该文件不会被编译,而作为开发流程中的功能测试时,该文件将会被编译,且单独执行。 <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 现编写测试代码,对输出功能进行测试: [[File:153044uvsqjooed26qondx.png]] <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 在该测试代码中,其操作为对MCP23017的A引脚的输出寄存器写入十进制数值:85,其二进制为:01010101,对应PA0至PA7的电平状态分别为:高低高低高低高低。 <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 此次测试代码为: === cpp代码: ===<syntaxhighlight lang="python"> /* tests go here; this will not be compiled when this package is used as a library*/ basic.forever(() => { MCP23017.WritePin(0,85); }) </syntaxhighlight><h1>5.编译检查,测试 </h1> <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 先进行语法检查,如果有语法出错,VS code 会进行提示,及时在VS Code中改正即可: [[File:153045u00wshjazls069s8.png]] <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 打开Windows命令行,进入到新建的以软件包名称命名的文件夹 (本次进入到MCP23017文件夹),进行以下操作: <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 编译:(可选) 在命令行输入:pxt build,该步骤主要方便检查语法错误,实际中,VS Code能够提示语法错误,可先在VS Code中修改语法错误。 <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 编译并下载:(可选)在命令行输入:pxt deploy,该步骤为先编译,编译成功后直接下载,实际中,通过makecode进行下载更便捷。 打开makecode进行编辑并下载:(推荐) <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 在命令行进入到microbit路径(该路径下包含projects文件夹,运行pxt serve将寻找projects文件夹,若找不到,则将自动创建新项目,因此必须先进入到含有projects子文件夹的microbit文件夹),如下所示: [[File:153045p6nyb1grf9m1r9by.png]] <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 在此基础上,在命令行输入:pxt serve,运行makecode 服务器,自动打开makecode网页: [[File:153046qwzdkme4dbfzs1w4.png]] 此时,软件包已经加载到左侧,可预览软件包的颜色及图标,并可对图形块进行移动,如下图所示: [[File:153047ciz1siyzo94hyy9b.png]] <span style="font-size:12.0pt; line-height:150%;font-family:宋体">但是,在test.ts文件中,仅能以JavaScript代码的形式进行显示。 连接microbit,点击左下角的download,程序将下载到microbit中,运行的是test.ts文件中的代码。 下载后,将MCP23017的PA0-PA7连接至8个LED(低电平亮),观察得,PA0-PA7连接的LED分别为灭亮灭亮灭亮灭亮,软件包测试通过。 <h1>6.发布 </h1> <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 软件包测试通过后,将其发布到Github,此次发布的本地仓库为MCP23017文件夹,具体发布流程请参考廖雪峰的Git教程: <span style="font-size:12.0pt;line-height: 150%;font-family:宋体">https://www.liaoxuefeng.com/ 最后,打开Windows命令行进入到MCP23017文件夹,输入pxt bump命令,修改版本号(修改pxt.json文件中version键对应的值)。 <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体"> 将软件包发布后,即可根据Github仓库链接找到软件包,可在makecode中自由扩展该软件包到项目中了。 [[File:153047p54uln0d945819vk.png]] <h1>参考链接 </h1> <b>搭建环境,及Github的使用: </b> <span style="font-size:12.0pt;line-height:150%; font-family:宋体">https://makecode.com/cli <span style="font-size: 12.0pt;line-height:150%;font-family:宋体">https://makecode.com/packages/getting-started https://makecode.com/packages/getting-started/vscode <span lang="EN-US" style="font-size:12.0pt;line-height:150%; font-family:宋体"> <b>图形块定义 </b> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">https://makecode.com/defining-blocks <span lang="EN-US" style="font-size:12.0pt;line-height:150%; font-family:宋体"> <b><span lang="EN-US" style="font-size:12.0pt;line-height:150%;font-family: 宋体">Github</b><b>教程 </b> <span lang="EN-US" mso-bidi-theme-font:minor-bidi="" new="" roman="" style="font-size:10.5pt;mso-bidi-font-size:11.0pt;font-family: 等线;mso-ascii-theme-font:minor-latin;mso-fareast-theme-font:minor-fareast; mso-hansi-theme-font:minor-latin;mso-bidi-font-family:" times="" zh-cn=""> https://www.liaoxuefeng.com/
返回至
Micro:bit系列教程25:自定义Micro:bit软件包
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志