[아두이노#565] C# winform의 httplistener와 ESP32를 이용해서 다운로드받은 이미지를 전자종이에 출력하기!(E-PAPER#3)
프로그래밍/E-Paper 2023. 8. 2. 22:55https://youtube.com/live/oof5re6vUH8
[아두이노#565] C# winform의 httplistener와 ESP32를 이용해서 다운로드받은 이미지를 전자종이에 출력하기!(E-PAPER#3)
녹칸다의 E-PAPER 시리즈이다!
사용할 E-paper의 모델명은 아래와 같다!
MH-ET LIVE 2.9" E-Paper Module
아두이노월드에서 화면은 LCD에 출력한다!
LCD는 전원이 연결되어있어야하고 전원이 분리되면 화면에 있던 내용은 사라지게 된다!(당연한 것!)
그러나 아주 신기한 LCD가 있다!
바로 E-Paper이다!
E-Paper는 LCD에 뭔가 출력을 한다음 전원을 분리해도 화면이 그대로 남아있게 된다!(잔상형태로 남아있음)
그럼 아두이노에서 전자종이(e-paper)에 화면을 수정한다음 분리해도 그 LCD는 그대로 쓸 수 있게 되는 것이다!
일단 e-paper의 사용상 이득은 "저전력"구동이라고 볼 수 있다!
전원을 분리해도 쓸수있다고 하더라도, 화면에 있는 내용을 바꾸기 위해서는 아두이노와 같은 MCU가 연결은 되어있어야한다!
그렇다면 MCU는 "필요할때만 켜져서" 전자종이의 내용을 바꾸고 "필요하지 않을때는 저전력"으로 동작해야한다!
아두이노 월드에서 그러한 동작을 딥슬립(deepsleep)이라고 한다!
적절한 MCU보드를 선정해야하는데 아두이노 우노에서 구동은 가능하지만 내장 메모리가 너무 작아서 사용상의 어려움이 있다!
그래서 ESP32보드를 아두이노 IDE개발환경으로 활용하도록 한다!
ESP32보드에 전자종이(e-paper)를 연결하고 작동시키는 것이다!
EPS32보드는 딥슬립(deepsleep)모드도 지원을 하니 목표와 딱 맞을 것 같다!
이번 전자종이 시리즈는 아래와 같은 4가지 단계를 순서대로 진행해보도록 한다!
1.ESP32에 E-paper를 연결해서 화면을 업데이트 하는 방법!
2.PC에서 ESP32에 TCP로 연결해서 화면을 원격으로 업데이트 하는 방법!
3.ESP32에서 HTTP로 웹서버에 접속해서 자동으로 업데이트 하는 방법!
4.ESP32가 저전력 모드로 동작하면서 자동으로 업데이트 하는 방법!
이번편에서는 C#윈폼을 httplistener를 이용해서 웹서버로 구동시키고 ESP32를 웹클라이언트로 구동시키도록 한다!
그럼 ESP32가 C#윈폼에 접속하는 형식이 된다!
ESP32가 웹서버에 접속한다음 자기자신의 이미지를 알아서 다운로드 받아서 E-paper에 출력하는 방식이다!
이때 ESP32는 자신의 ID를 웹서버에 전송하게되고 웹서버는 ESP32에 업데이트 해야할 내용이 있으면 전송해주는 방식이다!
C#윈폼을 웹서버로 구동시키기 위한 레퍼런스 페이지는 아래와 같다!
https://learn.microsoft.com/ko-kr/dotnet/api/system.net.httplistener?view=net-7.0
그리고 녹칸다가 httplistener를 이용해서 만들어둔 선행예제가 있으므로 그것의 기본 예제를 재활용하도록 한다!
https://bota.tistory.com/1609
문제는 httplistener는 윈도우의 관리자권한이 있어야 작동되는데 녹칸다의 방송용 노트북이 약간의 문제가 있어서 불필요한 장면이 나올 수 있다!
(관리자권한으로 실행하면 화면이 멈추는 증상이 있음)
아래와 같은 순서로 접근해보도록 한다!
1.C#윈폼과 ESP32 사이에 HTTP프로토콜을 이용해서 데이터 주고받기!
2.ESP32보드 2대가 C#윈폼에 HTTP로 접속했을때 각자의 보드를 구분해보기!
3.ESP32가 C#윈폼에 접속하면 메모리에 올려진 mono bitmap 전송해서 E-paper에 출력하기!
4.ESP32가 C#윈폼에 접속했을때 업데이트 할 내용이 있다면 전송해주는 전략 구사하기!
5.ESP32가 C#윈폼에 접속했을때 사용자가 등록해놓은 이미지를 자동변환해서 전송하기!
(라이브방송에서 작성한내용)
(오늘의 접근순서)
1.C#윈폼을 웹서버로 구동시키고자 할때 사용하는게 httplistener인데 사용방법이 만만치 않으므로 과거 녹칸다가 구현했던 C#윈폼 시리즈 143편의 내용을 재활용 해서 진행하도록 한다!
2.C#윈폼과 ESP32보드가 HTTP통신을 하는 것 까지는 이미 구현이 되어있다!
3.ESP32가 C#윈폼에 접속한다음 request를 전송하면 response로 mono bitmap을 전송해서 E-paper의 내용을 수정하는 것 부터가 출발점이다!
4.1호기에 업데이트를 할것인가 말것인가? 2호기에 업데이트를 할것인가 말것인가? 업데이트를 할것이라면 업데이트할 이미지는 무엇인가?
5.녹칸다의 e-paper업데이트 시스템은 2개의 보드만 있다라고 가정한다!
6.E-paper는 초저전력으로 디스플레이를 구현하기위한 모듈이다!(상시전력이 없음을 가정==베터리로 구동된다)
7.그러나 ESP32의 제어보드가 연결됨으로 해서 소모되는 전류량이 E-paper와 관계없이 증가되었다!
8.ESP32는 저전력모드인 DeepSleep이 가능하다!
9.저전력모드로 ESP32가 작동되면 WiFi를 쓸수없다!
10.E-paper를 장착한 ESP32보드가 일정한 시간간격으로 wake-up하면서 웹서버에 접속한다음 업데이트할 사항이 있는지 체크를 해서 E-paper이 수정작업을 진행하고 완료되면 즉시 저전력모드로 변환하며 베터리를 아끼는 방향으로 작동된다!(4편에서 함)
(예제)
예제1)ESP32를 웹클라이언트로 하고 C#윈폼을 웹서버로 구동시켜서 작동테스트를 할 수 있는 예시를 보이시오!
예제2)ESP32보드 2개를 웹서버에 접속시킬때 서버에서 누가누군지를 알아낼 수 있도록 하시오!(ID개념)
예제3)ESP32가 웹서버에 접속할때 서버에 업데이트 체크가 되어있으면 업데이트를 하고 아니면 안하도록 하려면 어떻게 해야겠는가?
예제4)ESP32가 웹서버에 접속을 하면 C#윈폼의 메모리에 올라가있는 mono bitmap을 클라이언트로 전송하시오!
예제5)ESP32보드 2대에 개별적으로 이미지를 업로드 하는 최종버전을 구현하시오!