Arduino_MIoT接入文档

1 背景介绍

  • 小米开发板旨在帮助您了解小米IoT开发者平台的开发模式,帮助您更快地进入产品开发阶段

2 硬件框架

开发板由一块Arduino开发板通过串口和一块嵌入了小米智能模组的配对板组成。开发前请将两块电路板通过插针连接起来

Arduino_MIoT接入文档 - 图1

Arduino MIoT Broad 功能
USB线连接 供电、烧写代码
pin1/pin0/GND UA1_RXD/UA1_TXD/GND MCU MIIO模块串口通讯
pin4 DHT11 数字采集温湿度
pin9/pin10/pin11 RGB LED 控制RGB灯
pin7 Button 采集按键事件,上报云端

3 烧写运行

拿到开发板后,您需要向Arduino开发板烧写程序,具体操作如下

  • 下载固件程序

  • 下载Arduino软件并安装

  • 导入Arduino DHT11库文件导入

  • 将配对板右上角的拨码开关拨至左侧PROG,通过USB线连接Arduino板和电脑

  • 打开miio_tc_demo.ino,编译后写入开发板。请注意在“工具”中选择正确的开发板类型(Arduino Uno)和正确的串口(可在电脑资源管理中看到对应串口,如没有驱动选装CP2102驱动)

  • 将配对板右上角的拨码开关拨回右侧,回到普通工作状态,从电脑拔除开发板完成烧写。可参考(https://www.arduino.cn/thread-76154-1-1.html)

4 设备配网

使用WiFi进行工作的智能设备,需要连接上路由器、并和用户账号建立绑定关系后才能工作。您可以通过小米开发板来体验这个过程

  • 请首先使用手机下载 米家App

  • 打开米家App,并使用您的开发者账号进行登录

  • 打开米家App,点击右上角的“加号”,并按照提示连接小米开发板

  • 在完成小米开发板的快速连接后,您的设备列表中会出现一个新的设备,您就可以通过手机对开发板做一些简单操作了。

5 MIOT-SPEC设备功能定义

小米IoT有标准的设备功能描述方式,主要有以下几个主要概念组成

概念 解释
属性(Property) 功能单元之一,单一的功能操作可以定义为属性,属性支持被查询、控制和订阅,如灯的开关
方法(Action) 功能单元之一,主要用于向设备下发组合控制指令,该功能即可以定义为方法,方法可支持同时下发多个属性(参数),如电饭煲的开始煮饭
事件(Event) 功能单元之一,主要用于设备向云端上报组合数据,该功能即可以定义为事件,事件可支持同时上报多个属性(参数),如门锁被打开
服务(Service) 服务代表了一类互相有联系的功能单元的合集,如环境检测服务、电池管理服务,服务中包括属性、方法、事件,可以描述该服务中包括的具体功能
设备(Device) 即产品本身,设备由多个服务聚合而成,如支持充电的风扇会有风扇服务、电池管理服务、环境检测服务等

miot.light.demo1设备功能定义:

Arduino_MIoT接入文档 - 图2

在小米开发者平台可编辑产品功能,实现不同的功能,具体可参考创建产品

6 代码理解

当您在开发过程中还未开发手机控制插件时,可以通过开放平台进行云端调试:

打开小米智能硬件平台,在“开发平台>开发板管理”中,找到您绑定的开发板,并点击“调试”进入云端调试页面

以下siid表示功能定义中的Service id,piid表示功能定义中的Property id,aiid 表示功能定义中的action id,eiid 表示功能定义中的event id,命令格式可参考通用模组miot-spec支持资料

Arduino_MIoT接入文档 - 图3

下行消息基本流程如下

整个过程为:Cloud->小米模组->Arduino->RGB灯

  • 云端向小米模组下发命令来设置RGB为蓝色,其中value赋值遵循rgb(RGB24)格式:0x00 ff(red) ff(green) ff(blue),所以255等效于0x00 00 00 ff即蓝色
  1. {"from":"","id":xxx,"method":"set_properties","params":[{"did":"xxx","piid":4,"siid":2,"value":255}]}
  • 小米模组将云端发来的包含method的json串解析为文本命令,供Arduino通过串口获取

  • Arduino 对小米模组通过串口每隔200ms发送文本命令,来获取转化后的云端命令

  1. get_down
  • Arduino 获取到从小米模组通过串口发来的rgb文本命令

  • Arduino执行命令,将RGB蓝灯点亮

  1. set_rgb(255)
上行消息基本流程如下

整个过程为:门铃button->Arduino->小米模组->Cloud

  • 门铃button被按下时触发Arduino响应门铃事件

  • Arduino将获取到的门铃事件,通过串口文本形式通知小米模组

  1. event_occured 4 1 1 "button_pressed"
  • 小米模组将反应门铃事件的字符串”button_pressed”以及该事件的siid、eiid、piid封装进上报云端的json包中,上报云端
  1. {"id":xxx,"method":"event_occured","params":{"did":"xxx","siid":4,"eiid":1,"arguments":[{"piid":1,"value":"button_pressed"}]},"retry":0,"timestamp":1574761781,"tick":22763290}

7 硬件连线与开发拓展

这里提供了Arduino与外设及小米智能模组的连接方式,您可以研读Arduino程序并对程序进行修改

  • 连接Arduino与PC:使用USB线连接(用来供电、烧写代码)

  • 连接Arduino与MIIO芯片:Arduino的UART(pin 1 ,pin 0 ,pin GND)->MIIO 的UART1(UA1_RXD, UA1_TXD,GND)

  • 连接Arduino与DHT11 :Arduino的5V ,pin 4,GND->DHT11的V,D,G

  • 连接Arduino与RGB LEDS: Arduino的pin 9,pin 10,pin 11,GND->RGB LEDS的R,G,B,V-

  • 连接Arduino与Button:pin7—>button,给予高电平表示按下

  • 当您希望对开发板的硬件进行更多拓展时,可以使用飞线连接小米模组和Arduino开发板,同时将GPIO空出以接入其他外部设备。连接方法如下图所示:

Arduino_MIoT接入文档 - 图4

Arduino扩展学习可参考:https://www.arduino.cn/thread-1066-1-1.html