MCU SDK运用

MCU SDK使用说明

1.简介

凭据《涂鸦串口通信和谈》、产物功用数据点主动天生的MCU顺序。MCU工程师可在此基础上停止快速开辟。

2.怎样获得

翻开开发者背景网址 https://iot.tuya.com/

如已竖立完产物,正在“调试流程”处 点击下载MCU SDK

若是您没有贵公司的账号,请取贵司相干指导联络

3.文件构造

文件包孕:

实行文件 头文件 阐明
mcu_api.c mcu_api.h 内含WiFi相干函数,客户可按需挪用
protocol.c protocol.h 客户凭据项目需求,需修正这个2个文件,内含数据处理函数
system.c system.h 串口通信和谈的详细实现,能够不做相识
wifi.h

4.设置

4.1 修正产品信息(需要)

翻开protocol.h 正在开发者背景找到“产物Key” ,请确保代码取网站所列二者同等,该PID为每一个产物的独一标识,必需搜检清晰是不是为您所对应的产物ID,若是不是,修正为准确的ID;或从新下载最新SDK开辟包,从新停止代码移植

#define PRODUCT_KEY "ZKtkyqNRJH7h3eL1"

澳门赌博金沙网站

4.2 MCU是不是需求支固件晋级(可选)

如需求支撑MCU固件晋级,请开启该宏

#define         SUPPORT_MCU_FIRM_UPDATE

WARNING!!! ​ 当前吸收缓冲区为封闭固件更新功用的巨细,固件晋级包为256字节

如需求开启该功用,串口吸收缓冲区会变大 ​

4.3 界说收发缓存(可选)

翻开protocol.h ,修正缓冲区巨细:仅当传输数据长度稀奇少时需求修正,一般情况运用默认值便可

#ifndef SUPPORT_MCU_FIRM_UPDATE
#define WIFI_UART_QUEUE_LMT             16              //数据吸收行列巨细,如MCU的RAM不敷,可缩小
#define WIFI_UART_RECV_BUF_LMT          24              //凭据用户DP数据大小量定,必需大于24
#else
#define WIFI_UART_QUEUE_LMT             128             //数据吸收行列巨细,如MCU的RAM不敷,可缩小
#define WIFI_UART_RECV_BUF_LMT          300             //固件晋级缓冲区,需大缓存,必需大于260
#endif

4.4 设置WIFI模块重置体式格局(需要)

翻开protocol.h

1.若是wifi指示灯和按键是接正在wifi模块上的(模块自处置惩罚事情形式),那么请开启

#ifdef          WIFI_CONTROL_SELF_MODE

然后凭据现实的硬件衔接,将指示灯和按键所衔接的GPIO足位填入上面两止

#ifdef          WIFI_CONTROL_SELF_MODE
	#define     WF_STATE_KEY            14                //wifi模块状况指导按键,请凭据现实GPIO管脚设置
	#define     WF_RESERT_KEY           0                 //wifi模块重置按键,请凭据现实GPIO管脚设置
#endif

2.若是灯和按键接正在MCU上(模块和MCU合营处置惩罚事情形式),请连结 define 被正文状况

//#ifdef          WIFI_CONTROL_SELF_MODE

4.5 MCU是不是需求支撑校时功用(可选)

如需求支撑校时功用,请开启该宏 #define SUPPORT_MCU_RTC_CHECK //开启校时功用

并正在Protocol.c文件内mcu_write_rtctime实现代码

mcu_write_rtctime内部有#err提醒,完成函数后请删除该#err

mcu正在wifi模块准确联网后可挪用mcu_get_system_time()函数提议校时功用

5.移植须知

  1. MCU必需正在while中间接挪用mcu_api.c 内的wifi_uart_service()函数

  2. 顺序一般初始化完成后,发起不停止闭串口中止,如必需闭中止,闭中止工夫必需短,闭中止会引发串口数据包丧失

  3. 请勿正在中止/定时器中止内挪用上报函数

6.启动WIFI效劳

  1. 正在需求运用到wifi相干文件的文件中include "wifi.h"文件

  2. 正在MCU初始化挪用mcu_api.c文件中的wifi_protocol_init()函数

  3. 将串口单字节发送函数填入protocol.c文件中uart_transmit_output函数内,并删除#error

  4. 正在串口吸收函数内里挪用mcu_api.c文件内的uart_receive_input函数,并将吸收到的字符作为参数传入

  5. 单片机进入while轮回后挪用mcu_api.c文件内的wifi_uart_service()函数

比方,正在main.c中增加以下代码构造:

include "wifi.h"
...
void main(void)
{
	wifi_protocol_init();
	...
	while(1)
	{
		wifi_uart_service();
		...
	}
}

7.功用阐明

7.1 功用点界说

正在protocol.c文件中,确认下发构造体download_cmd内dpID及dp范例,如:

此为主动天生代码,如正在开辟平台有相干修正请从新下载MCU_SDK

#define DPID_SWITCH                     1                       //可读/可写
#define DPID_TEMPER_SET                 2                       //可读/可写

const DOWNLOAD_CMD_S download_cmd[] = 
{
  {DPID_SWITCH,                 DP_TYPE_BOOL},
  {DPID_TEMPER_SET,             DP_TYPE_VALUE},
};

7.2 MCU串口数据吸收处置惩罚函数

正在protocol.c文件dp_download_switch_1_handle()函数(凭据dp点主动天生)内填入dp对应处置惩罚函数

static unsigned char dp_download_switch_1_handle(const unsigned char value[], unsigned short length)
{
	//示例:当前DP范例为BOOL
	unsigned char ret;
	//0:闭/1:开
	unsigned char switch_1;

	switch_1 = mcu_get_dp_download_bool(value,length);
	if(switch_1 == 0)
	{
		//开关闭
	}
	else
	{
		//开关开
	}

	//处置惩罚完DP数据后应有反应
	ret = mcu_dp_bool_update(DPID_SWITCH_1,switch_1);
	if(ret == SUCCESS)
		return SUCCESS;
	else
		return ERROR;
	}

上述函数剖析功用点以后,映射到相干实行函数,完成详细行动。本例为吸收到开关数据,完成开关行动后挪用mcu_dp_bool_update(DPID_SWITCH_1,switch_1);上传功用点(开关)状况,此吸收处置惩罚函数曾经主动挪用改函数;当装备状况正在非APP掌握下发作转变,MCU中需求挪用mcu_dp_bool_update(DPID_SWITCH_1,switch_1);上传功用点(开关)状况及时状况(7.4 单个数据上报中详解)

7.3 数据吸收调试

  1. 运用涂鸦串口调试助手,完成“7.2设置考证”后,点击“增加下令”,可实现同时发送多条下令
  2. 点击下令下发
  3. 上一页增加的函数将会收到适才下发的数据

金沙娱乐城

7.4 单个数据上报

  1. 正在mcu状况发作转变时,用户需求自动上报。
  2. 若是倒计时存在,那么需求每分钟上报倒计时剩余时间

