안드로이드에서 아래와 같이 소켓 통신 서버를 열어 놓고 esp8266과 통신하는 방법
//서버관련
public void serverCreate() {
Collections.synchronizedMap(clientsMap);
try {
serverSocket = new ServerSocket(1234);//포트 지정
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
socket = serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
msg = socket.getInetAddress() + "에서 접속\n";
handler.sendEmptyMessage(SERVER_TEXT_UPDATE);
new Thread(new Runnable() {
private DataInputStream in;
private DataOutputStream out;
private String nick;
@Override
public void run() {
try {
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
if (in != null) {
try {
if (msg.indexOf("192.x.x.x") > -1) {
msg = in.readLine(); // esp8266은 uft로 보내지 못해서readline 사용
} else {
msg = in.readUTF(); // 일반적인 경우
}
sendMessageC(msg);
handler.sendEmptyMessage(SERVER_TEXT_UPDATE); //수신 데이터를 핸들러로 보내서 처리
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
* 이리저리 해보아도 esp8266에서 utf방식으로 전송이 안되어서 readline()으로 읽어옴.
** 2번째 방식에서 보듯이 안드로이드 웹서버가 아님에도 get 방식으로 서버에 접속이 가능하여 웹브라이저에서도 "http://192.x.x.x:1234/test" 이런 형식으로 접속할 경우 in.readline()으로 test란 값을 가져옴
*** 안드로이드 서버가 2번째 get방식이 가능하여 홈어시스턴트를 통한 각종 센서 값 수신 및 제어가 가능함. 차후 관련 사례를 다룰 예정임
1. wificlient 방식으로 안드로이드 서버에 데이터 전송
와이파이 접속 등 일반적인 부분은 생략하고 개략적 형태를 보면
#include <ESP8266WiFi.h>
WiFiClient client;
String svip = "192.x.x.x";
if (!client.connect(svip, 1234)) { //서버 1234 포트 접속
Serial.println("connection failed");//서버 접속에 실패
delay(100);
return;
}
else
{
client.println("test"); // -> 안드로이드 서버의 in.readline()에서 test란 값을 가져옴
delay(100);
String recevbline = client.readStringUntil('\r');
Serial.println("recevbline:" + recevbline);
delay(1000);
}
2. http.get 방식으로 안드로이드 서버에 데이터 전송
개략적 소스임
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
String serverPath= "http://192.x.x.x:1234/test";
WiFiClient client;
HTTPClient http;
http.begin(client, serverPath.c_str());
// Send HTTP GET request
int httpResponseCode = http.GET(); //get 방식으로 안드로이드 서버 접속함 -> 안드로이드 서버의
//in.readline()에서 GET /test HTTP/1.1란 값을 가져옴
// Free resources
http.end();
'diy > esp8266' 카테고리의 다른 글
ets Jan 8 2013,rst cause:4, boot mode:(3,7) (0) | 2023.12.14 |
---|---|
esp-12 gpio핀 정리 (1) | 2023.11.13 |
esp-01 릴레이를 이용한 도어락 열기 2 (0) | 2022.11.25 |
esp-01 릴레이를 이용한 도어락 열기 1 (0) | 2022.11.22 |
voc센서(GSBT11-P110, 공기질 측정기) 만들기 2 (0) | 2022.09.28 |