// 원격지의 LCD를 TCP/IP 방식으로 제어
// H-Server 중계 서버 이용 (http://whiteat.com/HServer)
#include <WAT_Multi.h>
#include <ESP8266_TCP.h>
ESP8266_TCP wifi;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27);
// Target Access Point
#define ssid "whiteat"
#define pass "12345678"
// TCP Server IP and port
#define serverIP "watclean7.com"
#define serverPort 1050
#define ID "test"
#define PASSWORD "test"
void setup()
{
lcd.setBoardType(1);
lcd.begin(16, 2); // 16 x 2
lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
lcd.print("WAT-Arduino128 ");
lcd.setCursor(0, 1);
lcd.print("TCP/IP LCD I2C M");
Serial.begin(115200); // debug
Serial1.begin(9600); // wifi
Serial.println("Program Start TCP/IP LCD");
delay(3000);
wifi.begin(&Serial1, &Serial, PD4);
// Check that ESP8266 is available
if(wifi.test())
{
// Connect to target Access Point
String ip = connectAP();
}
else
{
// Open TCP Server on port 2000 and 30 seconds for timeout
Serial.println("Check module connection and restart to try again...");
while(true);
}
}
void loop()
{
// Check for any data has coming to ESP8266
int dataState = wifi.isNewDataComing(WIFI_CLIENT);
if(dataState != WIFI_NEW_NONE) {
if(dataState == WIFI_NEW_CONNECTED) {
// Connected with TCP Server Side
wifi.WloginServer(ID,PASSWORD);
} else if(dataState == WIFI_NEW_DISCONNECTED) {
// Disconnected from TCP Server Side
Serial.println("Disconnected");
} else if(dataState == WIFI_NEW_MESSAGE) {
// Got a message from TCP Server Side
String str = wifi.getMessage();
Serial.println("Message : " + str);
int start1 = str.indexOf("1:");
int start2 = str.indexOf("2:");
if (start1 >= 0 && start2>0)a
{
String line1 = str.substring(start1 + 2, start1 + 18);
String line2 = str.substring(start2 + 2, start2 + 18);
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
Serial.println("line1 : " + line1);
Serial.println("line2 : " + line2);
}
} else if(dataState == WIFI_NEW_SEND_OK) {
// Message transfer has successful
Serial.println("SENT!!!!");
}
}
// Auto connect to TCP Server Side when connection timeout
if(wifi.getRunningState() == WIFI_STATE_UNAVAILABLE) {
// Connect to TCP Server Side
Serial.println("try Connecting");
delay(500);
wifi.connectTCP(serverIP, serverPort);
}
delay(100);
}
// Access Point Connection Function that you can loop connect to Access Point until successful
String connectAP()
{
String ip = "0.0.0.0";
while(ip.equals("0.0.0.0"))
{
ip = wifi.connectAccessPoint(ssid, pass);
if(!ip.equals("0.0.0.0"))
{
break;
}
}
return ip;
}