#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <TridentTD_LineNotify.h>
#include <SoftwareSerial.h>
#define LINE_TOKEN "剛剛發行權杖複製的TOKEN"
// Set WiFi credentials
#define WIFI_SSID "SSID"
#define WIFI_PASS "PWD"
unsigned long cal_time;
float H;
float T;
const byte rxPin = 4;
const byte txPin = 5;
String send_packet = "";
String rev_H = "";
String rev_T = "";
SoftwareSerial Ext_Serial (rxPin, txPin);
void setup(){
Ext_Serial.begin(9600);
Serial.begin(9600);
// 進行無線網路連接
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
//等待無線網路連接
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LINE.setToken(LINE_TOKEN); //設定Line Token權杖
LINE.notify("welcome to HT Monitor Server"); //發送訊息到Line上面
cal_time = millis();
}
int rev_idx = 0;
byte rev_packet[10];
int rev_count = 0;
int data_interval = 1000;
void loop() {
while(Ext_Serial.available())
{
byte rev_data = Ext_Serial.read();
rev_packet[rev_idx] = rev_data;
//Serial.println(rev_idx);
rev_idx ++;
if((char)rev_data == '\r' || rev_idx>= 10)
{
byte byteArray[10];
String decode_String = String((char*)rev_packet);
Serial.println(decode_String);
if((char)rev_packet[1] =='F' && (char)rev_packet[2] =='F')
{
rev_H = "";
rev_H +=decode_String.substring(3,4);
rev_H +=decode_String.substring(4,5);
rev_H +=decode_String.substring(5,6);
rev_H +=decode_String.substring(6,7);
rev_H +=decode_String.substring(7,8);
rev_count++;
}
else if((char)rev_packet[1] =='F' && (char)rev_packet[2] =='E')
{
rev_T = "";
rev_T +=decode_String.substring(3,4);
rev_T +=decode_String.substring(4,5);
rev_T +=decode_String.substring(5,6);
rev_T +=decode_String.substring(6,7);
rev_T +=decode_String.substring(7,8);
rev_count++;
}
else if((char)rev_packet[1] =='E' && (char)rev_packet[2] =='1')
{
String rev_interval = "";
Serial.println(decode_String.substring(3,4)+decode_String.substring(4,5));
rev_interval += decode_String.substring(3,4);
rev_interval += decode_String.substring(4,5);
LINE.notify(String()+"設定每"+rev_interval+"秒送一次資料");
//發送訊息到Line
data_interval = 1000 * rev_interval.toInt();
}
if(rev_count >= 2)
{
rev_count = 0;
LINE.notify(String()+"室內濕度: "+rev_H+"% 室內溫度:"+ rev_T + " 度");
//發送訊息到Line
}
rev_idx = 0;
}
}
if(millis() - cal_time > data_interval)
{
cal_time = millis();
Serial.println("Read HT");
String send_packet = "s00GAIS00\r";
byte packet[send_packet.length()];
send_packet.getBytes(packet, 10);
Ext_Serial.write(packet,10);
}
}