WIZnet Developer Forum

[WIZ550web] 서버에서의 제어문의

안녕하세요. wiz550web을 사용하려고 합니다.

해당보드의 aDC 4ch에대해서 PC프로그램에서 접근하려하는데 어떻게 해야하나요?

현재 소스가 보드의웹으로 4ch이 DISPLAY되고 있는데 이것을 PC프로그램에서 읽으려합니다.

그리고 보드에 특정데이터를 주려하는데 어떻게 해야하나요?

답변부탁드립니다. 감사합니다.

안녕하세요.

몇 가지 질문이 있습니다.

  1. wiz550web만 구매해서 사용하시는건가요??
  2. wiz550web base board까지 구매해서 사용하시는 건가요??
  3. WIZ550web H/W 버전이 몇인가요???

만약 H/W V1.1에 wiz550web만 구매해서 사용하신다면, pinout으로 나와있는 ADC 핀에 하드웨어를 구성하여 사용하시면 됩니다.

하드웨어 구성은 아래 링크 페이지를 참조하시면 됩니다.

wizwiki.net/wiki/doku.php?id=pro … _rev1.1_kr

최종 출력 핀을 ECH381R 2P 핀을 사용하시면 됩니다.


만약 WIZ550web base board까지 같이 구매해서 사용하신거라면, base board의 J27, J28번 점퍼 핀헤더의 2-3번을 Short시켜줍니다.(A IN0,1)

J27, J28의 2-3번을 Short해줘야 A0, A1 사용이 가능합니다.

그리고 J38,39,40,41의 커넥터에 ECH381V(2P) 을 부착하여 사용하시면 됩니다.

ECH381V(2P)는 아래 링크에서 엘레파츠라는 곳에서 구매하실 수 있습니다.

eleparts.co.kr/EPX34J78


그리고 ECH381V를 사용하여 각 ADC 4ch에 하드웨어 적으로 연결하셨다면, 이를 WIZ550web의 웹 페이지에서 확인이 가능합니다.

반드시 WIZ550web 구매 시 부착되어 있는 SD카드를 삽입하셔서 웹 페이지를 로딩하시면, 아래 그림과 같이 ADC 채널부분에서 확인이 가능합니다.


특정 데이터라고 말씀하시는 건 어떤 데이터를 말씀하시는 건지는 모르겠으나, ADC를 사용하신다는 것은 변동 되는 아날로그 전압을 넣으시는 것으로

생각이 됩니다. WIZ550web에 사용된 mcu는 STM32F103RCT6으로 12-bit ADC를 가지고 있습니다.

즉, ECH381V 2P 커넥터를 구매하셔서 사용하시는 하드웨어와 견착하시고, 해당 데이터를 인가하면 WIZ550web으로(웹 페이지) 확인이 가능합니다.

감사합니다.

답변 감사합니다.

현재 BASE보드까지 구매를 하여, ver 1.1 로 해서 , micro sdcard의 웹페이지 띄우고 IO제어및 ADC까지 웹에서 확인하고 있습니다.

컴파일러도 깔아서 1.1로 컴파일해서 tftp로 변경까지는 해보았습니다.

그런데 제가 하고픈것은

  1. 보드의 aDC값을 웹으로 눈으로 읽는게 아니라 PC의 프로그램으로 접근하여 가져오고싶습니다.

  2. PC의 프로그램으로 보드에 값을 셋팅해주고 싶습니다.

이2가지인데,

웹이라서 post방식으로해서 웹페이지에 접근하여 가져오거나 주거나 해야하는건지 다른 방법이 있는지해서요.

가령 PC프로그램에서 TCPIP로 리스너로 기다리고 접속하여 데이터 교환하는 방식등을 이보드에서 쉽게(^^) 할수 있는지 입니다.

감사합니다. ^^

안녕하세요.

PC 프로그램이라면 자체 보유하고 계신 프로그램인가 보군요.

가능합니다.

PC프로그램을 어떤 프로토콜로 구현하실지는 잘 모르겠으나, 충분히 가능합니다.

다만, 코딩은 직접 구현하셔야 합니다.

제 생각엔, WIZ550web 코드 자체를 수정하시면 될 것으로 보입니다.

WIZ550web의 경우, SD카드에 저장된 웹 페이지를 읽어 자체 웹 서버를 구동하는 모듈입니다.

