Esp8266 จับวัตถุด้วย ir sensor แจ้งเตือนผ่าน line notify

สวัสดีครับพอดีผมทำโครงการจบปวส.เป็นโครงการตู้รับพัสดุคล้ายๆกับตู้จดหมายแจ้งเตือนทางไลน์ ตอนนี้ใช้บอร์ด esp8266 เซ็นเซอร์เป็นตัว IR Infrared Obstacle Detection Sensor และผมรันโค้ดตามที่ดูจากทั่วไปปกติแก้ทุกปปัญหาจนรันผ่าน แต่เมื่อมันตรวจจับแล้วมัน detect connection failed ควรแก้ปัญหายังไงดีครับ

void Line_Notify1(String message1) ;
#include <TridentTD_LineNotify.h>
#define WIFI_SSID “NBN_311523_2.4G”
#define WIFI_PASSWORD “311523BNN”
#define LINE_TOKEN_PIR “4AwdQx6Ak5qfhtbIRZzkrXxs3odXqaPx4QaDTtILvlD”
#define PirPin D6

String message1 = “you received a new parcel”;
bool beep_state = false;
bool send_state = false;
uint32_t ts, ts1, ts2;
void setup() {
Serial.begin(115200);
Serial.println();
pinMode(PirPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// dht.begin();
Serial.println(“connecting”);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print(“connecting”);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
delay(10000);
Serial.println(“Pir Ready!!”);
//read_sensor();
ts = ts1 = ts2 = millis();
}
void loop() {
ts = millis();
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, LOW);
} else {
digitalWrite(LED_BUILTIN, HIGH);
}

if ((ts - ts1 >= 5000) && (beep_state == true)) {
beep_state = false;
}

if ((digitalRead(PirPin) == HIGH) && (beep_state == false) && (WiFi.status() == WL_CONNECTED)) {
while (digitalRead(PirPin) == HIGH) delay(100);
Serial.println(“Detect !”);
Line_Notify1(message1);
beep_state = true;
}
delay(10);
}
void Line_Notify1(String message) {
WiFiClientSecure client;
if (!client.connect(“[notify-api.line.me](http://notify-api.line.me/)”, 443))
{
Serial.println(“connection failed”);
delay(2000);
return;
}
String req = “”;
req += “POST /api/notify HTTP/1.1\r\n”;
req += “Host: [notify-api.line.me](http://notify-api.line.me/)\r\n”;
req += "Authorization: Bearer " + String(LINE_TOKEN_PIR) + “\r\n”;
req += “Cache-Control: no-cache\r\n”;
req += “User-Agent: ESP8266\r\n”;
req += “Content-Type: application/x-www-form-urlencoded\r\n”;
req += "Content-Length: " + String(String(“message=” + message1).length()) + “\r\n”;
req += “\r\n”;
req += “message=” + message1;
// Serial.println(req);
client.print(req);
delay(20);
while (client.connected()) {
String line = client.readStringUntil(’\n’);
if (line == “\r”) {
break;
}
}
}



ใช้อะไรปล่อยเน็ตครับ

wifi บ้านครับเน็ตมือถือก็ลองแล้วเป็นลักษณะเดียวกันครับ

ให้ใช่ library ตามตัวอย่างผมดูครับ ใช้แค่คำสั่งส่งไป line ก็พอ ไม่ต้องยกมาทั้งฟังก์ชัน

ผมลองใช้ตามของพี่แล้วครับเมื่อผ่านเซ็นเซอร์มันไม่แจ้งเตือนครับแต่เมื่อกดรีเซ็ตที่บอร์ดมันจะดังหนึ่งครั้งและมันจะดังตอนอัปโค้ดหรือกดรีเซ็ตอะครับ

ตอนที่มันขึ้น connection failed ไฟ LED ที่บอร์ดติดอยู่รึป่าว

ไม่ติดนะครับ

แสดงว่า WiFi มันหลุดไปก่อนที่มันจะส่งการแจ้งเตือนหรือไม่ ลองสลับตรงนี้ดูหน่อย

if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, LOW);
} else {
digitalWrite(LED_BUILTIN, HIGH);
}

เป็น

if (WiFi.status() == WL_CONNECTED) {
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}

แล้วบอกหน่อยว่า ตอนที่มัน fail LED สีฟ้าที่บอร์ดติด หรือดับ