투케이2K

13. (TWOK/STUDY) [투케이 학습] : 스마트 콘피그 (SmartConfig) 와이파이 TCP / IP 통신 기본 설명 및 학습 정리 본문

투케이2K 학습정리

13. (TWOK/STUDY) [투케이 학습] : 스마트 콘피그 (SmartConfig) 와이파이 TCP / IP 통신 기본 설명 및 학습 정리

투케이2K 2023. 8. 29. 10:38
반응형

[제 목]

[투케이 학습] : 스마트콘피그 (SmartConfig) 와이파이 TCP / IP 통신 기본 설명 및 학습 정리

 

[설 명]

 



[스마트 콘피그 설명]

[1]. 스마트 콘피그는 espress 에서 개발한 기술이며, 사용자가 스마트폰에서 간단한 구성을 통해 ESP 모듈 장치를 Wi-Fi 네트워크에 연결할 수 있도록 도와줍니다

[2]. 스마트 콘피그를 사용하기 위해서는 디바이스에서 espress 에서 개발한 하드웨어 모듈에 장착되어 있어야하며, Android 및 Ios 에서 EspTouch 라이브러리 의존성을 추가해야합니다

  - 디바이스에서 espress 에서 개발한 하드웨어 ESP 모듈이 없는 경우는 스마트 콘피그를 사용할 수 없습니다







[스마트 콘피그 TCP/IP 통신 로직 - Android 기반]

[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())







[스마트 콘피그 참고 사이트]

https://www.espressif.com/en/products/software/esp-touch/overview

https://play.google.com/store/apps/details?id=com.khoazero123.iot_esptouch_demo&hl=en_US

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