mind+自定义arduino库,实现简易RFID智能家居系统

Posted Mpara

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mind+自定义arduino库,实现简易RFID智能家居系统相关的知识,希望对你有一定的参考价值。


前言(完整用户库下载链接在文章末尾)

Mind+是一款拥有自主知识产权的国产青少年编程软件,支持Arduino、micro:bit、掌控板等各种开源硬件,兼容Scratch3.0,支持AI与IoT功能,只需要拖动图形化程序块即可完成编程,还可以使用Python/C/C++等高级编程语言,支持几十种常用的扩展小模块库。
但官方一直更新没有RFID-RC522的库,搜索其他用户库也没有找到,所以决定自己动手写一个RFID-RC522的第三方库,方便使用。
本文的RC522第三方库可实现串口打印标签,设置标签,控制其他传感器等功能。


提示:以下步骤均参考官方文档,地址:https://mindplus.dfrobot.com.cn/ext-api

一、用户库文件结构

这里下载用户库样例模板:https://gitee.com/dfrobot/ext-oled12864.git
以下为笔者修改的用户库文件结构

└─RC522                   // 项目名称
    │  config.json                 // 本用户库的配置文件
    │  LICENSE.TXT                 // 许可证说明
    │  README.md                   // 文档说明
    │
    └─arduinoC                     // arduino模式用户库根目录
        │  main.ts                 // 图形块描述文件
        │
        ├─libraries                // arduino库文件,列出本扩展库所有需要引用的.c或.h或.cpp文件
        │  └─MFRC522
        │          MFRC522.cpp
        │          MFRC522.h
        │          
        │
        ├─_images                  // 图片文件
        │      featured.png        // MindPlus扩展库展示图片
        │      icon.svg            // MindPlus中图形块上的图标文件
        │
        ├─_locales                 // 翻译文件,支持多国语言
        │      zh-cn.json
        │      
        │
        └─_menus                   // 下拉菜单参数,每个板子可以独立设置
                
                uno.json
                

二、配置config.json文件

{
  "name": {
    "zh-cn": "RFID-RC522读卡器",
    "en": "RFID-RC522"
  },
  "description": {
    "zh-cn": "RFID-RC522",
    "en": "RFID-RC522"
  },
  "author": "",
  "email": "",
  "license": "MIT",
  "isBoard": false,
  "id": "rfidrc522",
  "version": "0.0.2",
  "platform": [
    "win",
    "mac",
    "web"
  ],
  "asset": {
    "arduinoC": {
      "dir": "arduinoC/",
      "version": "0.0.2",
      "board": [
        
        "arduino"
      ],
      "main": "main.ts"
    }
  }
}

关于config.json文件的详细说明:

name: 名称。模块显示在扩展库中的标题名称。
description: 描述。模块显示在扩展库中的描述。
author: 作者名。请使用英文字母表示。
email: 邮箱。当版本更新需要修改用户库或用户反馈,将通过邮件通知开发者(预留功能)
license: 许可证类型。参考链接
isBoard: 主控。当前扩展是否为主控(预留功能,统一为false)
id: 模块区分号。同一作者的不同模块需要设置不同的id,建议使用英文和数字符号命名。
platform: 支持平台。有三个选项:“win”, “mac”, “web”,分别表示Mind的windows桌面版,mac桌面版,网页版,当前仅支持win。
asset: 各模式配置。当前仅支持上传模式的arduino C模式。
dir: 指定模式路径。/不能遗漏,例如:“dir”: “arduinoC/”,不建议修改。
version: 版本信息。三个数字,从小到大,例如:“0.0.1”,建议每次发布都增加一位小数,依次从小到大增加(版本控制功能预留)。
board: 指定支持的主控,主控对应字段见下文“主控列表”。请确认测试通过后添加对应支持主控。若当前主控板不支持或模式不支持,则用户库右上角会显示“不可用”
main: block描述文件的文件名。需要是ts后缀文件,名称自定义,需要在对应路径下,例如:main.ts。

三、编写main.ts文件

main.ts描述文件总述:

图形块描述文件中通过//%后面的内容可以定义图形块外观(blcok)
通过function定义block对应的生成代码以及位置

文件内容结构:

enum xxxx {
   //% 引脚描述内容定义,需要翻译的菜单项需要定义到menu文件中
   //% 引脚生成代码定义
}


//% color="#xxxx"   整个扩展block的外观定义,通过 //% 后的描述内容定义
namespace xxxx {  

