아이디어 구체화/IOT 원격 스위치

추가 주소 없이 원하는 HTML 열기

맏리믓 2022. 1. 12. 16:04

- 경로 입력시 해당 경로의 HTML 파일을 여는 코드

 -"ESP3D-IoT - esp3d - syncwebserver.cpp" 의 194줄 코드입니다.

 - 205 줄에 있는 else if (ARGS.hasOwnProperty("S"))를 통해 아래처럼 ?S 를 읽을 수 있고 207번 줄을 통해 뒤에 친 '=LST'를 합쳐 URL 경로를 완성해 index.html 파일을 읽어 오는것 같습니다.

 - 따라서 이 함수에 제가 원하는 주소로 바로 갈 수 있게 코드를수정 한다면 별도의 URL 없이 제가 원하는 html 을 열수 있습니다.

 - 이때 기존 코드와의 syntax를 맞춰 주기 위해 "_LSH_REMOTE_POWER_SW_FEATURE" 를 "config.h"내부에 정의 해 두고 코드에서 "_LSH_REMOTE_POWER_SW_FEATURE"가 정의 되었을때 실행 되게 짜도록 하겠습니다.

(제가 애용 하는 방식인데 이렇게 짜면 추가한 기능을 끄고 싶을때 config.h 에서 정의 해놓은 줄만 코멘트 처리 하면 코드를 지울 필요 없이 끌 수 있습니다.)

예시

- 코드 수정하기

 - 위 코드를 수정한 결과 입니다.

 - 기존의 코드에서 "ARGS.keys()"의 값은 뒤에 추가로 주는 URL 값입니다. 

 - 해당 값이 1보다 작을때 즉 아무것도 없을때 자동으로 "WA/S/RPSW" 값을 주어 원하는 웹페이지로 이동 할 수 있게 합니다.

 - 단 이때 원래 아무것도 입력하지 않았을때 가는 페이지인 "ESP3D"페이지를 갈 수 없어 파일을 추가 하지 못하는 문제가 발생합니다. 

 - 이를 예방 하고자 아래와 같은 코드를 추가 해 줍니다.

(처음에 이거 안해서 다시 업로드 했습니다;;)

 - 이를 통해 URL 주소 뒤에 ESP3D 를 추가 하면 기존의 웹페이지로 이동 할 수 있..는줄 알았습니다.

- 오류 수정

 - 사진을 보면 알 수 있듯 원하는대로 나오지 않았습니다. 

 - 'serial.println'을 통해 로그를 찍어 트러블 슈팅을 해 보았습니다.

 - 뒤에 argument 를 주면 "PROC_WEB_API" 함수가 정상적으로 작동 하지만 주지 않으면 함수 안으로 들어오지 못하였습니다. 

 - 따라서 해당 함수를 호출하는 다른 함수를 분석 해 보았습니다.

 - 찾아 본 결과 "handle_web_interface_root"함수에서 "PROC_WEB_API" 함수를 호출 하였습니다.

 - 이때 'if'문에서 "web_server.args"가 0보다 클때만 호출 하는 것이기 때문에 1보다 작을때는 아에 함수 자체를 호출 하지 않는 것이었습니다.

 - 따라서 조건 없이 해당 함수를 호출 할 수 있도록 바꾸어 보았습니다.('if문만 제거 하였습니다.')

- 실행 결과

 - 우선 "LSH_RPSW.html" 이 기존에 돌아가던 웹 페이지가 떳는데 자꾸 헷갈려서 그냥 'hello??'만 뜨게 바꾸었습니다.

 - 와이파이 모양 ESP 로고도 잘 뜨고 원하는 페이지가 잘 뜨는걸 확인 할 수 있습니다.

 - 추가적으로 파일 업로드를 위한 "ESP3D" 페이지또한 잘 뜨는걸 확인 할 수있습니다.

 (만약 프린터 조작 페이지로 가고 싶으면 위에 insex.html을 붙이면 됩니다.)