2020년 7월 21일 - 예정일 하루 전.

 

 예정일을 넘기려는지, 아내의 진통은 좀처럼 시작되지 않았다. 초조해하는 아내를 위해 남편이 할 수 있는 일은 많지 않았다. 처음부터 자연주의 출산을 준비했었기 때문에 기다리는 것 말고는 할 수 있는 일도 없었다. 진통을 부르는 민간요법이 몇 가지 있긴 했다. 항간에 떠도는 소문일 수도 있었지만.

 

하나, 파인애플.

둘, 수육.

 


2020년 7월 22일 - 예정일.

 

 평소와 다를 게 없는 하루가 시작되었다. 코스트코에서 고른 돼지 목살 한 덩이, 파인애플이 그날의 만찬이었다. 온갖 재료를 집어넣어 삶아낸 수육과 파인애플을, 아내는 그렇게도 맛있게 먹었다.

 

 

곤히 잠들어 있던 늦은 밤, 아내가 다급한 목소리로 나를 불렀다.

이슬이 비친 것 같아.

2020년 7월 23일 - 예정일이 하루 지난날.

 

 안양에는 호우주의보가 내렸다. 이른 새벽, 아내는 나를 다급하게 깨웠다.

양수가 새는 것 같아.

 

 조기 양막 파수였다. 아내는 임신 초기부터 양수만 터지지 않기를 바라고 바랐었다. 그 바람이 무색하게도 상상하고 싶지 않은 일들이 시작되고 있었다. 처음 겪어 보는 상황에 아내는 예민해져 날카로운 말을 쏟아냈다. 아내도 처음이지만 나라고 다를 것이 없었다. 침착하게 마음을 다스리며 받았던 교육 내용을 머릿속에 떠올렸다.

 

 교육을 받았던 대로 확인한 양수 색은 투명했다. 아직은 아이의 기분이 나쁘지 않다는 것. 그것만으로 한시름을 놓았다. 아내의 컨디션도 나쁘지 않아 보였다.

 

 조산사님과 통화하며 재차 상태를 확인했다. 지금부터 시간과의 싸움이었다. 오늘 안에 수축이 오지 않으면 바로 산부인과로 가야 했다. 아내는 할 수 있는 모든 것을 동원해서 조산원에서의 출산을 바랐다. 그렇게 마지막 방법을 택했다.

 

불수산 - 당귀천궁차라 불리는 수축을 돕는 차.

 

 오후부터 비가 세차게 내리기 시작했다. 불수산을 한 포 복용한 후 아내가 알 수 없는 표정으로 내게 말했다. 저녁 6시가 조금 넘은 시각이었다.

수축이 오는 것 같아.

 

 챙겨 놓은 짐들을 다시 한번 확인했다. 수축의 간격이 좁아지길 기대하며 아내의 호흡을 도왔다. 수축의 간격은 점차 줄어들고 있었고 본가와 처갓집에도 출산이 임박했음을 알렸다. 아내와 나 모두 새벽엔 아이가 나오리라는 확신에 차 있었다.

 

 짧아지고 세지는 진통에 힘겨웠는지 아내는 방으로 향했다. 조금 전까지만 해도 덥다며 거실에서 창문까지 열어두었던 아내의 반응이 심상치 않았다.

에어컨 꺼.

 

 이불까지 뒤집어쓴 아내를 보며 별다른 생각은 하지 못했다. 그저 갑자기 찾아온 진통에 몸이 힘든가 하는 생각뿐이었다.

불도 꺼줄 테니까 조금 누워 있어.

 아내도 나도 이미 며칠 동안 새벽에 잠을 제대로 이루지 못해 피로가 누적된 상황이었다. 조금 자고 일어나면 괜찮아질 거라 생각했다.

 

 언제라도 출산을 위해 출발해야 했다. 집안을 확인하고 음식물 쓰레기까지 버리고 오자 아내가 불안한 목소리로 나를 불렀다.

열 좀 재줄래?

 설마 하는 마음으로 체온계를 집어 들었다.

'37.7 , 37.9'

 머리가 멍해지는 기분이었다. 다른 방법은 생각나지 않았다. 우선 조산사님에게 전화를 걸었다. 설명을 듣고 잠시 고민하던 조산사님은 빠르게 결단을 내렸다.

일단 조산원으로 오세요.

 서둘러 침대에서 일어난 아내는 고열에 온몸과 이를 달달 떨었다. 한 겨울 찬 바람을 맞은 사람처럼. 그것도 이 한 여름에. 연애 5년 결혼 생활 2년, 도합 7년 동안 그렇게 아파하는 모습은 처음이었다. 당황했지만 내색할 수 없었다. 그것이 그 상황에 남편으로서 내가 할 수 있는 유일한 일이었다.


2020년 7월 24일 - 예정일이 이틀 지난날.

 

 자정을 넘긴 시각, 조산원. 이미 수액을 두 팩이나 맞았지만 아내의 열은 떨어지지 않았다. 진통의 간격은 더 짧아지고 있었고 고통을 이기지 못해 속까지 한 번 게워낸 상황이었다. 함께 교육을 받았던, 출산 예정일이 비슷했던. 심지어 역아라고 했었던 산모까지 무사히 출산을 하고 돌아갔다는 이야기에 아내는 더욱 고집을 부렸나 보다.

 

 열이 몇 시간째 떨어지지 않고 유지되자 조산사님은 하나의 분명한 사실을 우리 부부에게 주지시켰다. 여기서 더 지체하면 아내와 아이에게 모두 좋지 않다는 것.

