需要如下配件
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));}
新闻热点
疑难解答