上报花样为 mcu_dp_xxxx_updata(DPID_X,n),DPID_X取7.1功用点界说同等。
比方:

  mcu_dp_bool_update(DPID_SWITCH,1);                        //BOOL型数据上报
  mcu_dp_value_update(DPID_TEMPER_SET,25);                  //VALUE型数据上报
  mcu_dp_string_update(DPID_DAY,"1234",4);                  //STRING型数据上报
  mcu_dp_raw_update(DPID_SWITCH,1);                        //RAW型数据上报
  mcu_dp_bitmap_update(DPID_TEMPER_SET,25);                //毛病型数据上报
  mcu_dp_enum_update(DPID_DAY,"1234",4);                   //罗列型数据上报

  //示例
  //可读可写型
  mcu_dp_bool_update(DPID_SWITCH,/*请填入转变的数据*1);       //BOOL型数据上报
  mcu_dp_value_update(DPID_TEMPER_SET,	  25);      //VALUE型数据上报
  mcu_dp_string_update(DPID_DAY,"1234",4);         //STRING型数据上报
  mcu_dp_bool_update(DPID_LOOK,0);
  mcu_dp_value_update(DPID_APPOINT,38);
  mcu_dp_string_update(DPID_WEEK,"456",3);

  //只读
  update_temper_handle();
  update_error_handle();

7.5 一切数据上报

​ 正在模块重启大概从新配网后,WiFi模块自动下发状况查询指令,此时需求MCU上报装备一切及时状况给WiFi模块停止同步

  1. 翻开protocol.c 找到函数all_data_update(void)
  2. 把一切需求上报的数据点正在这个函数中枚举出
  3. wifi_sdk会正在特定时候(如开机)挪用这个函数,以获得各个功用当前状况

用户请勿挪用all_data_update(void)函数,该函数会正在特定工夫自动挪用

void all_data_update(void)
{
  //请自行完成一切dp点数据上报
  /*
  mcu_dp_bool_update(DPID_SWITCH,1);                        //BOOL型数据上报
  mcu_dp_value_update(DPID_TEMPER_SET,25);                  //VALUE型数据上报
  mcu_dp_string_update(DPID_DAY,"1234",4);                  //STRING型数据上报
  mcu_dp_raw_update(DPID_SWITCH,1);                        //RAW型数据上报
  mcu_dp_bitmap_update(DPID_TEMPER_SET,25);                //毛病型数据上报
  mcu_dp_enum_update(DPID_DAY,"1234",4);                   //罗列型数据上报
  */
  //示例
  //可读可写型
  mcu_dp_bool_update(DPID_SWITCH,/*请填入转变的数据*/1);                        //BOOL型数据上报
  mcu_dp_value_update(DPID_TEMPER_SET,25);                                      //VALUE型数据上报
  mcu_dp_string_update(DPID_DAY,"1234",4);                                      //STRING型数据上报
  mcu_dp_bool_update(DPID_LOOK,0);
  mcu_dp_value_update(DPID_APPOINT,38);
  mcu_dp_string_update(DPID_WEEK,"456",3);

  //只读
  update_temper_handle();
  update_error_handle();
}

7.6 重置WIFI

当wifi模块要衔接新的路由器时,需求重置WIFI,挪用下述函数:

mcu_reset_wifi();	

并可挪用mcu_get_reset_wifi_flag()函数返回复位wifi效果;

或挪用设置wifi形式mcu_api.c 文件内的:

mcu_set_wifi_mode(WIFI_CONFIG_E mode);

并可挪用mcu_get_wifi_work_state()函数返回设置wifi效果.

71245.com

7.7 重置WIFI–获得状况

阐明:

  1. WIFI事情状况:1 smartconfig设置状况 2 AP设置状况 3 WIFI设置胜利但未连上路由器 4 WIFI设置胜利且连上路由器。 “模块自处置惩罚”事情形式响应的LED显现离别为:1 距离闪灼250ms;2 距离闪灼1500ms;3 少暗状况;4 少明状况
  2. 当模块检测到MCU重启或MCU断线再上线的历程,则自动上报WIFI状况至MCU
  3. 当模块检测到WIFI状况发作转变,则自动上报WIFI状况至MCU
  4. 如设置模块事情形式为“模块自处置惩罚”,则MCU无需实现该和谈

挪用函数mcu_get_wifi_work_state()获得衔接状况,一般使用方法以下:

void main(void)
{	
	...	

	while(1)
	{
		switch(mcu_get_wifi_work_state())
		{
			case SMART_CONFIG_STATE:
			//smart config 设置状况 LED快闪 ,led闪灼请用户完成
			break;
			case AP_STATE:
			//AP设置状况 LED缓闪
			break;
			case WIFI_CONNECTING:
			//WIFI设置完成,正在衔接路由器,LED常暗
			break;
			case WIFI_CONNECTING:
			//路由器衔接胜利 LED常亮
			break;
			default:break;
		}	
		...	

	}	
}

7.8 MCU在线晋级

1.翻开protocol.h,开启宏界说,设置MCU版本号

#define         SUPPORT_MCU_FIRM_UPDATE                 //开启MCU固件晋级功用(默许封闭)
#define MCU_VER "1.0.0"                                 //用户的软件版本,用于MCU固件晋级,MCU晋级版本需修正

若是数据包较大请凭据现实需求调解缓冲区巨细:

WIFI_UART_RECV_BUF_LMT          300            //固件晋级缓冲区,需大缓存,必需大于260