지금은 병원으로 가는 게 맞아요. 아빠가 짐부터 먼저 내려요.

 단호한 조산사님의 말에 나는 분주히 움직였다. 출산 방 앞에 걸어두기 위해 아내와 함께 만들었던 문패. 출산 과정을 촬영하기 위해 챙겨 왔던 촬영 장비. 출산 후에 아이를 닦아주고 함께 돌아갈 때 입힐 배냇저고리 등 옷가지가 담긴 캐리어를 꾸렸다.

 피곤함과 반복되는 예기치 못한 상황에 나는 덜컥 겁이 났다.

그런데 구급차를 부르는 게 아니고, 제가 직접 운전해서 가야 하나요?

 조산사님은 잠시 숨을 고른 후에 입을 열었다.

같이 가주면 낫겠어요?

 두말할 것 없이 아내와 나는 고개를 끄덕였다.


 간간이 흩날리던 빗줄기는 자취를 감춘 후였다. 신생아 중환자실이 있는 순천향대 서울병원으로 향하는 그 새벽. 절대 졸면 안 된다고 속으로 나를 다그쳤다. 길을 잘못 드는 일은 상상도 할 수 없었다. 그 어느 때보다 집중해서 내비게이션의 안내에 귀를 기울였다. 비가 그친 텅 빈 도로 위를 내달리는 와중에 이젠 내 온몸이 부들부들 떨렸다. 급체라도 한 것처럼 손까지 저려 오면서.

 

 

요즘 들어 거의 하루에 한 번은 택배가 온다. 한 번 이상 오는 날도 허다하다. 코로나의 영향이 있다고는 하지만 아이가 태어난 영향이 더 큰 듯하다. 대부분의 택배는 내용물을 알았지만 이번은 달랐다.

“이게 뭐야?”

“일단 열어 보면 알아.”

 

 아내는 해맑은 얼굴로 택배 박스를 뜯는다.

“삼립호빵?”

 무언가를 산다고 하면 사지 말라고 했던 적은 없지만, 유난히 신경 쓴 포장 박스에 괜스레 의구심이 일었다. 곰곰이 지난 기억을 더듬으며 놓친 부분이 없는지 되짚었다.

‘호빵만 먹으면 되는 걸 혹시 충동구매를 한 건가?’

 

 고개를 갸우뚱하는 나를 두고 신이 나 박스를 여는 아내. 아이 때문에 정신없이 왔다 갔다 하는 사이 아내가 무엇을 들고 꺼내서 보여준다.

 

“그게 뭐야?”
“여기다가 호빵 쪄 먹는 거야. 이거 한정판인데 나 사고 품절. 대박이지?”

 

 대단한 건 알고 결혼했지만 언제 봐도 대단한 여자다. PS4 대란이 일었을 때도, 괄도네넴띤 한정판 대란이 일었을 때도, 마스크 대란이 일었을 때도 그 어려운 걸 아내는 묵묵히 해냈다. 아 그리고, 최근 닌텐도 스위치 대란에서도. 특히 이런 한정판 분야에서는 타의 추종을 불허한다.

‘삼립호빵 호찜이 굿즈 에디션’

 

 내용물은 전체 단팥 호빵 6개, 야채 호빵 3개, 피자 호빵 3개였다. 그리고 호찜이. 호빵의 맛이야 일 평생을 먹어 왔는데 궁금해할 것이 없었다. 오로지 나의 주 관심사는 호찜이였다.

 

 육아 때문에 정신없던 날이 며칠 지나고 나서야 간신히 상자를 다시 열었다. 왜 단팥 호빵과 야채 호빵이 반대로 들어 있었는지 알 수는 없지만, 오랜 경험에 의존해 야채 호빵을 찾아냈다. 이상하게 아직도 단팥 호빵에는 손이 안 간다.

 

 아는 사람은 안다. 사진을 자세히 봐도 알 수 있지만 왼쪽에 야채, 오른쪽에 단팥이 들어있다. 그리고 호찜이를 사용해 호빵을 쪄냈다. 사용법은 간단했다.

1. 아래쪽의 물통에 물을 조금 넣는다.

2. 하얀색 채반 위에 호빵을 하나 올린다.

3. 뚜껑을 닫고 전자레인지에 1분 돌린다.

 

 그렇게 데워 낸 호빵은 코흘리개 시절에 슈퍼 앞의 찜기에서 모락모락 김을 피워내던 딱 그 맛이었다.

이로서 월동 준비는 끝났다.

 

*전체 개봉기 및 실 사용기는 아래 영상에서 확인 가능하다.

https://youtu.be/ntdPI4HI6-0

 

 

 

 지난번 수유등 만들기 프로젝트에서 밝기 조절 기능을 빼서 눈부심에 시달렸던 문제가 있었다. 그래서 이번 프로젝트에서는 밝기 조절 기능을 추가했다. 밝기 조절이 가능한 애플 스타일 수유등 만들기 프로젝트는 다음의 순서로 진행했다. 개선 프로젝트이므로 기존 진행 단계에서 몇 가지 단계를 제외했다.

 

●사양 정의

●구현

●제품 디자인

●제작 및 시연

 

*지난번 수유등 만들기 프로젝트는 다음 글을 참고한다.

2020/10/16 - [BerryMixLab/Arduino Project] - 아두이노 프로젝트 - 간단한 수유등(무드등) 만들기

 

아두이노 프로젝트 - 간단한 수유등(무드등) 만들기

“이거 왜 이러지?”  아내가 물었다. 잘 쓰던 수유등에 불이 들어오지 않는다. 아내는 USB 케이블을 의심했지만 여지없이 침대에 달린 USB 포트가 나갔다. 수유등도 망가졌다. 수유등이 USB 포트

berrymixstreet.tistory.com


* Version1 : 이전 프로젝트에서 진행한 ON/OFF 기능만 있는 무드등

**Version2 : 이번 프로젝트에서 밝기 조절 기능을 추가한 무드등

 

1. 사양 정의

 

Version1에서 사용했던 사용했던 모든 부품을 재사용했다. 거기에 밝기 제어를 위한 touch 센서를 추가했다. 아래는 사용한 부품 목록이다.

 

