制作Mind+ Arduino UNO + EMW3080芯片连接阿里云的用户库

5 篇文章 3 订阅
3 篇文章 0 订阅


前言

注:本文系湛江市第十七中学星火创客团队及岭南师范学院物联网俱乐部原创部分参赛项目,转载请保留声明。

要做 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 UNO1
EMW30801
杜邦线若干

2、软件准备

软件
Mind+
VS Code(记事本、Notepad++也可)

二、实验过程

1、下载样例库

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-FiSSIDPassword
  • 第二个积木的参数是ProductKeyDeviceNamepasswordpassword是使用阿里云签名工具 hmacsha1 计算得出的密钥
  • 第三个积木的参数是发布消息相应的 主题TopicMQTT消息

2、示例代码

在这里插入图片描述

3、效果测试

在这里插入图片描述

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

后续会继续更新相关代码,


总结

以上就是Mind+制作第三方库的一些过程,本文仅仅简单介绍了部分积木块的制作和使用。如有写的不好的地方,欢迎大家提点宝贵的建议。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simply myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值