DIY个人智能家庭网关——硬件篇之WIFI灯带DIY
2017-02-27 00:16
567 查看
需要如下配件
1、ESP8266模组
2、灯带
3、MOS管驱动板,用于驱动点亮灯带
4、12V电源
5、其他线材、外壳等配件
最后组装完成
ESP8266部分代码如下,除了实现亮和灭的基本控制外,还可以调节灯光亮度,设置渐亮、渐暗、呼吸灯或者闪烁等模式
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)); }
相关文章推荐
- DIY个人智能家庭网关——python篇之门磁触发后自动点亮WIFI灯带
- DIY个人智能家庭网关——硬件篇之433M无线接收解码器(一)
- DIY个人智能家庭网关—— python篇之获取手机WIFI连接(上线/下线)状态
- DIY个人智能家庭网关——硬件篇之433M无线接收解码器(二)
- DIY个人智能家庭网关——python篇之推送消息到手机
- DIY个人智能家庭网关——python篇之推送门磁报警信息到手机
- DIY个人智能家庭网关—— 前言
- DIY个人智能家庭网关——手机篇之客户端设计
- DIY个人智能家庭网关—— 路由器篇之配置DDNS
- DIY个人智能家庭网关——python篇之推送手机上下线事件
- DIY个人智能家庭网关—— python篇之获取路由器外网地址
- DIY个人智能家庭网关—— 路由器篇之刷机
- DIY个人智能家庭网关—— 路由器篇之安装python
- DIY个人智能家庭网关—— 路由器篇之申请公网IP
- DIY个人智能家庭网关——python篇之读取USB串口,获取门磁报警信息
- DIY个人智能家庭网关—— 手机篇之Jpush推送平台
- 浅谈智慧家庭小优机器人通过WIFI+SSDP方式接入华为智能网关
- 认证智能网关wifi 接口配置,VTache 和微信公众平台接口配置
- 极客DIY:开源WiFi智能手表制作
- Android获取WIFI网关地址与子网掩码地址