· Arduino Uno

· WS2812B LED(원형)

· 18650 배터리(3.7V)

· USB 충방전 보드

· Switch

· Touch sensor


2. 구현

 각 센서 배선은 별도로 명시하지 않는다. 관련 내용은 다른 블로그에 상세하게 잘 설명되어 있다. 구현이 필요한 기능은 아래와 같다. 실 사용 환경이 수유등(무드등)에만 의존한 환경임을 고려했다.

 

● 4단계 밝기 조절 (수유 시에 사용자 편의에 따라 변경)

● 최소 <-> 최대 밝기 조절 (기저귀 교체 등에 빠른 변경이 필요할 경우 사용)

 

다음 코드를 참고한다.

 

/** 타이머 인터럽트로 이벤트를 처리하는 게 깔끔하지만 
어차피 touch sensor 값만 읽을 것이기 때문에 별도로 고려하지 않았다. 
*/ 
void loop() 
{ 
	buttonState = digitalRead(buttonPin); //PWM PIN에 달린 touch sensor 값을 읽는다. 
/** 
1. touch가 일정 시간 이상 지속되면 최소 <-> 최대 밝기 조절을 처리한다. 
최소 LED 1 ON 나머지 OFF 
최대 LED 8 ON 일정 시간 : 약 3초.
(최초 시간 계산에서는 시간이 더 짧았지만 코드 수정 중에 애매하게 시간이 변경되었다.) 
*/ 
	if (buttonState == HIGH) 
    { 
    	loopCnt++; 
        if(loopCnt>8) // 일정 시간 이상 touch가 지속되었을 경우 
        { 
        	switch(ledCnt) 
            { 
            	case 1: 
                	ledCnt=8; 
                break; 
                case 8: 
                	ledCnt=1; 
                break; 
                default : 
                	ledCnt=1; 
                break; 
            } 
            //LED ON 
            for(int i=0; i<ledCnt; i++) 
            { 
            	strip.setPixelColor(i, 0xf5, 0x7f, 0x17); 
                // (A,R,G,B) A번째 LED를 RGB (0~255) 만큼의 밝기로 켭니다. 
            } 
            //LED OFF 
            for(int j=ledCnt; j<8; j++) 
            { 
            	strip.setPixelColor(j, 0x00, 0x00, 0x00); 
                // (A,R,G,B) A번째 LED를 RGB (0~255) 만큼의 밝기로 켭니다. 
            } 
            strip.show(); //LED 변경 사항 반영 
            loopCnt=0; 
            delay(250); //touch 해제 후 불필요한 동작을 막기 위한 딜레이 
        } 
    } 
    /** 2. touch 동작을 해제할때 4단계 밝기 조절을 처리한다. 
    1 단계 LED 1 ON 나머지 OFF 
    2 단계 LED 3 ON 나머지 OFF 
    3 단계 LED 6 ON 나머지 OFF 
    4 단계 LED 8 ON 
    */ 
    else 
    { 
    	if(loopCnt>1 && loopCnt<=4) // 오동작을 막기 위해 일정 시간 touch가 유지되었을 경우에만 
    	{ 
    		switch(ledCnt) 
            { 
            	case 1: 
                	ledCnt=3; 
                break; 
                case 3: 
                	ledCnt=6; 
                break; 
                case 6: 
                	ledCnt=8; 
                break; 
                case 8: 
                	ledCnt=1; 
                break; 
                default : 
                	ledCnt=1; 
                break; 
            } 
            //LED ON 
            for(int i=0; i<ledCnt; i++) 
            { 
            	strip.setPixelColor(i, 0xf5, 0x7f, 0x17); 
                // (A,R,G,B) A번째 LED를 RGB (0~255) 만큼의 밝기로 켭니다. 
            } 
            //LED OFF 
            for(int j=ledCnt; j<8; j++) 
            { 
            	strip.setPixelColor(j, 0x00, 0x00, 0x00); 
                // (A,R,G,B) A번째 LED를 RGB (0~255) 만큼의 밝기로 켭니다. 
            } 
            strip.show(); //LED 변경 사항 반영 
            loopCnt=0; 
            delay(250); //touch 해제 후 불필요한 동작을 막기 위한 딜레이 
         } 
     } 
     delay(400); 
     /* touch 제어 처리를 위한 딜레이다. 
     딜레이가 없으면 불필요하게 짧은 시간 동안 touch 값을 읽는다. 
     */ 
 }

3. 제품 디자인

Version1의 기와 디자인에서 다음과 같이 디자인을 변경했다.

 하지만 사용 중에 부분 파손이 발생했고 광확산 아크릴이 빠지는 문제가 있어 디자인을 일부 변경했다. 다음은 현재 최종 디자인으로 예전 맥북의 로고를 오마주 했다.

 


4. 제작 및 시연

https://youtu.be/jF1ggOwn3ow

 

수유등을 완성한 후 아내를 불렀다.

“진짜 예쁘다. 그런데 이제 좀 쓸만하다.”

이제 좀?


 

Trouble shooting

밝기 1단계에서 불규칙한 주기로 LED가 깜빡인다.

▶ LED가 깜박일 때 USB 충방전 보드의 전원 LED가 깜박이는 것으로 보아 배터리 전원 계통의 문제로 생각된다.

▶ 정확한 이유는 알 수 없지만 밝기 2단계 이후로는 정상 동작하므로 개선할 계획은 없다.

 

 

 육아에 눈코 뜰 새 없이 바쁜 나날이 이어지던 어느 날 아내가 말했다.

 

