【无聊的改造】esp-01s舵机控制开关灯支持小爱同学-Arduino中文社区 - Powered by Discuz! Archiver

无聊的改造 发表于 2022-4-5 01:47

【无聊的改造】esp-01s舵机控制开关灯支持小爱同学

无聊的改造 esp-01s舵机控制开关灯支持小爱同学

用到的模块有
esp-01s/sg90舵机/esp-01s配套的烧写器

http://v.youku.com/v_show/id_XNTg1ODE4MTYyNA==.html?x&sharefrom=iphone&sharekey=76cbdc36a6d73c6279ae660e346825313


#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Servo.h>
#include <Blinker.h>


char auth[] = "a5146fd5a283";   // blinker app 中那个密匙key
char ssid[] = "wldgz";          //wifi名称(英文名称 2.4gwifi)
char pswd[] = "wldgz5566";      //wifi密码



// 创建开关
BlinkerButton Button1("btn_k");    //舵机的开
BlinkerButton Button2("btn_g");    //舵机的关


//创建舵机
Servo myservo;//定义(创建)一个舵机名称为myservo





//创建6个滑块
BlinkerSlider Slider1("ran_max1");   //滑块1 控制第一个舵机最大角度
BlinkerSlider Slider2("ran_min1");   //滑块2 控制第一个舵机最小角度
BlinkerSlider Slider3("ran_mid1");   //滑块3 控制第一个舵机中间角度




//定义3个变量
int ran_max1, ran_min1, ran_mid1;

//创建一个Bool类型的变量
bool on_or_off = false;
bool oState = false;

// app 端按下按键即会执行该函数 回调函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);//读取按键状态

myservo.write(ran_max1);//写入滑块1 的角度   这个角度大小可以通过滑块1 来设置
Blinker.vibrate();       //使手机震动
Blinker.delay(1000);    //这个delay 一定要有 不然舵机转不过来
myservo.write(ran_mid1);//1s后恢复到滑块3设置的角度,
Blinker.vibrate();//使手机震动

}
void button2_callback(const String & state) {
BLINKER_LOG("get button state: ", state);//这个和上面的一样
myservo.write(ran_min1);
Blinker.vibrate();
Blinker.delay(1000);
myservo.write(ran_mid1);
Blinker.vibrate();
}


//小爱电源回调函数
//里面同样设置舵机的动作
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
    // digitalWrite(LED_BUILTIN, HIGH);
    myservo.write(ran_max1);//写入滑块1 的角度   这个角度大小可以通过滑块1 来设置
    Blinker.delay(1000);    //这个delay 一定要有 不然舵机转不过来
    myservo.write(ran_mid1);//1s后恢复到滑块3设置的角度,
    BlinkerMIOT.powerState("on");
    BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF) {
    //digitalWrite(LED_BUILTIN, LOW);
    myservo.write(ran_min1);
    Blinker.delay(1000);
    myservo.write(ran_mid1);
    BlinkerMIOT.powerState("off");
    BlinkerMIOT.print();
}
}



void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);

switch (queryCode)
{
    case BLINKER_CMD_QUERY_ALL_NUMBER :
      BLINKER_LOG("MIOT Query All");
      BlinkerMIOT.powerState(oState ? "on" : "off");
      BlinkerMIOT.print();
      break;
    case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
      BLINKER_LOG("MIOT Query Power State");
      BlinkerMIOT.powerState(oState ? "on" : "off");
      BlinkerMIOT.print();
      break;
    default :
      BlinkerMIOT.powerState(oState ? "on" : "off");
      BlinkerMIOT.print();
      break;
}
}

void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);

Blinker.vibrate();

uint32_t BlinkerTime = millis();
Blinker.print(BlinkerTime);
Blinker.print("millis", BlinkerTime);
}



//滑块设置
void slider1_callback(int32_t value)   //最大角度滑动条
{
ran_max1 = value;
myservo.write(ran_max1);
Blinker.vibrate();//使手机震动
Blinker.delay(1000);
BLINKER_LOG("get slider value: ", value);
}


void slider2_callback(int32_t value)//最小角度滑动条
{
ran_min1 = value;
myservo.write(ran_min1);
Blinker.vibrate();//使手机震动
Blinker.delay(1000);
BLINKER_LOG("get slider value: ", value);
}


