基于esp8266+點燈科技+小愛同學的宿舍開燈解決方案!?。?/h1>
基于點燈科技+小愛同學+esp8266的宿舍開燈方案
設備:esp8266
mg90s舵機
總價不超二十元
軟件:手機:點燈科技,米家,小愛同學
電腦:ardunio或者esp8266的燒錄軟件
ardunio需要安裝所需庫文件,有一點小麻煩。不做闡述,可以私信我。
ardunio鏈接:https://github.com/arduino/Arduino
其實esp8266的燒錄軟件直接燒錄程序就可以了
軟件
「宿舍開燈」https://www.aliyundrive.com/s/9Nq1Au7kYr2
點擊鏈接保存,或者復制本段內容,打開「阿里云盤」APP 。
可以用記事本直接更改程序。
程序和所需軟件放在評論區(qū)鏈接
打開手機點燈科技,添加設備,獨立設備,網(wǎng)絡接入,復制密鑰(稍后有用)


用adrunio的可直接打開更改,當然還可以用記事本打開更改密鑰以及wifi信息
(手機開熱點時需調成2.4的esp8266不支持5g)

打開燒錄軟件,選擇端口,再點config ,再選程序。

添加到米家中,再用小愛同學語音控制。


再打開小愛同學,添加語音控制。
打開“我的訓練”

添加操作。

程序:
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//支持小愛同學
#define BLINKER_MIOT_OUTLET
#include <Servo.h>
?
#define PIN_SERVO D0 //舵機信號線
?
Servo myservo;
?
#include <Blinker.h>
?
char auth[] = "6fff7008bc42";? //點燈Key
char ssid[] = "wifi";? ? ? //wifi名稱
char pswd[] = "12345678";? ? ?//wifi密碼
?
bool oState = false;
?
void miotPowerState(const String & state)
{
? ? BLINKER_LOG("need set power state: ", state);
? ? myservo.attach(PIN_SERVO);
?
? ? if (state == BLINKER_CMD_ON) {
? ? ? ? myservo.write(98);//舵機正轉度數(shù)
? ? ? ? delay(100); //延時0.1秒
? ? ? ? myservo.write(60); //點燈后歸位度數(shù),根據(jù)實際情況更改
? ? ? ? delay(100);?
?
? ? ? ? BlinkerMIOT.powerState("on");
? ? ? ? BlinkerMIOT.print();
?
? ? ? ? oState = true;
? ? }
? ? else if (state == BLINKER_CMD_OFF) {
? ? ? ? myservo.write(-8);//舵機反轉度數(shù),度數(shù)自行調節(jié)。
? ? ? ? delay(100);
? ? ? ? myservo.write(60); //點燈后歸位度數(shù),根據(jù)實際情況更改
? ? ? ? delay(100);?
?
? ? ? ? BlinkerMIOT.powerState("off");
? ? ? ? BlinkerMIOT.print();??
?
? ? ? ? oState = false;
? ? }
}
?
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("millis", BlinkerTime);
}
?
void setup()
{
? ? Serial.begin(115200);
? ? BLINKER_DEBUG.stream(Serial);
?
? ? pinMode(LED_BUILTIN, OUTPUT);
? ? digitalWrite(LED_BUILTIN, HIGH); //控制板子上指示燈的開是LOW,關是HIGH(默認是關,可自行修改)
?
? ? Blinker.begin(auth, ssid, pswd);
? ? Blinker.attachData(dataRead);
? ??
? ? BlinkerMIOT.attachPowerState(miotPowerState);
? ? BlinkerMIOT.attachQuery(miotQuery);
}
?
void loop()
{
? ? Blinker.run();
}