“3D 프린터로 휴지통 하나 뽑아줄 수 있어? 작은 거면 되는데. 옆에 두고 아기 면봉이나 이런 거 버리게. 오래 걸리면 하지 말고.”
“금방 해줄게.”

 

 인생사 모든 방면에서 그놈의 금방은 한 번도 금방인 적이 없다. 며칠을 미루다가 구글에서 쓸만한 디자인을 찾아보았다. 최근 깨달은 사실이지만 어차피 판매 목적이 아니고 우리 집에서만 쓸 것이기 때문에 무슨 디자인을 도용하든 상관이 없다는 것.

 

 애플 로고를 어디다 하나 넣을까 생각했지만 휴지통 하나 뽑는데 그런 정성을 쏟을 생각은 없었다. 그러다 오픈형의 작은 휴지통을 하나 발견했고 그것보다 더 작은 사이즈로 드로잉을 시작하기 위해 컴퓨터 앞에 앉았다. 드로잉을 시작하기 전 아내가 잠시 방에 들러 한마디를 던지고 간다.

 

“하얀색으로 하는데 빨간색으로 포인트 주면 좋겠다. 우리 빨간색도 있으니까.”

 

언제나 잊지 말아야 한다. 발주처의 요구 사항은 늘 명확하게 문서로 상세하게 받아두어야 한다.


출력하기 위해 사용한 프로그램 및 3D 프린터의 정보는 아래와 같다.

· 드로잉 : Autodesk Fusion 360

· 슬라이싱 : Ultimaker Cura 4.6.1

· 출력 : Ender 5-plus

 

작고 귀여운 뚜껑 없는 형태의 휴지통을 위아래 분리한 디자인으로 드로잉 했다.

 

Cura를 통해 슬라이싱 한 다음.

출력을 시작했다. 출력은 대략 위아래 전체 9시간 정도 걸린 것 같다.

 1mm 오차로 결합이 안 되는 것을 부수기 직전까지 힘을 줘서 간신히 끼워 넣었다. 1mm 오차 때문에 몇 시간을 기다려 다시 뽑고 싶지 않았다. 조립을 마친 뒤 아내에게 진상하자 아내가 흡족한 표정으로 말한다.

 

"정말 귀엽다. 역시 빨간색으로 포인트 주길 잘했지?”

 

실제 사용 중인 모습이다.
침대 머리맡에 놓아도 잘 어울린다.
주전부리 모음 옆에 두어도 좋다.
PC 앞에 두어도 위화감 없다.
아이폰 11Pro Max도 쏙 들어간다.
주방에 두면 더 귀엽다.
귀여운 철제 케이스도 쏙 들어간다.

 

 

 이 글에서는 Arduino ESP32를 활용한 GPS Logger 개발에 따른 모든 과정을 기술한다. 개인적인 기록을 위해 남기는 목적도 있으므로 튜토리얼이라 하기엔 내용상 다소 부족한 부분이 있을 수 있다. 순서는 다음을 따른다.

 

*GPS Logger 만들기에 대한 내용은 다음 글을 참고한다.

2020/10/20 - [BerryMixLab/Arduino Project] - 아두이노 프로젝트 - GPS Logger 만들기

 

아두이노 프로젝트 - GPS Logger 만들기

세상을 바꾼 아이디어들은 형태에 변형에 따라 다양한 모습으로 진화해왔다. 기존에 있는 것들에 새로운 기능을 추가하거나 아니면 빼거나. 그것도 아니라면 완전하게 다른 시각에서 접근하기�

berrymixstreet.tistory.com


튜토리얼 목차

구분

설명

비고(튜토리얼 진행에 따른 준비물)

1

개발 준비

ESP32 WROOM 32D, USB cable

2

Hello world (Serial 통신)

3

TFT LCD 모듈 연결

ILI9341 TFT LCD 모듈(SD 카드 인터페이스 포함),

소켓 점퍼 케이블

4

TFT LCD touch 확인

5

GPS 모듈 연결

GPS : GY-NEO6MV2, 인두기 등 납땜 용품.

6

TFT LCD에 GPS 데이터 출력하기

7

SD card 인식

SD card(가능하면 저렴한)

8

SD card에 GPS 데이터 저장하기

부록

*

GIF 출력

**

JPG 출력

***

Dual core 프로그래밍

 


1. 개발 환경

 개발 환경은 다음과 같다. 다른 개발 환경에 대한 정보는 다른 블로그를 참고하여 진행하도록 한다.

PC : MAC Book Pro

IDE : Arduino Sketch


2. 개발 준비

 다음에 순서에 따라 개발 준비를 하고 예제까지 확인해 보는 것으로 개발 준비는 마무리된다. 모든 과정은 MAC을 기준으로 작성한다.

 

a. IDE 다운로드

먼저 Arduino 공식 홈페이지에서 Sketch IDE 다운로드한다. 별도의 설치 과정은 없다.

 

http://www.arduino.cc

 

Arduino - Home

 

www.arduino.cc

위 링크를 통해 사이트에 접속하면 다음과 같은 화면이 표시된다. Mac OS X 용 IDE를 선택한다.

 

기부를 받는다. 여기서는 다운로드만 한다. 여유가 있다면 기부를 해보는 것도 좋은 경험일 것 같다.

 

다운로드가 완료되면 Finder를 열어본다.

 

압축 파일을 더블 클릭한다.

 

다음과 같이 자동으로 압축이 해제된다. 이걸로 IDE 준비 과정은 끝이다. 이 파일을 그대로 실행하면 된다.

 실행 파일의 위치는 어디가 되어도 상관없으나 프로젝트 관리를 위해 기억하기 용이한 곳에 별도로 복사하면 좋다. 이 글에서는 별도 위치에 파일을 복사한 후 진행한다.

임의 폴더를 만들어 따로 실행 파일만 복사해두었다.

 

실행 파일을 우 클릭한 다음에 가상본 만들기를 선택한다.

 

바로 가기 파일명은 적당히 고른다.

 

