ช่วยดูให้หน่อยครับ ว่าทำไมมัน ไม่เเจ้งเตือน ไปในไลน์เลย

#include <ESP8266WiFi.h>
#include <MicroGear.h>
#include <WiFiClientSecureAxTLS.h>
void Line_Notify(String message) ;
const char* ssid     = "fuckforwifi";
const char* password = "98765432";
#define APPID   "noctisak47"
#define KEY     "oVPtWOV6YXyN45H"
#define SECRET  "DLxXCbp3SKaGKqJQYw4zl1cvA"
#define ALIAS   "NodeMCU"
#define LINE_TOKEN "eRgPOm3qoTIXlQdJBId33ZNJ3yhsBjjSCHTGQpDdMe6"
String txt1 = "ดินชื้นน้อย ";
String txt2 = "รดนํ้าได้เเล้ว ";
String txt3 = "ดินชื้นปกติ ";
WiFiClient client;
int sensorPin = A0;
int timer = 0;
MicroGear microgear(client);
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
    Serial.print("Incoming message --> ");
    msg[msglen] = '\0';
    Serial.println((char *)msg);
}
void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen) {
    Serial.print("Found new member --> ");
    for (int i=0; i<msglen; i++)
    Serial.print((char)msg[i]);
    Serial.println();  
}
void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen) {
    Serial.print("Lost member --> ");
    for (int i=0; i<msglen; i++)
    Serial.print((char)msg[i]);
    Serial.println();
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
    Serial.println("Connected to NETPIE...");
    microgear.setAlias(ALIAS);
}
void setup() {
    {
  Serial.begin(115200); 
  delay(500); 
}
    microgear.on(MESSAGE,onMsghandler);

    microgear.on(PRESENT,onFoundgear);

    microgear.on(ABSENT,onLostgear);

    microgear.on(CONNECTED,onConnected);

    Serial.begin(115200);
    Serial.println("Starting...");

    if (WiFi.begin(ssid, password)) {
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
}
}
Serial.println("WiFi connected");  
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY,SECRET,ALIAS);
microgear.connect(APPID);
}
void loop() 
{
  int Humidity = analogRead(sensorPin);
  int sensorValue;
  sensorValue = analogRead(sensorPin);
  sensorValue = map(sensorValue, 0, 1023, 100, 0);
  Serial.print("Soil moisture: ");
  Serial.print(sensorValue);
  Serial.println(" %"); 
  delay(500);
if (microgear.connected()) {
   Serial.println("connected");
   microgear.loop();

if (timer >= 1000) {
   Serial.println("Publish...");
   microgear.chat(ALIAS,sensorValue);
   timer = 1000;
} 
   else timer += 100;
    }
else {
   Serial.println("connection lost, reconnect...");
   if (timer >= 5000) {
   microgear.connect(APPID);
   timer = 0;
}
   else timer += 100;
}
   delay(100);
    
  if (Humidity < 800){
  Serial.print("sensorValue:");
  Serial.println(Humidity);
  Line_Notify(Humidity + txt1 + txt2);
}
  else if (Humidity >= 800) {
  Serial.print("sensorValue:");
  Serial.println(Humidity);
}
  delay(500);
}
  void Line_Notify(String t) {
  WiFiClientSecure client;
  if (!client.connect("notify-api.line.me", 443)) {
  Serial.println("Connection failed");
  return;
}
String req = "";
req += "POST /api/notify HTTP/1.1\r\n";
req += "Host: notify-api.line.me\r\n";
req += "Authorization: Bearer " + String(LINE_TOKEN) + "\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=" + t).length()) + "\r\n";
req += "\r\n";
req += "message=" + t;
Serial.println(req);
client.print(req);
delay(20);
Serial.println("-------------");
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
break;
}
}
}

โทษทีครับเเก้เเล้ว

มันเชื่อม wifi ได้รึยังครับ ดูตรง serial มันขึ้นว่าไรบ้าง

