您的位置:首页 > 其它

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

2017-02-27 00:16 567 查看
需要如下配件

1、ESP8266模组



2、灯带



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



4、12V电源



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







最后组装完成









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

LOCAL void ICACHE_FLASH_ATTR
run_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_ATTR
user_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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: