文章目录
前言
注:本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。
要做 Mind+ 的一个用户库,突然想到 Arduino UNO 在 Mind+上连云只有一个OBLOQ物联网模块(老贵了),刚好手上有一块庆科的EMW3080 Wi-Fi模块,索性试试,下面摘一段官方的话↓
Mind+是一款拥有自主知识产权的国产青少年编程软件,支持Arduino、micro:bit、掌控板等各种开源硬件,兼容Scratch3.0,支持AI与IoT功能,只需要拖动图形化程序块即可完成编程,还可以使用Python/C/C++等高级编程语言,让大家轻松体验创造的乐趣。
- Mind+支持三大主流开源硬件平台(Arduino,micro:bit,掌控板esp32),均可以使用基于arduino C的库,因此只需要编写一个arduino的库即可达到三平台兼容。
- Mind+已经支持几十种常用的扩展小模块库,为方便更多用户的使用,从V1.6.2版本开始开放用户自定义库功能,你可以根据自己的需要编写或移植现有的arduino库,自己设计图形模块(block)的外观及形状,自己设计对应生成的代码。
- 支持通过网络加载Github的用户库或直接本地加载(config.json或.mpext文件)。
-
提示:尽管用户库增加非常简单,但依然建议有一定代码基础的用户进行操作,若有需要增加的模块而不懂代码,依然可以给官方反馈需要增加的模块。
使用用户库请先升级Mind+到V1.6.2 RC2.0及以上版本。
提示:以下是本篇文章正文内容,下面案例可供参考
一、实验准备
1、硬件准备
硬件 | 数量 |
---|---|
Arduino UNO | 1 |
EMW3080 | 1 |
杜邦线 | 若干 |
2、软件准备
软件 |
---|
Mind+ |
VS Code(记事本、Notepad++也可) |
二、实验过程
1、下载样例库
- 样例库:https://gitee.com/dfrobot/ext-oled12864.git
一下的修改都是基于样例库来进行修改的 - 官方教程:https://mindplus.dfrobot.com.cn/ext-api
1.2、用户库文件结构
└─newExtensions // 项目名称
│ config.json // 本用户库的配置文件
│ LICENSE.TXT // 许可证说明
│ README.md // 文档说明
│
└─arduinoC // arduino模式用户库根目录
│ main.ts // 图形块描述文件
│
├─libraries // arduino库文件,列出本扩展库所有需要引用的.c或.h或.cpp文件
│ └─oled12864
│ oled12864.cpp
│ oled12864.h
│ qrcode.c
│ qrcode.h
│
├─_images // 图片文件
│ featured.png // MindPlus扩展库展示图片
│ icon.svg // MindPlus中图形块上的图标文件
│
├─_locales // 翻译文件,支持多国语言
│ zh-cn.json
│ en.json
│
└─_menus // 下拉菜单参数,每个板子可以独立设置
leonardo.json
uno.json
nano.json
mega2560.json
microbit.json
mpython.json
1.3、相关配置文件说明
1.3.1、config.json配置文件
这里的json文件用于展示作者和用户库积木块的一些信息
{
"name": {
"zh-cn": "庆科-EMW3080",
"en": "EMW3080"
},
"description": {
"zh-cn": "简单的使用UNO和EMW3080连接阿里云上传数据",
"en": "EMW3080 Connect Aliyun MQTT"
},
"author": "Simplymyself",
"email": "xxx@qq.com",
"license": "MIT",
"isBoard": false,
"id": "emw3080",
"platform": ["win", "mac", "web"],
"version": "0.0.1",
"asset": {
"arduinoC": {
"dir": "arduinoC/",
"version": "0.0.1",
"board": ["arduino"],
"main": "main.ts"
}
}
}
1.3.2、main.ts描述文件总述
图形块描述文件中通过 //% 后面的内容可以定义图形块外观
通过 function 定义 block 对应的生成代码以及位置
这里只制作了三个积木,分别用于连接Wi-Fi,MQTT,发布消息,由于 Mind+ 用户库暂时不支持事件触发的中断,所以暂时还没有做出接收服务器下发指令的积木
//% color="#6699FF" iconWidth=50 iconHeight=40
namespace emw3080 {
//% block="Wi-Fi连接到 [wifi_ssid] [wifi_password]" blockType="command"
//% wifi_ssid.shadow="string" wifi_ssid.defl=your_ssid
//% wifi_password.shadow="string" wifi_password.defl=your_password
export function wifiConnect(parameter: any) {
let _wifi_ssid = parameter.wifi_ssid.code;
let _wifi_password = parameter.wifi_password.code;
Generator.addInclude('EMW3080', '#include <EMW3080.h>');
Generator.addCode(`while(1) {\n\t\tif (!WiFi_init(${_wifi_ssid}, ${_wifi_password}))continue;\n\t\tbreak;\n\t}`);
}
//% block="连接到阿里云MQTT [ProductKey] [DeviceName] [password]" blockType="command"
//% ProductKey.shadow="string" ProductKey.defl=your_ProductKey
//% DeviceName.shadow="string" DeviceName.defl=your_DeviceName
//% password.shadow="string" password.defl=your_password
export function AliyunConnect(parameter: any) {
let _ProductKey = parameter.ProductKey.code;
let _DeviceName = parameter.DeviceName.code;
let _password = parameter.password.code;
Generator.addInclude('EMW3080', '#include <EMW3080.h>');
Generator.addCode(`while(1) {\n\t\tif (!Ali_connect(${_ProductKey}, ${_DeviceName}, ${_password}))continue;\n\t\tbreak;\n\t}`);
}
//% block="使用主题 [pubTopic] 发布 [JSON_DATA_PACK]" blockType="command"
//% pubTopic.shadow="string" pubTopic.defl=your_pubtopic
//% JSON_DATA_PACK.shadow="string" JSON_DATA_PACK.defl=your_message
export function Set_pubTopic(parameter: any) {
let _pubTopic = parameter.pubTopic.code;
let _JSON_DATA = parameter.JSON_DATA_PACK.code;
Generator.addInclude('EMW3080', '#include <EMW3080.h>');
Generator.addCode(`Upload(${_pubTopic}, ${_JSON_DATA});`);
}
}
完成后在 Mind+ 上就可以看到完成后的积木块(外形只是简单做一下,还没有进行修饰)
- 第一个积木的参数是 Wi-Fi 的 SSID 和 Password
- 第二个积木的参数是ProductKey、DeviceName和password,password是使用阿里云签名工具 hmacsha1 计算得出的密钥
- 第三个积木的参数是发布消息相应的 主题Topic 和 MQTT消息
2、示例代码
3、效果测试
后续会继续更新相关代码,
总结
以上就是Mind+制作第三方库的一些过程,本文仅仅简单介绍了部分积木块的制作和使用。如有写的不好的地方,欢迎大家提点宝贵的建议。