void slider3_callback(int32_t value)   //中间角度滑动条
{
ran_mid1 = value;
myservo.write(ran_mid1);
Blinker.vibrate();//使手机震动
Blinker.delay(1000);
BLINKER_LOG("get slider value: ", value);
}



// 初始化串口,并开启调试信息
void setup() {


Serial.begin(115200);



// 初始化有LED的IO

pinMode(LED_BUILTIN, OUTPUT);//LED_BUILTIN 开发版上的led 不需要灯亮可以删掉

digitalWrite(LED_BUILTIN, HIGH);

// 初始化blinker

Blinker.begin(auth, ssid, pswd);

Button1.attach(button1_callback); //绑定按键执行回调函数
Button2.attach(button2_callback); //绑定按键执行回调函数


Slider1.attach(slider1_callback);
Slider2.attach(slider2_callback);
Slider3.attach(slider3_callback);

myservo.attach(0); //定义舵机连接的引脚


BlinkerMIOT.attachQuery(miotQuery);   //小爱同学回调函数
Blinker.attachData(dataRead);
BlinkerMIOT.attachPowerState(miotPowerState);

}





void loop() {

Blinker.run();//*每次运行都会将设备收到的数据进行一次解析。

}



//blink app 界面配置代码复制到app里面即可
//{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨tex¨¨t0¨¨blinker入门示例¨¨t1¨¨文本2¨¨bg¨Ë¨ico¨´´¨cols¨Í¨rows¨Ê¨key¨¨tex-272¨´x´É´y´É¨speech¨|÷¨lstyle¨Ê¨clr¨¨#FFF¨}{ßC¨btn¨ßJ¨fal fa-power-off¨¨mode¨ÉßE¨关灯¨ßGßHßIÉßKËßLËßM¨btn_g¨´x´Î´y´ÏßPÉ}{ßCßSßJßTßUÉßE¨开灯¨ßGßHßIÉßKËßLËßM¨btn_k¨´x´Ê´y´ÏßPÉ}{ßC¨ran¨ßE¨最大角度¨ßQ¨#389BEE¨¨max¨¢2u¨min¨ÉßIÉßKÑßLËßM¨ran_max1¨´x´É´y´¤DßPÉ}{ßCßZßE¨最小角度¨ßQßbßcº0ßdÉßIÉßKÑßLËßM¨ran_min1¨´x´É´y´ÒßPÉ}{ßCßZßE¨中间角度¨ßQßbßcº0ßdÉßIÉßKÑßLËßM¨ran_mid1¨´x´É´y´¤BßPÉ}{ßC¨deb¨ßUÉßIÉßKÑßLÌßM¨debug¨´x´É´y´Ì}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßn¨source_zh¨¨开关状态¨¨state¨|ßpßr÷¨state_zh¨|¨打开¨´关闭´÷}÷´rt´|÷}


沈乘风 发表于 2022-4-7 21:02

666楼主这个代码刚好帮了大忙

许普查 发表于 2022-4-12 14:48

刚好我也需要,谢谢楼主

wuyong5 发表于 2022-5-4 10:39

:):):):):):):):):):):):):)

顽皮Q孩 发表于 2022-5-12 19:12

esp-01s

顽皮Q孩 发表于 2022-5-12 19:12

esp-01s

顽皮Q孩 发表于 2022-5-13 12:53

esp-01s

949890036 发表于 2022-5-18 15:15

楼主的教程实操一遍过。楼主能出一个8266双开并联现有开关同时使用的教程吗

hmsabc 发表于 2022-6-11 12:16

烧录程序上传成功,但在点灯.blinker里,设备却上不了线,找不到原因,怎么办?

hmsabc 发表于 2022-6-11 15:12

hmsabc 发表于 2022-6-11 12:16
烧录程序上传成功,但在点灯.blinker里,设备却上不了线,找不到原因,怎么办? ...

找到原因了,用同样的程序写入另一esp8266模块,成功了,说明原先的那块坏了。真害人!新手真得注意。
页: [1] 2
查看完整版本: 【无聊的改造】esp-01s舵机控制开关灯支持小爱同学