이를 프로그램과 통신하기 위해서는 별도로 PC 프로그램과 통신할 수 있는 프로토콜을 구현하셔야 합니다.

그나마 PC 프로그램과 유사한 것이 Configuaration tool이네요.

WIZ550web 코드 내부에 Configuration tool로 부터 search가 오면 WIZ550web의 IP 정보를 보내주는 기능인데, 이와 유사하게 구현하시면 될 것으로 보입니다.

테스트 방법은 wireshark 라는 툴이 있습니다. 이 툴은 주고받은 이더넷 패킷을 캡쳐해서 볼 수 있는데요. 이 툴을 이용해서 프로토콜을 구성하셔서 테스트 및 확인이 가능합니다.

감사합니다.

답변 감사합니다.

펑뭬어의 HTTPSERVER_DEBUG 를 define 하여 Http 실행시 디버그문이 모두 나오게 하였습니다.

192.168.20.220/func_test.html 의 하단의 ADC GET 버튼을 누르면 아래아 같이 프린트문이 나옵니다.


HTTPSocket[4] : HTTP Request received from 192.168.20.161 : 32713
HTTPSocket[4] : [State] STATE_HTTP_REQ_DONE

HTTPSocket[4] : HTTP Method GET
HTTPSocket[4] : Request Type = 8
HTTPSocket[4] : Request URI = get_ain0.cgi
HTTPSocket[4] : HTTP Response Header + Body - CGI
HTTPSocket[4] : HTTP Response Header + Body - send len [ 147 ]byte
HTTPSocket[4] : [State] STATE_HTTP_RES_DONE
HTTPSocket[4] : CLOSED
HTTPSocket[4] : OPEN


즉 HTTP GET메소드로 get_ain0.cgi에게 요청하여 HTTP Request로 HTML포멧으로 데이터를 넘겨주는것 같습니다.

제가 하려는 의도는 C#코드로 ADC값을 가져오는것이라서 아래와 같이 C#의 http client를 코드를 실행하였습니다.


            TcpClient tcpclnt = new TcpClient();
            Console.WriteLine("Connecting.....");

            tcpclnt.Connect("192.168.20.220", 80);//8001
            // use the ipaddress as in the server program

            Console.WriteLine("Connected");
            Console.Write("Enter the string to be transmitted : ");

            String str = Console.ReadLine();
            Stream stm = tcpclnt.GetStream();

            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] ba = asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");

            stm.Write(ba, 0, ba.Length);

            byte[] bb = new byte[100];
            int k = stm.Read(bb, 0, 100);

            for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(bb[i]));

            tcpclnt.Close();

접속후–> 콘솔에 get_ain0.cgi 라고 입력하고 엔터를 눌렀습니다.

이렇게하니 보드에서 시리얼로 다음과 같은 프린트문을 찍어주었습니다.

HTTPSocket[4] : HTTP Request received from 192.168.20.161 : 32797
HTTPSocket[4] : [State] STATE_HTTP_REQ_DONE
HTTPSocket[4] : HTTP Response Header - STATUS_BAD_REQ
HTTPSocket[4] : [Send] HTTP Response Header [ 116 ]byte
HTTPSocket[4] : [State] STATE_HTTP_RES_DONE
HTTPSocket[4] : CLOSED
HTTPSocket[4] : OPEN

BAD_REQ를 주어서 자신은 무얼할수 없다는것 같습니다.

httpClient 접속시 어떤구문을 주어야 httpServer에서 명령을 이해할까요?

GET이런거하고, 포트번호, 명령등을 주어야하는데 어떤형식으로 주어야하는지 감이 안옵니다.

해당문서를 봐도그런말은 찾아보기힘들고요.

답변좀 부탁드립니다. 감사합니다. ^^

안녕하세요.

우선 컨셉을 다시 돌아볼 필요가 있는 것 같습니다.

제가 확실하게 이해했는지는 모르겠지만, 간단하게 그림으로 표현해주시면 감사하겠습니다.

원하시는 것은 WIZ550web으로 부터 ADC 정보 값을 읽어오는 것인데, 이를 웹 페이지에서 불러오신다는 뜻인가요??

WIZ550web의 모듈 자체에서 데이터를 불러와서 이를 PC 프로그램으로 보내는 수순으로 작업하면 굳이 웹을 이용하지 않아도 통신이 가능할 것으로 생각됩니다.

제가 생각하는 프로세스는 WIZ550web(MCU ADC Read) -> Read한 ADC 값을 해당 PC 프로그램으로 전송.

