惯导型扫地机MCU开发说明
1 前期准备
1.1 注册账号
在涂鸦IOT平台,注册开发者账号,开启产品智能化工作,为了使用运营相关功能,请开通企业版权限。 IOT平台链接:https://iot.tuya.com。
1.2 产品定义
1、在涂鸦IOT平台创建产品,选择【小家电】-【扫地机器人】,点击“创建产品”即可开始创建产品。
2、可根据产品功能,基于公版定义的DP库,自由选择DP或编辑DP内容。
3、产品定义后,选择适配的云模组,并在IOT平台采购样片。
4、完成相关定义后,IOT平台会根据产品定义和云模组型号,生成相应的数据协议,请下载并保存。
详细操作请参考:
2 硬件对接
在硬件开发时,结合MCU主控电路情况,将云模组接入主控电路,实现模组与主控的物理连接,具体过程由开发者自行完成。
3 通讯协议
惯导型扫地机设备端与云端及APP的数据交互分为两部分协议,一是产品功能协议(DP协议),二是地图数据协议。
产品功能协议,在产品定义时生成,涵盖各产品功能点的上报和下发方式。(见1.2节)
数据传输协议,用于定义清扫地图的显示方式、地图数据点格式。
3.1 功能DP
以惯导型扫地机通用版产品DP定义为例,其产品DP定义如下:
根据功能DP的特点,可以将其分为控制类、状态类、传输类三种类型:
控制类DP:主要实现APP和机器间的控制交互,数据类型通常布尔型、枚举型,如清扫开关、清扫模式;
状态类DP:主要实现机器端状态型数据上报,数据类型通常是数值型、字符型,如清扫时间、剩余电量;
传输类DP:主要实现APP和机器间的通讯交互,数据类型通常是字符型、RAW型,如清扫记录、地图参数;
3.3 地图传输
地图数据协议主要包括地图参数配置、地图数据包的格式,具体格式如下:
1、地图参数配置
机器初始化时,机器向云端上报地图配置参数,用于告知APP,当前地图的长宽、以及坐标原点的位置。
地图参数格式:
// 地图配置参数定义
typedef struct
{
uint8_t origin; // 地图原点位置,0-左上角 1-左下角
uint8_t width; // 地图宽度,最大255
uint8_t hight; // 地图高度,最大255
}ST_CONFIG;
2、地图数据包格式
机器启动清扫时,机器向云端上报地图数据包,APP在收到地图数据后,更新当前地图,呈现完整的清扫地图画面。
地图数据格式:
// 地图坐标点定义
typedef struct
{
uint8_t x;
uint8_t y;
uint8_t type;
} ST_POT;
// 坐标点类型定义
enum enum_point_type
{
point_type_current = 0x00, // 当前点
point_type_barrier = 0x01, // 障碍点
point_type_cleaned = 0x02, // 已清扫点
point_type_charge = 0x03, // 充电桩
};
3.4 相关附件
2、参考公版产品标准通讯协议的3.23扫地机地图数据服务(可选) 章节
4 MCU开发
4.1 开发方式
机器主控与云模组通过串口通信方式进行通讯,MCU端交互部分的开发有两种方式:
串口指令:MCU与模组通过指令码方式进行交互。优点:代码量少,不占用MCU资源。
接口移植:MCU调用模组的接口函数进行交互。优点:接口丰富,开发方便。
详细说明请参考:
4.2 通用功能
1、配网
【配网功能及指示灯函数完善】 https://docs.tuya.com/zh/iot/device-development/access-mode/mcu-solution-wifi/wifi-general-solution/sdk-transplant
2、OTA
【确认 MCU 是否需要支固件升级】 https://docs.tuya.com/zh/iot/device-development/access-mode/mcu-solution-wifi/wifi-general-solution/sdk-transplant
4.3 关键交互
1、DP数据交互
1)机器启动时,上报初始值到云端;
2)手动启动机器时,上报相应的控制开关、状态数值到云端;
3)清扫开关、清扫模式等控制类DP,机器在接收到APP的指令并成功执行后,上报原始值到云端;
2、地图配置上报
/*****************************************************************
* @Function: app_panel_init
* @Description: 配置涂鸦智能APP面板显示的地图尺寸和原点位置
* @Param: origin, 地图原点位置,0-左上角 1-左下角
* @Param: map_size, 目前最大支持显示255*255个坐标点
* @Return: void
*****************************************************************/
void app_panel_init(unsigned char origin,unsigned short map_size)
{
unsigned char buffer[3] = {0};
buffer[0] = origin;
buffer[1] = map_size >> 8;
buffer[2] = map_size & 0xFF;
mcu_dp_raw_update(DPID_MAP_CONFIG,buffer,sizeof(buffer)); //RAW型数据上报;
}
3、地图数据上报
/*****************************************************************
* @Function: mcu_map_data_report
* @Description: 地图数据上报
* @Param: id, 地图id号,用于标识一次完整的清扫过程
* @Param: buffer, 地图坐标点数组
* @Param: point_num, 坐标点数量
* @Return: void
*****************************************************************/
unsigned char mcu_map_data_report(MAP_ID_S id, ST_POT *buffer, unsigned short point_num)
{
static unsigned int map_offset = 0;
static MAP_ID_S last_id = 0;
unsigned short this_len = 0;
if(stop_update_flag == ENABLE)
return SUCCESS;
if(last_id != id){ // 开始新的清扫,map_id更新
map_offset = 0;
}
this_len = sizeof(ST_POT) * point_num;
stream_trans(id, map_offset, (unsigned char *)buffer, this_len);
map_offset += this_len;
last_id = id;
return SUCCESS;
}
4.4 参考源码
【GitHub】 https://github.com/LinusZhao/tuya_gyro_robot_demo/tree/master/mcu_sdk
5 工程调试
1、功能调试
机器MCU程序开发完成后,用APP对机器进行配网,在APP上对扫地机进行相关操作,验证指令收发,APP显示、机器执行等是否正确。
2、单点调试
当MCU采用在模块化并行开发时,可以借助调试面板功能,单独调试某个DP的逻辑是否正确。(对于定制型项目,在APP定制完成前,也可以采用调试面板进行辅助开发)
3、日志查询 IOT平台提供日志查询功能,可以查看扫地机MCU与APP间的数据通讯情况,适用于异常情况下,排查各端的操作情况。
6 其他
1、OTA后台配置 对于支持MCU固件升级的厂家,可以在此上传MCU固件,进行远程固件升级。上传固件后,先进行固件的测试验证,通过后,才可对外发布固件,确保不影响用户使用。
2、三方语音开通 扫地机可以接收Alexa等三方语音的指令,音箱下发的指令码,与DP定义的指令一致,常用的控制功能有开启清扫、结束清扫、回充、寻找机器等。不同音箱支持的指令稍有差异。
三方语音开通请参考:https://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/gyro_voice_open.html