    //% block="xxx [xxx]" blockType="xxx" 第一个block的外观定义描述内容  
    //% block其他描述内容 
    export function xxxx(parameter: any, block: any) {  //单个block的生成代码定义,通过函数描述生成代码的位置及内容
        //生成的代码位置及内容描述
    }

    //% block="xxx [xxx]" blockType="xxx" 第二个block的外观定义描述内容 
    //% block其他描述内容 
    export function xxxx(parameter: any, block: any) {
       //生成的代码位置及内容描述
    }

    //% block="xxx [xxx]" blockType="xxx" 第N个block的外观定义描述内容
    //% block其他描述内容 
    export function xxxx(parameter: any, block: any) {
       //生成的代码位置及内容描述
    }

}

以一个block的定义为例:

//% block="RC522模块初始化,设置SDA引脚[SS]" blockType="command"
    //% SS.shadow="dropdown" SS.options="LINE" SS.defl="LINE.10"
    export function RC522(parameter: any, block: any) {
        let ss_pin = parameter.SS.code;
        Generator.addInclude("MFRC522_1","#include <SPI.h>");
        Generator.addInclude("MFRC522_2","#include <MFRC522.h>");
        Generator.addObject("MFRC522_3","MFRC522",`rfid(${ss_pin},9);`);
        Generator.addObject("MFRC522_5","byte",`nuidPICC[4];`);
      
        Generator.addSetup("MFRC522_6",`SPI.begin(); `);
        Generator.addSetup("MFRC522_7",`rfid.PCD_Init(); `);
    }

blockType,设置block形状
XXX.shadow 设置输入框类型
parameter 是shadow传入参数
Generator.addInclude(id, code, cover)
( id: 标识符,code: 代码,cover: 是否覆盖具有相同id的代码, 默认值为False)
Generator.addObject(id, type, code, cover) 在全局区添加对象
Generator.addSetup(id, code, cover) 在setup中添加代码
Generator.addCode(code) 在setup或者loop中添加代码,没有返回值的代码添加(一般为方形,帽子形)
更多具体命令请查看官方文档

生成的block为:
在这里插入图片描述

设计用户库:

在这里我们需要设计我们的用户库实现的功能
1 初始化RC522模块,实例化SS与RST引脚
2 寻找RFID卡
3 读取RFID标签号码在串口打印(十进制)
4 设置预设的RFID标签号码
5 比较预设的RFID标签号码与读取的RFID标签号码,实现控制等功能

在这里插入图片描述

四、编辑资源文件夹

_images

此文件夹可放置图片类的资源文件。

featured.png 扩展库界面图片,名称不可修改,600*372分辨率的png图片。
icon.svg block上显示的图标文件,名称不可修改,svg格式矢量图,内容尽量精简,推荐白色icon。
建议使用inkscape或AI等软件制作,也可从阿里巴巴矢量图标库iconfont等现成的图标库下载。
在这里插入图片描述
在这里插入图片描述

_locales

根据文件名对应不同的语言,若没有对应语言的翻译文件则以main.ts中block描述代码中的内容直接显示。
在此不需要修改。

_menus

此文件夹中放置各种不同板子对应的下拉菜单内容。
此用户库目前只支持arduino,不需要修改。

-libraries

此文件夹中放置此用户库所需要用到的arduino库文件
以下为RC522用户库中的libraries内容:

├─libraries
│  └─MFRC522
│          MFRC522.cpp
│          MFRC522.h

五、制作简易RFID智能家居,查看效果

首先在mind+中导入用户库
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
编辑程序:
在这里插入图片描述

笔者已经预先读好了RFID的标签号码,并且设置相同的号码,为了验证控制效果。读取号码效果如下,每读一组换行是为了方便使用者设置标签号码。家居部分使用简易的LED灯。
在这里插入图片描述

接线:
Arduino Uno ----- RFID-RC522
     10 ------------ SDA
     13 -------------SCK
     11 ------------ MOSI
     12 ------------ MISO

     GND ----------- GND
     5V ------------- RST
     3.3V ---------- 3.3V
Arduino Uno ----- LED
	GND ----------- -
    6 ------------- +

————————————————

平常状态:
在这里插入图片描述
读卡亮灯:
在这里插入图片描述
用户库下载地址:
https://download.csdn.net/download/weixin_44337303/18594602

以上是关于mind+自定义arduino库,实现简易RFID智能家居系统的主要内容,如果未能解决你的问题,请参考以下文章

mind+自定义arduino库,实现简易RFID智能家居系统

mind+自定义arduino库,实现简易RFID智能家居系统

Mind+实现添加用户自定义库

Mind+实现添加用户自定义库

Mind+实现添加用户自定义库

Mind+实现添加用户自定义库