基于涂鸦智能的宠物喂食器

基于涂鸦智能的宠物喂食器

基于涂鸦智能的宠物喂食器

本次作品以涂鸦智能的VWXR2 wifi通信板为桥梁,以32为核心进行开发
本文章允许涂鸦智能转载使用。

项目地址

GitHub:https://github.com/PolarLights-Snow/predator

作品视频

bilibili:https://b23.tv/Zo8x93

硬件介绍

主控板:STM32F103C8T6最小系统板
联网模组:涂鸦三明治语音 Wi-Fi 通信板(VWXR2)
IOT云平台:涂鸦IOT平台
执行单元:LED模拟代表

系统框架

基于涂鸦智能的宠物喂食器

程序编写

1. 产品创建

参考涂鸦官方教程:五分钟快速入门

2. MCU SDK 移植

参考涂鸦官方教程:MCU SDK 移植

3.按键选择程序

本模块主要用来判断设备上的按键控制

void key_xz()
{
	if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==1)					//WiFi配网
		{
			printf("WIFI  RST");
			HAL_Delay(300);
			if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==1)
			{
				mcu_reset_wifi();			//WIFI配网复位,ap   和  自动   切换
				while(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin)==1);
			}
		}
		if (HAL_GPIO_ReadPin(YY_JY_GPIO_Port, YY_JY_Pin)==1)			//
		{
			printf("YY_JY  \r\n");
			HAL_Delay(9);
			if (HAL_GPIO_ReadPin(YY_JY_GPIO_Port, YY_JY_Pin)==1)
			{
				mcu_get_system_time();


				while(HAL_GPIO_ReadPin(YY_JY_GPIO_Port, YY_JY_Pin)==1);
			}
		}
		if (HAL_GPIO_ReadPin(YY_DN_GPIO_Port, YY_DN_Pin)==1)			//声音减小
		{
			printf("YY_DN");
			HAL_Delay(9);
			if (HAL_GPIO_ReadPin(YY_DN_GPIO_Port, YY_DN_Pin)==1)
			{
				if(YY_YL>0)	YY_YL--;
				set_speaker_voice(YY_YL);					//设置语音-
				while(HAL_GPIO_ReadPin(YY_DN_GPIO_Port, YY_DN_Pin)==1);
			}
		}
		if (HAL_GPIO_ReadPin(YY_UP_GPIO_Port, YY_UP_Pin)==1)			//声音增大
		{
			printf("YY_UP");
			HAL_Delay(9);
			if (HAL_GPIO_ReadPin(YY_UP_GPIO_Port, YY_UP_Pin)==1)
			{
				if(YY_YL<10)	YY_YL++;
				set_speaker_voice(YY_YL);					//设置语音+
				while(HAL_GPIO_ReadPin(YY_UP_GPIO_Port, YY_UP_Pin)==1);
			}
		}
		if (HAL_GPIO_ReadPin(WS_GPIO_Port, WS_Pin)==1)						//快速喂食
		{
			printf("WS_K");
			HAL_Delay(9);
			if (HAL_GPIO_ReadPin(WS_GPIO_Port, WS_Pin)==1)
			{
					
				mcu_dp_enum_update(DPID_FEED_STATE,1); //当前喂食状态  枚举型数据上报;		0:准备     1:喂食			2:完成
					HAL_GPIO_WritePin(DJ_GPIO_Port,DJ_Pin,1);
					HAL_Delay(300);
					HAL_GPIO_WritePin(DJ_GPIO_Port,DJ_Pin,0);
					mcu_dp_value_update(DPID_MANUAL_FEED,1);
				while(HAL_GPIO_ReadPin(WS_GPIO_Port, WS_Pin)==1);
			}
			mcu_dp_enum_update(DPID_FEED_STATE,2); //当前喂食状态  枚举型数据上报;		0:准备     1:喂食			2:完成
		}

}

4.WiFi状态指示灯

