8266单路插座+本地开关+wifimanager配网
初学者,不对的地方望给与更正,目前使用该代码可本地开关,无网络连接时可手机网页配网,代码不是很完整,但使用上没有问题,关联天猫精灵、小度、小爱,新手可以直接拿去用;一定要提前安装blinker库和wifimanager库,需要的可到该网址下载中文版:https://github.com/taichi-maker/WiFiManager,界面如下:好了,话不多说,直接上代码:
#define BLINKER_WIFI //接入方式:wifi
#define BLINKER_MIOT_OUTLET //接入小爱插座库
#define BLINKER_DUEROS_OUTLET //接入小度插座库
#define BLINKER_ALIGENIE_OUTLET //接入天猫插座库
#define BLINKER_PRINT Serial //串口协议库
#include <WiFiManager.h> //wifimanager库
#include <Blinker.h> //官方库
char auth[] = "-------"; //设备key号
int relay=2;//继电器io2
int key=0;//本地轻触开关,io0与gnd接时动作
int counter = 0;
//使用web配置网络
WiFiManager wifiManager;
char devname[] = "ESP8266-01"; //定义WIFI名称和主机名
void WebConfig() {
Serial.println("Entered config mode...");
// 自动连接WiFi,参数是连接ESP8266时的WiFi名称
wifiManager.setConfigPortalTimeout(60);//设置连接超时时间60s
wifiManager.autoConnect(devname);
WiFi.hostname(devname);//设置主机名
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println("");
Serial.print("ESP8266 Connected to ");
Serial.println(WiFi.SSID()); // WiFi名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
}
//*******新建组件对象
BlinkerButton Button1("btn-abc"); //设置app按键的键名
//*******app上按下按键即会执行该函数app里按键有2种模式3钟不同样式,下面写出所有的开关状态。
void button1_callback(const String & state) //用state来存储组键的值按键 : "tap"(点按); "pre"(长按); "pup"(释放)开关 : "on"(打开); "off"(关闭)
{
BLINKER_LOG("app操作了!: ", state); //串口打印
if (digitalRead(relay)==LOW) { //如果state是on状态
BLINKER_LOG("灭灯!"); //串口打印
digitalWrite(relay, HIGH);
Button1.color("gray"); //设置app按键是灰色
Button1.text("插座已关闭");
Button1.print("off"); //反馈回按键状态是开
}
else if (digitalRead(relay)==HIGH) { //如果state是off状态
BLINKER_LOG("亮灯!"); //串口打印
digitalWrite(relay,LOW);
Button1.color("red"); //设置app按键是红色
Button1.text("插座已打开");
Button1.print("on"); //反馈回按键状态是关
}
}
//*******如果小爱有对设备进行操作就执行下面
void miotPowerState(const String & state)
{
BLINKER_LOG("小爱语音操作!"); //串口打印
if (state == BLINKER_CMD_ON){
digitalWrite(relay,LOW);
BlinkerMIOT.powerState("on");
BLINKER_LOG("亮灯!");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF){
digitalWrite(relay,HIGH);
BlinkerMIOT.powerState("off");
BLINKER_LOG("灭灯!");
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(relay ? "on" : "off");
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(relay ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(relay ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
//*******如果小度有对设备进行操作就执行下面
void duerPowerState(const String & state)
{
BLINKER_LOG("小度语音操作!"); //串口打印
if (state == BLINKER_CMD_ON){
digitalWrite(relay,LOW);
BlinkerDuerOS.powerState("on");
BLINKER_LOG("亮灯!");
BlinkerDuerOS.print();
}
else if (state == BLINKER_CMD_OFF){
digitalWrite(relay,HIGH);
BlinkerDuerOS.powerState("off");
BLINKER_LOG("灭灯!");
BlinkerDuerOS.print();
}
}
void duerQuery(int32_t queryCode) //小度设备查询的回调函数
{
BLINKER_LOG("DuerOS Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("DuerOS Query All");
BlinkerDuerOS.powerState(relay ? "on" : "off");
BlinkerDuerOS.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("DuerOS Query Power State");
BlinkerDuerOS.powerState(relay ? "on" : "off");
BlinkerDuerOS.print();
break;
default :
BlinkerDuerOS.powerState(relay ? "on" : "off");
BlinkerDuerOS.print();
break;
}
}
//*******如果天猫精灵有对设备进行操作就执行下面
void aligeniePowerState(const String & state)
{
BLINKER_LOG("天猫精灵语音操作!"); //串口打印
if (state == BLINKER_CMD_ON){
digitalWrite(relay,LOW);
BlinkerAliGenie.powerState("on");
BLINKER_LOG("亮灯!");
BlinkerAliGenie.print();
}
else if (state == BLINKER_CMD_OFF){
digitalWrite(relay,HIGH);
BlinkerAliGenie.powerState("off");
BLINKER_LOG("灭灯!");
BlinkerAliGenie.print();
}
}
void aligenieQuery(int32_t queryCode) //天猫设备查询的回调函数
{
BLINKER_LOG("AliGenie Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(relay ? "on" : "off");
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(relay ? "on" : "off");
BlinkerAliGenie.print();
default :
BlinkerAliGenie.powerState(relay ? "on" : "off");
BlinkerAliGenie.print();
break;
}
}
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
//*******app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态
void heartbeat()
{
BLINKER_LOG("状态同步!");
if (digitalRead(relay)==LOW)
{
Button1.print("on");
Button1.color("red"); //设置app按键是红色
Button1.text("继电器打开");
}
else
{
Button1.print("off");
Button1.color("gray"); //设置app按键是灰色
Button1.text("继电器关闭");
}
}
///如果本地开关有动作执行下面手动模式
void sdms()
{
if (digitalRead(relay)==HIGH&&digitalRead(key)==LOW)
{
Blinker.delay(400);//延时400ms,最少需150ms
if (digitalRead(key)==HIGH)
{
BLINKER_LOG("本地开关动作!");
BLINKER_LOG("亮灯!"); //串口打印
digitalWrite(relay,LOW);
Button1.color("red"); //设置app按键是红色
Button1.text("继电器打开");
Button1.print("on");
}
}
if (digitalRead(relay)==LOW&&digitalRead(key)==LOW)
{
Blinker.delay(400);
if (digitalRead(key)==HIGH)
{
BLINKER_LOG("本地开关动作!");
BLINKER_LOG("灭灯!"); //串口打印
digitalWrite(relay, HIGH);
Button1.color("gray"); //设置app按键是灰色
Button1.text("继电器关闭");
Button1.print("off");
}
}
}
void setup()
{
// 初始化串口
Serial.begin(115200);
delay(10);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
// 初始化有LED的IO
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH); //默认上电关LOW 时接通继电器。
pinMode(key,INPUT_PULLUP); //输入上拉
// 初始化blinker
WebConfig();//配置网络
Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str()); //初始化blinker
Button1.attach(button1_callback); //app按键回调
Blinker.attachData(dataRead);//状态回调
Blinker.attachHeartbeat(heartbeat); //app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。
BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数
BlinkerDuerOS.attachPowerState(duerPowerState); //小度语音操作注册函数
BlinkerAliGenie.attachPowerState(aligeniePowerState); //天猫语音操作注册函数
BlinkerMIOT.attachQuery(miotQuery);//小爱设备查询的回调函数
BlinkerDuerOS.attachQuery(duerQuery);//小度设备查询的回调函数
BlinkerAliGenie.attachQuery(aligenieQuery);//天猫设备查询的回调函数
}
void loop() {
Blinker.run();
sdms();//本地开关扫描
}
楼主很实用啊,学习中 谢谢分享,学习中 能不能把库文件直接放出来!里面看不懂不会下载 修改手机设置界面在strings_en.h里面。 搬砖工 发表于 2021-9-13 02:03
能不能把库文件直接放出来!里面看不懂不会下载
上面网址不是库文件吗?伸手党不要懒到这种程度好吗 284003505 发表于 2021-9-15 10:31
上面网址不是库文件吗?伸手党不要懒到这种程度好吗
他应该是不知道库怎么在github上怎么下载。或者是被qiang了打不开网址哦。我也是找了好一会儿才找到库的ZIP下载:) HZB586 发表于 2021-9-15 14:27
他应该是不知道库怎么在github上怎么下载。或者是被qiang了打不开网址哦。我也是找了好一会儿才找到库的Z ...
好吧,我传上来 中文汉化版wifimanager库 在添加三个物理按键控制怎么添加呀
页:
[1]
2