เชื่อมได้เเค่เน็ต netpieอ่ะครับพอถึงที่กำหนดให้ส่งไลน์มันขึ้นว่าConnection failed :sweat_smile:

นี้ครับ

line token สมัครเป็นของเราแล้วใช่ไหมครับ

ใช่ครับสมัครเเล้ว

ข้อลิ้งค์ที่ใช้อ้างอิงการทำหน่อยครับ

http://www.robotsiam.com/article/87/โปรเจค-iot-esp32-วัดความชื้นในดิน-แจ้งเตือนผ่าน-line-notify นี้ครับ

มันเชื่อม line server ไม่ได้ครับ โค้ตมันไม่ได้อัพเดทรึป่าว

ลองเปลี่ยนไปใช้ library เจ้านี้ดูครับ อันนั้นไม่รู้ว่าเขียนไว้กี่ปีแล้ว

1 Like

ขอบคุณครับตอนนี้ผมได้เเล้วครับโค้ดที่เขียนประมาณนี้ครับ

#include <ESP8266WiFi.h>
#include <MicroGear.h>
#include <TridentTD_LineNotify.h>
#include <ESP8266WiFi.h>
#include <MicroGear.h>
#define SSID        "fuckforwifi"
#define PASSWORD    "98765432"
#define LINE_TOKEN  "eRgPOm3qoTIXlQdJBId33ZNJ3yhsBjjSCHTGQpDdMe6"
//#define APPID       "Nani2020"
//#define KEY         "ivvyfbJBDOXXfxs"
//#define SECRET      "oMiUtYNrZMuGh32IbFptcP4Oq"
//#define ALIAS       "NodeMCU"
WiFiClient client;
int sensorPin = A0;
int timer = 0;
String txt1 = "ความชื้นตํ่า";
String txt2 = "รดนํ้าได้เเล้ว";
String txt3 = "ความชื้นปกติ";
void setup() {
  Serial.begin(115200); Serial.println();
  Serial.println(LINE.getVersion());
  
  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while(WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(400); }
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());  

  // กำหนด Line Token
  LINE.setToken(LINE_TOKEN);

  // ตัวอย่างส่งข้อความ
  LINE.notify("เชื่อมต่อ");



  
}
void loop() 
{
  int Humidity = analogRead(sensorPin);
  Humidity = analogRead(sensorPin);
  Humidity = map(Humidity, 0, 1023, 100, 0);
  Serial.print("Soil moisture: ");
  Serial.print(Humidity);
  Serial.println(" %"); 
  
  int sensorValue;
  sensorValue = analogRead(sensorPin);
  sensorValue = map(sensorValue, 0, 1023, 100, 0);
  Serial.print("Soil moisture: ");
  Serial.print(sensorValue);
  Serial.println(" %"); 
  delay(500);
  
  if (Humidity < 20) {
  Serial.print("Humidity:");
  Serial.println(Humidity);
  LINE.notify(Humidity + txt1 + txt2);
}
else if (Humidity >= 20) {
Serial.print("Humidity:");
Serial.println(Humidity);
LINE.notify(Humidity + txt3);
}


delay(2000);
  
  
  
}
1 Like

สรุปให้หน่อยครับแก้ไขอะไรไปถึงได้

เเก้โดยการเอาโค้ดที่เขียน microgear ออกครับดูเหมือนโค้ดที่เขียนตอนเเรกจะไม่สามารถรันพร้อมกันกับLine ได้ครับ เหมือนมันเชื่อมต่อได้ทีล่ะอัน กำลังหาวิธีเชื่อมให้มันได้อยู่ครับ :sob:

เยี่ยมเลยครับ ได้วิธียังไงเอามาแชร์กันนะครับ :grin: แต่จริงๆ ไมโครเกียร์กับ line โค้ตมันคนละส่วนกันนะ หรือว่าเราส่งค่าจากไมโครเกียร์ออกมาให้ String ของ line ไม่ได้มันเลย fail รึป่าว