响应的晋级函数为protocol.c中:

/*****************************************************************************
函数称号 : mcu_firm_update_handle
功用形貌 : MCU进入固件晋级形式
输入参数 : value:固件缓冲区
           position:当前数据包在于固件位置
           length:当前固件包长度(固件包长度为0时,示意固件包发送完成)
返回参数 : 无
使用说明 : MCU需求自行实现该功用
*****************************************************************************/
unsigned char mcu_firm_update_handle(const unsigned char value[],unsigned short position,unsigned short length)
{
  #error "请自行完成MCU固件晋级代码,完成后请删除该行"
  if(length == 0)
  {
    //固件数据发送完成
    
  }
  else
  {
    //固件数据处理
  }
  
  return SUCCESS;
}

MCU可挪用mcu_api.c 文件内的mcu_firm_update_query()函数获得当前MCU固件更新状况

注:晋级历程由手机提议,调试时可运用涂鸦串口调试助手点击晋级启动

7.9 获得在线工夫

1.MCU需求获得网络工夫,翻开protocol.h开启上面的define

#define         SUPPORT_MCU_RTC_CHECK                //开启校时功用

2.挪用mcu_get_system_time(void)启动获得流程

3.获得到的工夫会被送到protocol.c中的函数 mcu_write_rtctime(),请自行完成获得工夫后存入MCU的操纵

void mcu_write_rtctime(unsigned char time[])
{
	#error "请自行完成RTC时钟写入代码,并删除该行"
	/*
	time[0]为是不是获得工夫胜利标记,为 0 示意失利,为 1示意胜利
	time[1] 为 年 份 , 0x00 表 示2000 年
	time[2]为月份,从 1 最先到12 完毕
 	time[3]为日期,从 1 最先到31 完毕
	time[4]为时钟,从 0 最先到23 完毕
	time[5]为分钟,从 0 最先到59 完毕
	time[6]为秒钟,从 0 最先到59 完毕
	time[7]为礼拜,从 1 最先到 7 完毕,1代表星期一
	*/
	if(time[0] == 1)
	{
		//准确吸收到wifi模块返回的当地时钟数据 

	}
	else
	{
		//获得当地时钟数据失足,有可能是当前wifi模块已联网
	}
}

7.10 产测

1.MCU需求支撑wifi功用测试,翻开protocol.h开启上面的define

#define         WIFI_TEST_ENABLE                //开启WIFI产测功用

2.MCU正在需求wifi功用测试处挪用mcu_api.c文件内 ​ mcu_start_wifitest()

3.正在protocol.c文件wifi_test_result函数内检察测试效果, ​ void wifi_test_result(unsigned char result,unsigned char rssi) { #error “请自行实现wifi功用测试胜利/失利代码,完成后请删除该行” if(result == 0) { //测试失利 if(rssi == 0x00) { //已扫描到称号为tuya_mdev_test路由器,请搜检 } else if(rssi == 0x01) { //模块已受权 } } else { //测试胜利 //rssi为旌旗灯号强度(0-100, 0旌旗灯号最差,100旌旗灯号最强) } }

8.设置考证

运用WiFi模拟器停止MCU顺序调试取考证,具体阐明 WiFi模拟器使用说明 (WiFi模拟器别名涂鸦串口调试助手)

8.1考证

  1. 衔接单片机的串口和电脑的串口

  2. 开发者背景下载 和 功用点调试文件(config.json)

  3. 翻开涂鸦串口调试助手.exe

  4. 设定串口号后点击“翻开串口”金沙娱乐官网 3777.com

  5. 点击阅读,翻开刚下载的config.json

  6. 点击”开启心跳检测”

8.2考证胜利

串口设置一般的返回数据 恭喜! MCU SDK移植胜利

8.3毛病剖析

串口设置非常的返回数据

缘由可能会有如下几种状况:

  • 电路板未上电
  • 串口号选错
  • 串口tx,rx 接反
  • 代码设置毛病,请搜检代码
  • 硬件设置毛病,搜检时钟是不是准,波特率是不是为9600

如上述几项均没法解决问题,可取我司联络 ​

400-881-8611