생성한 바로 가기 파일을 바탕화면에 복사했다. 이로써 Arduino IDE를 실행할 때마다 실행 파일을 찾아 헤매지 않아도 된다.

 이제 Arduino IDE 실행을 위한 준비는 끝났다. 실행 파일 또는 바로 가기 파일을 실행해보자.

맥 보안 설정에 따라 실행이 되지 않을 수도 있지만 그런 문제는 없었다. 열기를 눌러 실행한다.

 

지금까지 아무 문제가 없다면 다음과 같은 아두이노 스케치 창이 표시된다.


b. ESP32 보드 등록

 아두이노 공식 보드가 아닌 경우에 보드 사용을 위해 해당 라이브러리를 추가해야 한다.

Arduino IDE를 실행한 후 좌측 상단에서 Arduino > Preferences를 선택한다.

 

그림과 같이 추가 URL을 입력한다. 아래 내용을 참고한다.

 

Arduino > Preferences > 추가적인 보드 매니저 URLs에 다음 내용을 추가한다.
https://dl.espressif.com/dl/package_esp32_index.json

 

입력을 마친 후 툴 > 보드 > 보드 매니저를 선택한다.

 

보드 검색 창에 'esp32'를 입력하면 위와 같이 보드가 검색되어야 한다.

 

설치를 눌러 esp32 라이브러리 설치를 진행한다. 인터넷 연결 상태에 따라 시간이 소요될 수 있다.

 

설치가 완료되면 위와 같은 화면이 표시된다.

 ESP32 라이브러리 설치를 마친 후 보드를 변경해야 한다.

그림과 같이 툴 > 보드 > ESP32 Arduino > ESP32 Dev Module을 선택한다.

 

여기까지 아무런 문제 없다면 보드 설정이 정상적으로 완료된 것이다.


 

c. 예제 동작

 이제 예제를 동작시켜 볼 차례다. 먼저 ESP32 보드를 USB cable로 MAC과 연결한다.

맥북 프로에서는 USB C 포트만 지원하므로 별도의 젠더가 필요하다. 다이소에서 산 USB C 젠더를 사용했다.

그다음 코드 Write 및 Serial 통신을 위해 usb serial port를 선택해야 한다.

툴 > 포트에서 연결된 ESP32를 선택한다. 위와 같이 연결된 시리얼 포트가 표시되지 않으면 연결을 다시 확인한다.

 시리얼 포트 선택까지 정상적으로 완료했다면 예제를 열어볼 차례이다. ESP32 보드에 달린 LED를 간단하게 제어해 보도록 한다.

파일 > 예제 > 01.Basics > Blink를 선택한다.

 

예제를 선택하면 다음과 같은 스케치 창이 열린다.

 

Upload 버튼(좌측 상단의 오른쪽 화살표 버튼)을 클릭하면 컴파일 후 자동으로 펌웨어 업로드가 시작된다. 우선 Upload 버튼을 클릭해보자

다음과 같이 에러 메시지를 출력한다. LED_BUILTIN의 정의가 없다고 한다.

NOTE : LED가 연결된 GPIO 번호 확인이 필요하다. 아래 링크에서 해당 정보를 확인하도록 한다. ESP32의 하드웨어 정보가 상세하게 잘 정리되어 있다.

 

http://circuits4you.com

 

Circuits4you.com | Arduino interfacing, circuits tutorials with code and ebooks, Step by step guides for all sensor modules used

Become super hero of Internet of Things world. Get best seller in IoT design books. Also Available in both Paper Back and Kindle e-Book on Amazon…

circuits4you.com

 위 링크에서 확인한 결과 LED가 연결된 GPIO는 2번이다. 다음의 코드를 그림을 참고하여 추가하도록 한다.

 

#define LED_BUILTIN 2

 

 

그림의 코드 위치를 참고한다.

 이제 Upload 버튼을 클릭하면 정상적으로 컴파일이 진행된다. Write 단계로 진행하기 전에 보드의 BOOT 버튼을 누르고 있어야 한다.

Note : 여느 Arduino와 다르게 write 가 시작될 때 BOOT 버튼을 누르고 있어야 정상적으로 write가 진행된다.

코드 Write가 정상적으로 진행되면 위와 같은 메시지가 표시된다.

 

이제 코드 Write가 완료되었다.

 코드 write 완료 후 바로 LED가 깜빡이지 않을 것이다. 보드의 EN 버튼을 눌러 동작을 확인해보자.LED가 정상적으로 깜박인다면 코드와 보드, 모두 정상적으로 동작하는 것이다. 다음 내용은 정리되는 대로 업로드할 예정이다.

 

youtu.be/1YAUwxI7ipM

 

 

세상을 바꾼 아이디어들은 형태에 변형에 따라 다양한 모습으로 진화해왔다. 기존에 있는 것들에 새로운 기능을 추가하거나 아니면 빼거나. 그것도 아니라면 완전하게 다른 시각에서 접근하기도 했다. 이 모든 것은 작은 시도에서 출발한다. 이 작은 출발도 그러하기를 바라본다. 프로젝트는 다음의 순서에 따라 진행했다.

*전통적인 프로젝트 진행 방식과는 다를 수 있다.

 

●제품컨셉구상

●사양 정의

●구현

●제품 디자인

●제작 및 시연


1. 제품 컨셉 구상

 

 지난번 프로젝트에서 기능을 축소해 시간만 표시하는 작은 인테리어 소품을 고민했다. 가장 중요한 점은 시간 설정 및 유지에 불편함이 없어야 한다는 점. 이를 기술적으로 해결하기 위한 방법은 있다.