이렇게만 구현하면 될 것으로 보입니다.

그렇게 된다면, PC 프로그램의 프로토콜이 필요합니다. PC 프로그램의 프로토콜 가이드가 있으면 그대로 코딩으로 구현해서 보내기만 하면 되는데,

만약, PC 프로그램의 프로토콜이 없이 단지 WIZ550web의 웹 페이지에서 ADC값을 불러오는 것이라면, 순서가 좀 복잡하게 될 것 같네요.

WIZ550web에서는 수시로 SD 카드 데이터를 MCU에서 읽어서 이를 웹 서버로 나타냅니다.

그렇다면, 웹 서버로 나타내는 상태에서 이 웹서버의 ADC 데이터를 불러오는 것이라면, WIZ550web에서 웹 서버로 데이터를 갱신하거나 업데이트 할 때 동시에 PC 프로그램 측으로 업데이트하게 만들어도 될 것으로 판단되는데,

일단, WIZ550web은 web server로만 동작한다는 점을 아셔야 합니다.

정확하게 어떻게 구현하실 것인지가 먼저 필요할 것으로 보입니다.

감사합니다.

안녕하세요. ^^

제가 생각하는 프로세스는 WIZ550web(MCU ADC Read) -> Read한 ADC 값을 해당 PC 프로그램으로 전송.
이렇게만 구현하면 될 것으로 보입니다.
그렇게 된다면, PC 프로그램의 프로토콜이 필요합니다. PC 프로그램의 프로토콜 가이드가 있으면 그대로 코딩으로 구현해서 보내기만 하면 되는데,
----> 이게 맞습니다.

PC프로토콜이라는것이 0x02 desaddress srcaddress adc0value adc1value checksum 0x03 이런 프로토콜을 말하는것 인지요?
이런거면 그냥 포멧을 맞추면되는데

데모프로그램소스에서 어떤식으로 이부분을 통신해야하는지(프로토콜포멧이아니라 통신하는 방법) 모르겠습니다.

wiz550web이 server 역을하고 PC가 client가 되서 접속후 데이터를 받으면 되는데, wiz550web소스의 어떤부분에서 이부분을 컨트롤 하는지 잘모르겠습니다. ^^;;;;;;;;;;

답변 부탁드립니다. 감사합니다. ^^

안녕하세요.

다시 말씀드리지만, WIZ550web에서 바로 read 한 adc 값을 해당 pc 프로그램에 전송하는 방식과,

WIZ550web을 web server로 지정, pc 프로그램을 client로 지정하여 전송하는 방식은 다른 방식입니다.

첫 번째로 말한 WIZ550web에서 바로 read 한 adc 값을 해당 pc 프로그램에 전송하는 방식은 엄밀히 말하자면, wiz550web이 client가 되어 adc 값을 읽어 PC프로그램으로 데이터를 보내야 합니다.
이렇게 될 경우, PC 프로그램을 제작한 업체 측에 프로토콜(Communication guide)를 이용하여 그대로 코딩해서 사용하는 방법이 있습니다.

두 번째로 말하는 것은 WIZ550web을 web server로 동작하고, PC 프로그램을 client로 해서 web server인 wiz550web으로 부터 adc 데이터를 받아오는 것을 말씀하시는 것으로 보입니다.
이렇게 구현할 경우, WIZ550web은 adc 값을 읽어 web server에 업데이트를 하면서, PC 프로그램으로 데이터를 보내야 합니다.

만약, 첫 번째로 말씀하신 것이 맞다면, 굳이 Web server의 기능은 필요 없을 것으로 보입니다.
그렇다면, wiz550web 코드에서 configuration tool 전용 코드를 살펴보시고, PC 프로그램 프로토콜에 맞게 설계해주시면 됩니다.

여기서 PC 프로그램 프로토콜도 결국은 Ethernet으로 PC가 받아서 이를 PC 프로토콜로 전달해주는 것인데, 아마도 정해진 method 폼이 있을 것입니다.
그 폼을 알아야만 PC 프로그램과 통신이 가능하므로, PC 프로그램의 프로토콜 가이드가 반드시 있어야 통신이 가능합니다.

감사합니다.

감사합니다. 말씀하신대로

int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port)

loopback_udps()함수를 추가하여 해결하였습니다. ^^

수고하셨습니다 ㅎㅎ

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.