首页 > 学院 > 开发设计 > 正文

DIY个人智能家庭网关——硬件篇之WIFI灯带DIY

2019-11-06 09:25:12
字体:
来源:转载
供稿:网友

需要如下配件

1、ESP8266模组

2、灯带

3、MOS管驱动板,用于驱动点亮灯带

4、12V电源

5、其他线材、外壳等配件

最后组装完成

ESP8266部分代码如下,除了实现亮和灭的基本控制外,还可以调节灯光亮度,设置渐亮、渐暗、呼吸灯或者闪烁等模式

LOCAL void ICACHE_Flash_ATTRrun_mode(void){	//os_PRintf("run mode !!!/n");	static uint8 flag = 0;	int time = 10+g_speed*5;	//disarm timer first	os_timer_disarm(&test_timer);	switch(g_mode){		case NORMAL_MODE:		{			break;		}		case STEP_LIGHT_MODE:		{			g_duty += 1;			if(g_duty > g_max_duty)			{				g_duty = g_max_duty;				g_mode = NORMAL_MODE;			}			break;		}		case STEP_DARK_MODE:		{			g_duty -= 1;			if(g_duty <= g_min_duty)			{				g_duty = g_min_duty;				g_mode = NORMAL_MODE;			}			break;		}		case STEP_LIGHT_DARK_REPEAT_MODE:		{			if(flag == 0)			{				g_duty += 1;				if(g_duty >= g_max_duty)				{					flag = 1;					time = 1000;				}			}			else			{				g_duty -= 1;				if(g_duty <= g_min_duty)				{					g_duty = g_min_duty;					flag = 0;					time = 500;				}			}			break;		}		case FLASH_MODE:		{			if(flag == 0)			{				g_duty = 0;				flag = 1;			}			else			{				g_duty = g_max_duty;				flag = 0;			}			break;		}		default:		{			g_mode = NORMAL_MODE;			break;		}	}	//os_printf("mode:%d g_duty:%d/n", g_mode, g_duty);	set_pwm_duty(g_duty);	if(g_mode != NORMAL_MODE)	{		//re-arm timer		os_timer_setfn(&test_timer, (os_timer_func_t *)run_mode, NULL);		os_timer_arm(&test_timer, time, 0);	}}LOCAL void ICACHE_FLASH_ATTRuser_udp_recv_cb(void *arg, char *pusrdata, unsigned short length){	char hwaddr[6];	char mac[40] = {0};	char buff[128];	int index = 0;	char result[10] = "succeed";	char params_buff[64];	char params_list[10][16] = {0};	int params_count = 0;	//uint32 duty = 0;	wifi_get_macaddr(STATION_IF, hwaddr);	os_sprintf(mac, MACSTR , MAC2STR(hwaddr));	//os_printf("mac:%s/n",mac);	os_printf("recv udp data: %s/n", pusrdata);	if(get_string(pusrdata,"id", buff)!=0)	{		return;	}	//os_printf("id:%s/n", buff);	if(os_strncmp(buff, mac,os_strlen(mac)) != 0)	{		os_printf("%s is not my id %s/n", buff,mac);		return;	}	if(get_string(pusrdata,"cmd", buff)!=0)	{		return;	}	if(get_array(pusrdata,"params", params_buff)==0)	{		os_printf("params:%s/n", params_buff);		params_count = parse_params_buff(params_buff, params_list);	}	if(os_strncmp(buff, "get_state") == 0)	{		os_printf("get_state/n");		os_sprintf(buff,get_state_json,mac,result,led_on?"on":"off");	}	else if(os_strncmp(buff, "set_state") == 0)	{		os_printf("set_state/n");		if(os_strncmp("on", params_list[0],2) == 0)		{			set_pwm_duty(g_duty);			os_sprintf(buff,set_state_json,mac,result,"on");			os_printf("on/n");		}		else if(os_strncmp("off", params_list[0],3) == 0)		{			set_pwm_duty(0);			os_sprintf(buff,set_state_json,mac,result,"off");			os_printf("off/n");		}		g_mode = NORMAL_MODE;		os_timer_disarm(&test_timer);	}	else if(os_strncmp(buff, "set_duty") == 0)	{		os_printf("set_duty/n");		g_duty = atoi(params_list[0]);		set_pwm_duty(g_duty);		os_sprintf(buff,set_duty_json,mac,result, g_duty);		g_mode = NORMAL_MODE;		os_timer_disarm(&test_timer);	}	else if(os_strncmp(buff, "get_duty") == 0)	{		os_printf("get_duty/n");		os_sprintf(buff,get_duty_json,mac,result,g_duty);	}	else if(os_strncmp(buff, "set_max_duty") == 0)	{		os_printf("set_max_duty/n");		g_max_duty = atoi(params_list[0]);		os_sprintf(buff,set_max_duty_json,mac,result,g_max_duty);	}	else if(os_strncmp(buff, "set_mode") == 0)	{		os_printf("set_mode/n");		uint8 mode, speed;		mode = atoi(params_list[0]);		if(mode == NORMAL_MODE)		{			// stop timer			os_timer_disarm(&test_timer);		}		else		{			speed = atoi(params_list[1]);			if( mode != g_mode || speed != g_speed)			{				g_speed = speed;				switch(mode)				{				case STEP_LIGHT_MODE:				{					g_max_duty = speed = atoi(params_list[2]);					break;				}				case STEP_DARK_MODE:				{					g_min_duty = speed = atoi(params_list[2]);					break;				}				case STEP_LIGHT_DARK_REPEAT_MODE:				{					g_max_duty = speed = atoi(params_list[2]);					g_min_duty = speed = atoi(params_list[3]);					break;				}				default:					break;				}				os_timer_disarm(&test_timer);				os_timer_setfn(&test_timer, (os_timer_func_t *)run_mode, NULL);				os_timer_arm(&test_timer, 10+g_speed*5, 0);			}		}		g_mode = mode;		os_sprintf(buff,set_mode_json,mac,result,g_mode);	}	os_printf("send udp data:%s/n", buff);	espconn_sent(&user_udp_espconn, buff, os_strlen(buff));}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表