하나, GPS 모듈을 통해 GPS의 시간을 받아 온다.
둘, 네트워크를 통해 타임 서버에서 시간을 받아 온다.
셋, 직접 시간을 입력하고 RTC(Real Time Clock)으로 시간을 유지한다.

 이중 가장 간편한 방법은 GPS 모듈을 통해 GPS의 시간을 받아 오는 것이다. 하지만 이 프로젝트의 이름이 GPS Clock이 아닌 이유는 ‘사양 정의’ 부분에서 자세하게 설명한다. 이 프로젝트의 정확한 이름은 다음과 같다.

GPS Logger

 


 

2. 사양 정의

 

 인터페이스를 결정하기에 앞서 GPS 모듈에 대한 사전 시험을 진행했다. 그리고 당황을 금치 못했다. 처음 써보는 부품이니 당연한 일이었다.

‘실내에서는 GPS 신호가 도달하기 어렵다.’

 어차피 손에 들어온 GPS 모듈이었다. 이참에 제대로 해보자는 생각이 들었다. 스마트 워치가 제공하는 운동 기능을 모방한 형태의 제품을 만들어 보면 좋겠다고 생각했다. 이미 이전 프로젝트를 진행하면서 보유한 부품을 최대한 활용하기로 했다. 사양은 다음과 같다.

 

·하드웨어

MCU : ESP32 (WiFi, Bluetooth 내장)

공식 홈페이지

LCD : TFT LCD 2.4인치 (SD card 인터페이스 포함)

ILI 9341

GPS : GY-NEO6MV2

Power : 3.7V 배터리(18650) * 2EA

ESP32 동작 전압을 확인하지 않고 구매했다가 추가 구매하여 용량이 다르다. 추가 구매 시에도 확인을 못해서 참사가 벌어졌다.

 

 Weather clock에서 지원해야 하는 기능은 다음과 같다.

 

구분

설명

·필수 기능

GPS 모듈 통신

GPS 시간 및 정보 화면 출력(JPG 이미지 출력)

GPS 데이터 기록을 위한 화면 터치 제어

GPS 데이터 저장을 위한 SD 카드 제어

··부가 기능

서버 통신 중 로고 띄우기(GIF 이미지 출력)


 

3. 구현

 

 구현 내용은 추후 각 단계별로 상세하게 정리해서 올릴 예정이다. 실제 구현은 라이브러리 내에서 제공하는 모든 예제를 활용했다. 사용한 라이브러리만 기능 별로 간단하게 정리한다.


·필수 기능

 

ㄱ. GPS 모듈 통신 : Tiny GPS

 GPS 통신은 모듈의 칩에서 자동으로 해준다. ESP32에서 할 일은 시리얼 통신으로 데이터를 받아오는 것이다. 데이터 파싱도 제공하는 라이브러리에서 자동으로 해준다.

 

ㄴ. GPS 시간 및 정보 화면 출력(JPG 이미지 출력) : TFT_eSPI

 JPG 출력은 예제만으로 문제없다. 다만 화면 구성 및 이미지 버튼 처리가 조금 성가셨다. 프로젝트 진행 중에 아두이노에 적용 가능한 GUI 라이브러리가 있는 것을 확인했다. 추후 다른 프로젝트 진행 시에 적용해볼까 한다.

 

ㄷ. GPS 데이터 기록을 위한 화면 터치 제어 : Adafruit TouchScreen

 이 부분이 조금 성가시다. 구글의 도움을 받아 터치 동작까지는 확인했으나 Arduino Uno(아두이노 우노)에서 동작과 다르다. 핀맵에도 문제가 없었다. 며칠을 헤매고 나서야 원인을 찾을 수 있었다.

ADC 해상도

Arduino Uno ADC 해상도 : 10bit(0 ~ 1023)
ESP32 ADC 해상도 : 12bit(0 ~ 4095)

 

*여기서 기술적인 이야기를 잠시 짚고 넘어가 보자.

 

/** 
감압식 터치 값은 각 ADC 핀을 통한 전압 차로 확인한다. 
LCD에 공급되는 3.3V를 기준으로 변환된 디지털 값을 map 함수를 통해 실제 좌표 값으로 변환하게 된다. 
그렇다. Arduino Uno 나 ESP32 나 LCD에 공급되는 3.3V 값은 달라지지 않기 때문에 
0 ~ 1023의 디지털 값이 발생하게 된다. 
ESP32는 0 ~ 4095 영역의 공간 중 0 ~ 1023 공간만 사용하게 되는 것이다. 

해결할 수 있는 방법은 하나다. 
ESP32 ADC 해상도를 제한하는 것. 
친절하게도 기본으로 제공되는 간단한 함수로 해결이 가능하다. 

*/ 

analogReadResolution(10); // ADC 해상도 범위를 10bit로 설정.

 

ㄹ. GPS 데이터 저장을 위한 SD 카드 제어 : ESP32 Dev Module 예제.

ESP32에서 SD카드를 사용하려면 FAT32로 포맷해야 한다. SD 인식 및 제어는 예제를 활용하면 어렵지 않다.

 

··부가 기능.

ㄱ. 서버 통신 중 로고 띄우기(GIF 이미지 출력) : AnimatedGIFs_SD_Master

별도의 변경 없이 지난번 프로젝트에 적용한 부분을 그대로 적용했다.

 

* GIF 이미지 출력에 대한 이야기는 아래 Weather clock 만들기 참고.

2020/09/17 - [BerryMixLab/Arduino Project] - 아두이노 프로젝트 - Weather clock 만들기

 

아두이노 프로젝트 - Weather clock 만들기

 바야흐로 아두이노 세상에 살고 있다. 초등생, 혹은 유치원생부터 청장년층에 이르기까지 코딩 좀 한다 하면 아두이노의 경험이 있다. 예외도 있지만, 이렇게 많은 사람들의 관심과 노력 속에

berrymixstreet.tistory.com


 