void get_wifi_status(unsigned char result)
{

    switch(result) {
        case 0:
            //wifi工作状态1
				HAL_GPIO_TogglePin(LED_wifi_GPIO_Port, LED_wifi_Pin);
				HAL_Delay(100);
        break;
    
        case 1:
            //wifi工作状态2
				HAL_GPIO_TogglePin(LED_wifi_GPIO_Port, LED_wifi_Pin);
				HAL_Delay(1000);
        break;
        
        case 2:
            //wifi工作状态3
        break;
        
        case 3:
            //wifi工作状态4
        break;
        
        case 4:
            //wifi工作状态5
				HAL_GPIO_WritePin(LED_wifi_GPIO_Port, LED_wifi_Pin, GPIO_PIN_RESET);
        break;
        
        case 5:
            //wifi工作状态6
        break;
      
        case 6:
            //wifi工作状态7
				HAL_GPIO_TogglePin(LED_wifi_GPIO_Port, LED_wifi_Pin);
        break;
        
        default:break;
    }
}

5.云端数据下发处理函数

本函数主要用来处理用户通过涂鸦云平台下发的指令

/**
 * @brief  dp下发处理函数
 * @param[in] {dpid} dpid 序号
 * @param[in] {value} dp数据缓冲区地址
 * @param[in] {length} dp数据长度
 * @return dp处理结果
 * -           0(ERROR): 失败
 * -           1(SUCCESS): 成功
 * @note   该函数用户不能修改
 */
unsigned char dp_download_handle(unsigned char dpid,const unsigned char value[], unsigned short length)
{
    /*********************************
    当前函数处理可下发/可上报数据调用                    
    具体函数内需要实现下发数据处理
    完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
    ***********************************/
    unsigned char ret;
    switch(dpid) {
        case DPID_MEAL_PLAN:
            //喂食计划处理函数
            ret = dp_download_meal_plan_handle(value,length);		//
        break;
        case DPID_QUICK_FEED:
            //自动喂食开关处理函数
            ret = dp_download_quick_feed_handle(value,length);
        break;
        case DPID_MANUAL_FEED:
            //手动喂食处理函数
            ret = dp_download_manual_feed_handle(value,length);
        break;
        case DPID_FACTORY_RESET:
            //恢复出厂处理函数
            ret = dp_download_factory_reset_handle(value,length);
        break;
        case DPID_VOICE_TIMES:
            //语音播放次数处理函数
            ret = dp_download_voice_times_handle(value,length);
        break;
        case DPID_SWITCH:
            //开关处理函数
            ret = dp_download_switch_handle(value,length);
        break;

        
        default:
        break;
    }
    return ret;
}

6.手动喂食指令处理函数

/*****************************************************************************
函数名称 : dp_download_manual_feed_handle
功能描述 : 针对DPID_MANUAL_FEED的处理函数
输入参数 : value:数据源数据
        : length:数据长度
返回参数 : 成功返回:SUCCESS/失败返回:ERROR
使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
*****************************************************************************/
static unsigned char dp_download_manual_feed_handle(const unsigned char value[], unsigned short length)
{
    //示例:当前DP类型为VALUE
    unsigned char ret;
    unsigned long manual_feed;
    
    manual_feed = mcu_get_dp_download_value(value,length);
    /*
    //VALUE类型数据处理
    */
				for(int i=0;i< manual_feed;i++)
				{
					mcu_dp_enum_update(DPID_FEED_STATE,1); //当前喂食状态  枚举型数据上报;		0:准备     1:喂食			2:完成
					HAL_GPIO_WritePin(DJ_GPIO_Port,DJ_Pin,1);
					HAL_Delay(300);
					HAL_GPIO_WritePin(DJ_GPIO_Port,DJ_Pin,0);
					HAL_Delay(300);
				}
				mcu_dp_enum_update(DPID_FEED_STATE,2); //当前喂食状态  枚举型数据上报;		0:准备     1:喂食			2:完成
    
    //处理完DP数据后应有反馈
    ret = mcu_dp_value_update(DPID_MANUAL_FEED,manual_feed);
    if(ret == SUCCESS)
        return SUCCESS;
    else
        return ERROR;
}

7.语音方案的配置

配置方法参考涂鸦教程:语音方案配置教程
作品语音方案展示:
基于涂鸦智能的宠物喂食器

资料下载

基于涂鸦智能的宠物喂食器

上一篇:学习视频笔记-SHELL脚本编程基础-if/else


下一篇:机器学习笔记(十七)——非线性单层感知器