一、准备工作
ESP-01s
和 ESP-01s配套的继电器模块
天猫精灵
二、ESP8266开发环境搭建(ubuntu)
http://aiclouds3.0-docs.aithinker.com/#/2.device/configuration_linux
根据官网的文档搭建开发环境
注意:1.SDK需要使用 带子模块递归方式拉取,不然编译时会报错
git clone --recursive https://gitee.com/xuhongv/AiThinkerProjectForESP.git
2.编译工具要和sdk的版本匹配,不然编译时会报错
sdk3.4对应的编译工具是最新的8.4
sdk https://github.com/espressif/ESP8266_RTOS_SDK
编译工具https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
三、申请点灯科技帐号
https://www.diandeng.tech/home
1.下载app,在app上注册帐号。
2.根据官方文档在app上新建设备,保存好设备的秘钥
https://www.diandeng.tech/doc/app
2.下载点灯科技的blinker freeRTOS支持库
https://github.com/blinker-iot/blinker-esp-idf
四、工程配置
将AiThinkerProjectForESP 拷贝一份,将里面的blinker freeRTOS支持库里面的examples\Blinker_Hello\Hello_WiFi拷贝到AiThinkerProjectForESP工程根目录下。
2.根据文档将blinker freeRTOS支持库整合到esp项目中。
整合完成后在Hello_WiFi目录下运行make menuconfig 配置sdk,在菜单主页中可以看到blinker配置选项, 选中blinker进入并配置相关参数
如下图所示配置blinker,AUth Key 填入app创建的设备中的秘钥
配置配网方式
配置完成后保存并且退出blinker,然后进入components配置页面
enable mDNS
disable Newlib
enable webSocket server support(http_server)
打开mDNS,webSocket server support(http_server) 取消Newlib
设置完成后保存并退出即可开始编译测试 了
五、编程
打开Hello_WiFi\main\blinker_example_main.c文件
1.初始化io口
void init_gpio(){
gpio_config_t io_conf;
//禁止中断
io_conf.intr_type = GPIO_INTR_DISABLE;
//设置为输出模式
io_conf.mode = GPIO_MODE_OUTPUT;
//管脚的位
io_conf.pin_bit_mask = (1ULL << GPIO_NUM_13);
//开始配置管脚
gpio_config(&io_conf);
gpio_set_level( GPIO_NUM_13, 1 );
}
此处需要修改esp-01s的电路
esp-01s只有gpio0和gpio2引出来了,而gpio0是Boot 模式的配置引脚,esp8266的
Boot 模式由 strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:
7[1,1,1]SDIO HighSpeed V2 IO
6[1,1,0]SDIO LowSpeed V1 IO
5[1,0,1]SDIO HighSpeed V1 IO
4[1,0,0]SDIO LowSpeed V2 IO
3[0,1,1]Flash Boot
2[0,1,0]Jump Boot
1[0,0,1]UART Boot
0[0,0,0]Remapping
与esp-01s配套的继电器驱动板是用gpio0控制的,而esp-01s下载程序的时候gpio0需要接GND,gpio2是控制led灯的。所以我们要飞线,将esp-01s的一个io口引出来用于控制继电器,我这里使用的是gpio13,也就是芯片的12脚。
开关机功能本质上就是一个无锁开关,电脑开关上两根线接通几十毫秒就开机了,关机功能需要在windows 电源选项里面将这里设置为关机。关机状态下继电器接通几十毫秒就开机了,开机状态下继电器接通几十毫秒就关机了。
加入天猫精灵回调函数
void aligenie_callback(const blinker_va_param_cb_t *val){
if(val==NULL){
ESP_LOGE(TAG, "blinker_va_param_cb_t is NULL");
return;
}
cJSON *ali_param = cJSON_CreateObject();
switch(val->type){
case BLINKER_PARAM_POWER_STATE:
ESP_LOGI(TAG, "BLINKER_PARAM_POWER_STATE: %s",val->s);
if((strcmp(BLINKER_CMD_ON, val->s) == 0)){//打开命令
gpio_set_level( GPIO_NUM_13, 0 );//闭合继电器,低电平有效
vTaskDelay(500 / portTICK_PERIOD_MS);//延时500ms
gpio_set_level( GPIO_NUM_13 , 1 );//断开继电器
}else{//关闭命令
gpio_set_level( GPIO_NUM_13 , 0 );//闭合继电器,低电平有效
vTaskDelay(1000 / portTICK_PERIOD_MS);//延时1s
gpio_set_level( GPIO_NUM_13 , 1 );//断开继电器
}
blinker_aligenie_power_state(ali_param,val->s);
break;
case BLINKER_PARAM_COLOR:break;
case BLINKER_PARAM_MODE:break;
case BLINKER_PARAM_COLOR_TEMP:break;
case BLINKER_PARAM_COLOR_TEMP_UP:break;
case BLINKER_PARAM_COLOR_TEMP_DOWN:break;
case BLINKER_PARAM_BRIGHTNESS:break;
case BLINKER_PARAM_BRIGHTNESS_UP:break;
case BLINKER_PARAM_BRIGHTNESS_DOWN:break;
case BLINKER_PARAM_TEMP:break;
case BLINKER_PARAM_TEMP_UP:break;
case BLINKER_PARAM_TEMP_DOWN:break;
case BLINKER_PARAM_HUMI:break;
case BLINKER_PARAM_LEVEL:break;
case BLINKER_PARAM_LEVEL_UP:break;
case BLINKER_PARAM_LEVEL_DOWN:break;
case BLINKER_PARAM_HSWING:break;
case BLINKER_PARAM_VSWING:break;
case BLINKER_PARAM_MODE_STATE:break;
case BLINKER_PARAM_GET_STATE:break;
default:break;
}
cJSON_Delete(ali_param);
}
在spp_main 函数中初始化gpio,注册天猫精灵回调函数
void app_main()
{
blinker_init();
init_gpio();//初始化gpio
blinker_widget_add(BUTTON_1, BLINKER_BUTTON, button1_callback);
//
blinker_aligenie_handler_register(aligenie_callback);//注册天猫精灵回调函数
blinker_data_handler(data_callback);
}
完成之后开始编译烧写
make all
make flash
六、接线
一般来说电脑关机之后usb5v是正常工作的,所以找一个usb的电源接上这个继电器驱动模块
电脑的开机线接到如图所示的地方。
七、blinker绑定天猫精灵
在天猫精灵app里面搜索blinker然后绑定点灯科技的账号,成功后点灯科技app里面的设备就同步到天猫精灵了,然后就可以用语音通过天猫精灵控制电脑开关机了