4. 제품 디자인

 Fusion 360을 사용하여 제품을 디자인했다. 별도로 참고한 디자인은 없으며 크기를 최소화하는데 집중했다. 쓸 데 없이 큰 배터리를 구매한 덕분에 케이스 크기가 커진 감이 있다. 달려있는 커넥터만 변경했어도 더 줄일 수 있었을 텐데.

 출력은 보유 중인 유일한 3D 프린터인 Ender 5 Plus를 사용했다.

 

 

 

 

5. 제작 및 시연

https://youtu.be/7X0HEIJEBuk

완성 후 아내를 불러 GPS Logger의 기능을 설명하며 자세히 보여주었다.

“빨간색에 뒤에 검은색 버튼 달려 있으니까 코카콜라 굿즈 같다.
그런데 무슨 말인지는 하나도 모르겠다.”


▶ Trouble shooting.

1. 실내에서 GPS 신호가 잡히지 않는다.

 저층이나 개방된 공간이라면 상황이 달랐겠지만 이와 같은 이유로 테스트에 어려움을 겪었다. 중간중간 마스크를 착용하고 밖으로 나가는 것 말고는 다른 방법이 없었다.

2. GPS Logger 동작 중 jpg 이미지가 깨진다.

 아직까지 이유는 확인하지 못했다. draw string 등 함수가 반복해서 동작할 때 jpg로 그려놓은 메모리 영역을 일부 침범하는 게 아닐까 한다.

 

“이거 왜 이러지?”

 아내가 물었다. 잘 쓰던 수유등에 불이 들어오지 않는다. 아내는 USB 케이블을 의심했지만 여지없이 침대에 달린 USB 포트가 나갔다. 수유등도 망가졌다. 수유등이 USB 포트를 잡아먹으며 같이 죽은 모양이다. 그래서 시작했다. 아두이노를 활용한 간단한 수유등(무드등) 만들기 프로젝트는 다음의 순서로 진행했다.

 

●제품 컨셉 구상

●사양 정의

●구현

●제품 디자인

●조립 및 시연


1. 제품 컨셉 구상

 

불만 들어오면 됐다. 다른 것은 고민할 게 없었다. 놀고 있는 Arduino Uno(아두이노 우노)가 최선의 선택지였다. 최대한 빠른 시간 내에 불편함을 해소해야 했다. 그냥 하나 사자는 말이 나오기 전에 말이다.


2. 사양 정의

 

기존에 쓰던 수유등의 기능을 그대로 제공해야 했다.

· USB 충전

· 편리한 전원 ON/OFF

· 밝기 제어.

 

이 중에 밝기 제어 기능은 제외했다. 크게 필요 없을 것 같다는 것이 그 이유였다. 아래는 사용한 부품 목록이다.

 

· Arduino Uno

· WS2812B LED(원형)

· 18650 배터리(3.7V)

· USB 충방전 보드

· Switch


3. 구현

 

 구현이랄 게 없다. 전원이 인가되면 LED를 전부 켜면 그걸로 끝이다. 코드랄 것도 없다. RGB 값은 구글링으로 기존 불빛과 가장 비슷한 색을 찾아 넣었다.

#include <Adafruit_NeoPixel.h>    

#define PIN 6                     // PWM 디지털핀
#define LEDNUM 8                  // 연결된 네오픽셀의 개수
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDNUM, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();                           
}

