투케이2K

31. (TWOK/LOGIC) [Android] SmartConfig 스마트콘피그 와이파이 연결 및 TCP/IP 통신 로직 본문

투케이2K 로직정리

31. (TWOK/LOGIC) [Android] SmartConfig 스마트콘피그 와이파이 연결 및 TCP/IP 통신 로직

투케이2K 2023. 3. 9. 22:10

[로직 정리]

정리 로직 : Android

상태 : [Android] SmartConfig 스마트콘피그 와이파이 연결 및 TCP/IP 통신 로직

 

[설 명]

 


===============================================

[1]. 안드로이드 build gradle 에 EspTouch 라이브러리 추가 실시

  - implementation 'com.github.EspressifApp:lib-esptouch-android:1.1.1'

===============================================

[2]. 안드로이드 근처 와이파이 검색 수행

===============================================

[3]. 특정 와이파이 선택 >> SSID , BSSID 추출 실시

===============================================

[4]. 와이파이에 연결할 수 있는 PW 정보 입력 실시

===============================================

[5]. 앱에서 스마트콘피그 브로드캐스팅 알림 활성 실시 

  - new EsptouchTask(apSsid, apBssid, apPassword, context);

  - task.setPackageBroadcast(true);

  - esptouchTask.setReciveSendWaitTime(30000, 60000);

  - List<IEsptouchResult> results = task.executeForResults(expectResultCount);

===============================================

[6]. 장비에서 정상적으로 브로드캐스팅 알림 확인 후 해당 AP 정보에 연결 완료 시 >> SSID , HostAddress 추출 실시

  - IEsptouchResult first = results.get(0);

  - touchResult.getBssid()

  - touchResult.getInetAddress().getHostAddress()

===============================================

[7]. 앱에서 HostAddress , Port 지정해서 TCP/IP 소켓 생성 실시

        ConnectivityManager connectivity = (ConnectivityManager) mMainCtx.getSystemService(Context.CONNECTIVITY_SERVICE);
        Socket sock = null;

        try{

            if (connectivity != null)
            {
                for (Network network : connectivity.getAllNetworks())
                {
                    NetworkInfo networkInfo = connectivity.getNetworkInfo(network);
                    if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
                    {
                        if (networkInfo.isConnected())
                        {
                            S_Log.w("//===========//","================================================");
                            S_Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> createSocket() :: 소켓 생성 실시]");
                            S_Log.i("","\n"+"[host :: "+String.valueOf(host)+"]");
                            S_Log.i("","\n"+"[port :: "+String.valueOf(port)+"]");
                            S_Log.w("//===========//","================================================");

                            // [소켓 생성 실시]
                            socket =  network.getSocketFactory().createSocket(host, port);

                            socket.setTcpNoDelay(true);
                            socket.setSoTimeout(0);
                        }
                    }
                }
            } else {
                S_Log.e("//===========//","================================================");
                S_Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> createSocket() :: start]");
                S_Log.i("","\n"+"[error :: ConnectivityManager is null]");
                S_Log.e("//===========//","================================================");
            }
        } catch (Exception e) {
        }

===============================================

[8]. 앱에서 TCP/IP 소켓 연결 확인 실시 (socket.isConnected())

===============================================

[9]. 정상적으로 소켓 연결이 된 경우 >> 데이터 송수신을 위한 InputStream, OutputStream 지정

===============================================

[10]. 앱과 디바이스 간 데이터 송수신 수행 실시

===============================================

[11]. 모든 로직 과정을 마치면 소켓 연결 종료 실시 (socket.close())

===============================================

[12]. 참고 사이트 : 

https://www.techtonions.com/esp32-using-smartconfig/

https://libraries.io/maven/com.tencent.iot.thirdparty.android:esptouch

https://github.com/EspressifApp/EsptouchForAndroid/tree/master/esptouch

===============================================

 

반응형
Comments