#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
line token สมัครเป็นของเราแล้วใช่ไหมครับ
ใช่ครับสมัครเเล้ว
ข้อลิ้งค์ที่ใช้อ้างอิงการทำหน่อยครับ
http://www.robotsiam.com/article/87/โปรเจค-iot-esp32-วัดความชื้นในดิน-แจ้งเตือนผ่าน-line-notify นี้ครับ
มันเชื่อม line server ไม่ได้ครับ โค้ตมันไม่ได้อัพเดทรึป่าว
ลองเปลี่ยนไปใช้ library เจ้านี้ดูครับ อันนั้นไม่รู้ว่าเขียนไว้กี่ปีแล้ว
ขอบคุณครับตอนนี้ผมได้เเล้วครับโค้ดที่เขียนประมาณนี้ครับ
#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);
}
สรุปให้หน่อยครับแก้ไขอะไรไปถึงได้
เเก้โดยการเอาโค้ดที่เขียน microgear ออกครับดูเหมือนโค้ดที่เขียนตอนเเรกจะไม่สามารถรันพร้อมกันกับLine ได้ครับ เหมือนมันเชื่อมต่อได้ทีล่ะอัน กำลังหาวิธีเชื่อมให้มันได้อยู่ครับ
เยี่ยมเลยครับ ได้วิธียังไงเอามาแชร์กันนะครับ แต่จริงๆ ไมโครเกียร์กับ line โค้ตมันคนละส่วนกันนะ หรือว่าเราส่งค่าจากไมโครเกียร์ออกมาให้ String ของ line ไม่ได้มันเลย fail รึป่าว