void loop() {                              
  strip.setPixelColor(0, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(1, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(2, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(3, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(4, 0xf5, 0x7f, 0x17);     
  strip.setPixelColor(5, 0xf5, 0x7f, 0x17);   
  strip.setPixelColor(6, 0xf5, 0x7f, 0x17);   
  strip.setPixelColor(7, 0xf5, 0x7f, 0x17);

  strip.show();  
  delay(1000);  // 이 부분에 delay가 없으면 눈이 아플 수 있다.
/*  
어차피 LED 점등만 시킬 것이라서 setup부분에서 동작 시켰어야 했다는 후회가 밀려온다.
쓸데 없이 LED 설정을 반복할 필요는 없었는데.
하지만 아무렴 어떠한가?
불만 들어오면 되는데!
*/
}

 


4. 제품 디자인

 최대한 간단하며 반복 사용에도 모든 부품이 제자리에 있어야 했다. 제작 중에 수정을 가하긴 했지만 일부분 개선이 필요해 보인다.

 

 

5. 제작 및 시연

https://youtu.be/H8alClHi6RY

 

수유등을 완성한 후 아내를 불렀다. 그리고 '기와지붕 같다.'라는 답변을 기대하며 동작하는 모습을 보여주었다.

“오, 괜찮네. 근데 바람개비 같다.”

그래도 괜찮다는 말은 기분이 좋다.


Trouble shooting

밝기 조절 기능을 뺀 관계로 아내와 아이 모두 눈부심에 시달렸다.

▶ 안경 닦이를 덮어두어 임시 조치를 취했다.

▶ Version2에서 해결할 예정.

 

 

 바야흐로 아두이노 세상에 살고 있다. 초등생, 혹은 유치원생부터 청장년층에 이르기까지 코딩 좀 한다 하면 아두이노의 경험이 있다. 예외도 있지만, 이렇게 많은 사람들의 관심과 노력 속에 아두이노도 많은 발전을 거듭했다. 이제는 보드 하나면 WiFi, Bluetooth까지 연결이 가능하니 말이다. 이 프로젝트는 다음의 순서에 따라 진행했다.

*전통적인 프로젝트 진행 방식과는 다를 수 있다.

 

●제품 컨셉 구상

●사양 정의

●구현

●제품 디자인

●제작 및 시연


1. 제품 컨셉 구상

 

 책상에 올려둘 수 있는 아기자기한 인테리어 소품이 뭐가 있을까 며칠을 고민했다. 이런저런 아이디어들을 고민하다가 다다른 곳은 날씨와 시계였다. 날씨와 시간은 하루에 한 번씩은 들여다보게 되어 있으므로. 그래서 정한 프로젝트의 이름은 다음과 같다.

Weather clock

 


2. 사양 정의

보드는 정했으나 어떤 인터페이스를 제공할지가 문제였다. 모든 센서를 적용하고 포털 사이트나 스마트폰 어플 정도의 기능을 지원하면 좋다고 생각했다. 하지만 부품 비용을 최소화하고 기간을 단축하는 것에 집중했다. 사양은 다음과 같다.

 

·하드웨어

MCU : ESP32 (WiFi, Bluetooth 내장)

공식 홈페이지

LCD : TFT LCD 2.4인치 (SD card 인터페이스 포함)

중국산이라 공식 홈페이지를 찾기 어렵다.


Weather clock에서 지원해야 하는 기능은 다음과 같다.

구분

설명

·필수 기능

시간 서버 동기화

기상청 RSS 받아오기

날씨와 시간 화면 출력 (JPG 이미지 출력)

··부가 기능

서버 통신 중 로고 띄우기(GIF 이미지 출력)

 


3. 구현

실제 구현 내용을 별도로 기록하지 않는 이유는 다음과 같다.

첫째, 구현 내용이 광범위하다.

둘째, 기억이 나지 않는다.

다른 블로그에서 참조해서 진행한 내용이 대부분이며 상세하게 잘 기록되어 있으니 그 부분을 참고하는 편이 좋다.


·필수 기능

ㄱ. 시간 서버 동기화

비교적 간단하다. WiFi 연결 후 time.bora.net등 익히 알고 있는 시간 서버에 연결해 time 구조체에 시간을 받아와 그대로 출력한다. 시간 출력하는 예제를 조금만 응용하면 된다.

 

ㄴ. 기상청 RSS 받아오기

3시간 단위 기상 예보만 받아올 수 있다. 욕심을 내서 구글이나 다른 곳에 있는 기상 정보로 실시간 날씨 정보를 표출하고 싶었지만 꾹 참았다. 애초에 실시간 기상 정보를 띄우기로 기획한 것은 아니었기 때문에. 추후에 기회가 된다면 진행해 볼 수도 있다.

 

ㄷ. 날씨와 시간 화면 출력(JPG 이미지 출력)

이제 받아온 시간과 날씨를 표출할 차례다. 날씨 이미지 표출은 SD card jpg 출력 예제를 활용했다. 앞서 언급한 시간 출력 예제를 함께 활용하면 큰 문제는 없다.

 

··부가 기능

ㄱ. 서버 통신 중 로고 띄우기(GIF 이미지 출력)

프로젝트 진행 중 가장 큰 문제에 봉착했다. 서버와 통신해서 받아온 데이터를 표출하기 전까지 검은 화면만 보여주게 생긴 것이다. 사전에 파악한 정보를 다시 되짚어 보았다. 눈에 띄는 정보 하나가 있었다.

Dual core

ESP32, 이건 정말 물건이다 싶었다. 바로 펌웨어 구조 수정에 들어갔다. 한쪽 코어로는 서버 통신 중에 로딩 이미지를 띄우고 다른 코어로는 서버 통신을 담당하도록 지정했다.


4. 제품 디자인

어떤 디자인을 할까 크게 고민하지 않았다. 구관이 명관이다. 존경해 마지않는 디자인, 애플의 초기 매킨토시를 참고했다.

디자인도 디자인이지만 케이스 제작이 문제였다. 무드 등을 만드는 프로젝트에서 방망이 깎는 노인처럼 했던 톱질. 그 고생을 또다시 할 수 없었다.

*톱질에 대한 이야기는 아래 DIY 아두이노 무드 등 만들기 참고.

2020/05/11 - [주전부리 레시피/berryMixLab] - DIY 아두이노 무드등 만들기

 

DIY 아두이노 무드등 만들기

나 때는 말이야.  이 글은 이렇게 시작한다. 처음 직장 생활을 시작했을 때, 스마트폰의 물결이 시작되고 있었다. 옴니아가 아이폰의 대항마로 등장했을 즈음 말이다. 그때만 해도 개발 보드 같�

berrymixstreet.tistory.com

그래서 샀다. 3D 프린터. 가성비를 최우선으로 고려했다.

Ender 5 Plus

제대로 된 물건을 출력할 때까지 애 많이 먹었다.


5. 제작 및 시연

https://youtu.be/HxMA5mHx_1g

 

완성 후 아내를 불러 동작하는 모습을 보여주었다. 그 당시에도 반응은 나쁘지 않았는데 한참이 지나 나를 다시 부른다.

“그거 부품 한 세트 밖에 없지?”

“왜?”

“있으면 하나 더 만들어서 친구 하나 줄까 했지.”

 

▶ Trouble shooting.

1. ESP32의 프로그램 업로드가 되지 않았다.

다른 호환 보드들도 이런 문제가 있는지 모르겠지만 프로그램 업로드 시 프로그램 Write 진행률이 표시될 때까지 Boot 스위치를 누르고 있어야 한다.

2. 아두이노 라이브러리로 추가한 예제로 LCD가 동작하지 않았다.

중국산이라 그런지 LCD IC의 chip 아이디가 읽히지 않아 한참 애먹었다. 예제에서 chip ID를 하나하나 선택해보면 언젠가는 동작한다.

3. ESP32와 LCD를 연결하는 핀맵 정보가 부족하다.

구글링으로 간신히 찾은 자료를 참고하여 LCD 연결에 성공했다. 판매되고 있는 TFT 2.4인치 LCD의 종류가 참 다양하다.

4. 배송사고

첫 택배는 분실됐다. 어떤 이의 손아귀에 들어갔는지 알 수는 없다. 그것도 아니라면 고물상에. 분실 보상은 받았으니 나쁠 것은 없다.

 

+ Recent posts