- 實現 D1 mini 與 Line 之間的連結
- 實現 D1 mini 與 BLYNK 之間的連結
我嘗試將
NodeMCU 教學 - 02:WeMos D1 mini NodeMCU 與 BLYNK
NodeMCU 教學 - 03:WeMos D1 mini (NodeMCU) 與 Line 的連結
NodeMCU 教學 - 04:WeMos D1 mini (NodeMCU) 與 Line 的連結 (實際應用於居家監控)
進行結合,也就是 D1 mini 、 BLYNK 、 Line 這三者之間的結合。
BLYNK 的部分用最簡單的直接控制 I/O 腳 D4 來進行實現,如果這部分可以就表示這兩者之間的連結沒有問題。再加上 IFTTT&Line 的事件觸發就可以完成三者間的連結(這部份我們也用最簡單的觸發事件通知不帶 value 的方式)
最終的結果如上圖
#define BLYNK_PRINT Serial
#include "ESP8266WiFi.h"
#include "BlynkSimpleEsp8266.h"
void send_event(const char *event); // Function 原型
// ===== Wifi & BLYNK setup =====
char auth[] = “BLYNK上的 auth";
char ssid[] = “WIFI名稱";
char pass[] = “WIFI密碼";
// ===== IFTTT setup =====
const char *host = "maker.ifttt.com";
const char *privateKey = “IFTTT上的KEY";
// ===== Hardware setup =====
const int buttonPin = D8;
// ===== Variables will change =====
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass); //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
}
void loop()
{
Blynk.run();
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonState)
{
Serial.print("Button now ");
Serial.println(HIGH == reading ? "HIGH" : "LOW");
buttonState = reading;
if (buttonState == LOW) {
// ===== 輸入在 IFTTT 上輸入的 event 名稱 =====
send_event("NotifyMe");
}
}
}
lastButtonState = reading;
}
void send_event(const char *event)
{
Serial.print("Connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("Connection failed");
return;
}
// Create a URI for the request
String url = "/trigger/";
url += event;
url += "/with/key/";
url += privateKey;
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
// Read all the lines of the reply from server and print them to Serial,
// the connection will close when the server has sent all the data.
while(client.connected())
{
if(client.available())
{
String line = client.readStringUntil('\r');
Serial.print(line);
} else {
// No data yet, wait a bit
delay(50);
};
}
Serial.println();
Serial.println("closing connection");
client.stop();
}
額外應用
之前用 3D列印機在列印的時候一直有一個問題
就是放著列印並且出門之後,無法知道它到底印完沒
且印完了也不會自己關機 ....
所以一直想方設法要取得列印的狀態,以及列印完自動關機
而要改列印機本身的韌體我覺得太麻煩了,要取得列印狀態在網路上的範例大多要配合樹梅派來用,較繁瑣而且成本又高。
當我們用了 WeMos D1 mini 完成了這章的應用
我們就可以上傳微控器的變數資料到手機 APP ,且配合 IFTTT 可以發送 Line 訊息到手機,且可以用手機 APP 遙控微控制器的 I/O 口
如此一來只要改一下配置就可以監測到 3D 列印目前狀態了(雖然還是無法得知列印到多少 % )
我們可以配合電流感測器,運用電流來判斷現在印表機是否正在列印(列印的時候肯定電流挺大的,且列印完成後噴頭跟熱床都會關閉,這樣電流就會突然變很小)
當我們判斷到列印完成的狀態後,就可以用微控器配合 IFTTT 傳送 Line 訊息通知我們。並且我們可以用手機 APP 搭配繼電器,完成遠端將列印機關閉的動作。