IoT 기술을 포함하여, ESP8266, ESP32와 관련된 개인 연구를 기록하는 블로그입니다. 또한 케이스 제작을 위하여 포맥스 및 목재 가공과 관련된 일부 목공의 팁을 소개합니다. 가끔은 생활에 도움이 될만한 팁을 소개하기도 합니다.
2025년 3월 20일 목요일
ESP8266 Digital Input Pin의 불편한 진실
2023년 1월 29일 일요일
18650 배터리 내부저항을 ESP8266으로 측정하자
1. 인간은 끊임없이 편의성을 추구하는 동물
18650배터리의 내부저항을 수동으로 측정을 하였지만, 한두번 정도는 할 수 있어도 수십번 하려니 고충이었다. 무엇인가 편리함을 추구하기 위하여 다시금 머리를 굴렸다. 18650 배터리의 내부저항을 측정하기 위해서는 전압 측정이 필수이다. 이전에 ESP8266으로 20V 전압을 측정하는 방법에 대하여 글을 적었지만 이번에는 4.2V를 위하여 다시금 정리한다.
2. ESP8266 의 ADC (Analog to Digital Converter) Pin
ESP8266에는 A0라는 단 한개의 ADC Pin이 존재한다.
(두개 이상의 ADC Pin이 필요하다면 ESP32를 사용하면 된다. 일전에 내 블로그에 소개한 3채널 오실로스코프가 ESP32를 사용하였다)
ESP8266의 A0 Pin은 최대 1V를 입력받도록 설계되어 있다. 물론 나는 ESP8266 그대로 사용하는 것이 아니라 Wemos D1 mini 의 제품으로 사용한다. 제조사의 홈페이지에는 아래와 같이 핀 설명을 하고 있다.
A0 Pin의 정밀도는 10bits 이며 전압을 인가하고 값을 읽으면 0V 일때 0, 분압이 없는 상태에서 1.0V 일때 1024의 값이 나온다고 할 수 있다. 다만 위의 분압 공식으로 유추해 보면 대략 3.25V부터 1024값이 나온다. 실제로 측정해보니 0V일때 20, 3.06V 부터 1024의 값이 나왔다. 이는 사용된 220K와 100K의 저항값의 오차에서 발생할 수도 있고, 측정핀에 존재하는 저항이 있을 수도 있다. 다양한 원인에 근거하지만 핵심은 3.3V 이전에 1024값이 나온다는 것이다. 3.06V는 내가 사용한 모듈에서만 그런 것이며, 제품별로 결과가 다를 수 있다. 같은 제품이더라도 모듈에 따라서 다를 수 있다. 핵심은 Wemos D1 mini의 A0 Pin으로 3V 이상 측정하려고 한다면 분압을 해야 한다는 것이다.
3. 18650 배터리 전압
일전에 소개한 글에서 배터리의 내부저항을 측정하기 위해서는 전압 측정이 필요하다고 했다. 18650 배터리의 만충전압은 4.2V가 대부분 이지만 4.35V도 있다. 이에 따라 4.35V 입력시 A0 Pin에 들어가는 전압이 최대 3.25V가 되도록 분압해야 한다.
위와 같이 전압을 배분하면 배터리의 전압이 4.35V 일때4.35V X 220 / (100 + 220) = 2.990V 의 전압이 A0에 입력된다. 사실 오른쪽 저항값이 전체 저항값의 약 75%만 차지하게 설계하면 문제없다. 보유한 저항이 있다는 가정하에 25K + 75K로 구성하면 된다는 이야기 이다. (물론 50K + 150K도 마찬가지 이다.) 사실 저항을 병렬, 직렬 해서 구성하면 저항값을 못 맞출 것도 없기는 하다. 보유한 저항에 맞춰서 구성하자.
일단 100K, 220K로 구성하는 경우
만약 A0에서 읽은 값이 512 라고 하면 2.4024V라는 값이 수학적으로 계산이된다. 다만 저항의 정확도 및 배선 사이에서 생기는 저항을 고려한다면 한번쯤은 실측해서 보정을 해주는 것이 좋다.
다만 아무리 계산을 열심히 해 놓아도 현실적으로 보유한 저항을 적당히 쓰기 위해서는 결국 100K 저항 3개, 43K 저항 1개를 사용하여 100K + 243K의 형태로 구성하였다.
| [ 요렇게 준비했다 ] |
위에서 적은 공식을 다시 적으면
납땜해서 실측한 값과 계산된 값을 비교해 보니 아래와 같았다.
전압이 올라갈수록 실제 값과 차이가 커지는 것으로 보아 위의 공식에서 계산한 상수가 문제이다.
엑셀의 힘을 이용하여 새로운 계산식을 도출했다. 추세선이라는 기능을 이용하면 편리하다. 아래의 그림에서 파란색 선은 실제 측정한값, 검정색은 추세선인데 거의 동일하게 위치해서 두개를 분리하여 보기란 힘들다. (즉 추세선이 잘 만들어 졌다.) 일반적으로 ADC 값은 전압에 따라서 선형 그래프를 보인다.
V = (A0에서 읽은 값) X 0.0052 - 0.0832
손으로 약간의 보정을 해서 아래의 수식으로 마무리했다.
V = (A0에서 읽은 값) X 0.00522 - 0.0771
저항값으로 계산한 수식과 엑셀 추세선의 차이는 기울기가 좀 더 커졌고, Y 절편이 생겼다.
4. 회로도 및 구현 내용
무척 간단해서 약 20포인트 납땜이 필요한 회로이다.
| [ 4개 병렬 MOSFET ] |
"이렇게 계산한 내부 저항값은 참조용이며, 정확한 계산이라고 할 수 없다. "
5. 소스코드
2021년 1월 5일 화요일
원격 모니터링 : 12V 듀얼 전원 공급장치 만들기 - ver 1.0
1. 모니터링의 시작
시골에 노모께서 홀로 계신다. 덥지는 않으신지, 춥지는 않으신지 늘 걱정이다. 그래서 어머니께서 주거하시는 안방의 온습도 정보를 모으기 시작했다. 대단한 것은 아니였고 ESP8266 계열의 D1 mini 와 AM2302 온도 센서를 달아서 만들었다.
![]() |
| 가장 초창기 모델 |
위의 사진은 내가 ESP8266을 공부하면서 가장 처음으로 만든 모델이다. 지금 보면 구성 자체가 어설프고, 납땜도 어설프고, 심지어 전선의 배색도 어설프다. VCC와 GND 색상이 동일하다니.. 대체 무슨 생각으로 전선 색상을 고른것인지.... 그나마 요즘은 전선 색상은 구별해서 사용하려고 노력한다. 가능한 GND는 검정 (또는 파랑) 을 사용하려 하고, 3.3V는 주황, 5V는 빨강, 12V는 노랑 색상의 전선을 사용하려고 노력중이다. 위에 사진에 표시된 1차 버전은 얼마나 어설펐는지 ESP8266의 DeepSleep을 위해서 필요한 전선 연결이 나중에 떨어졌다. 설치해서 가만히 두는 것이었는데 ㅠㅠ
단순히 온습도를 로깅하고 있지만, 어머니의 행동 패턴과 연계하여 고려하면 어머니의 취침시간과 기상 시간을 알게 되었다. 이제 어머니가 일어 나셨구나... 라는 것을 알게 되었다.
2. 모니터링의 확장
온습도를 기반으로 하여 어느 정도의 내용을 짐작하게 되었지만, 이것은 정말 정확한 정보가 아니였다. 카메라 장치가 더더욱 필요하게 되었다. 내 의견은 어머니가 주거 하시는 방에 카메라 장치를 설치하자는 것이었지만, 큰 형님의 "어머니 사생활을 존중하자" 라는 의견에 감명을 받아 외부에 설치를 고려하게 되었다.
그리하여 IP Camera를 설치하게 되었다.
3. 다 좋은데 뭐가 문제?
4. 그래서 듀얼
![]() |
전면부 구멍은 통풍용이 아니라 내부 LED등의 불빛이 보이도록 뚫었고, 안쪽으로 투명 아크릴 조각을 붙여서 LED가 보이도록 만들엇다. 이부분에 방충망을 안쓰고 아크릴을 쓴 이유는 혹시나 비가 들이치지 않을까 걱정을 해서이다.
5. 결과 및 설치
2019년 3월 21일 목요일
NFC를 이용한 선불 교통 카드 잔액 조회기
1. 딸래미(王)의 귀환
아직 초등학생인 딸래미가 있다. 집에서 먼(대중교통으로 40분) 학원을 다니게 되었는데, 셔틀도 없다. 학원에 갈때는 와이프가 데려다 주지만, 올 때는 내가 퇴근하면서 학원으로 가서 딸래미를 데리고 집으로 온다. 하지만 나도 직딩이라 항상 갈 수는 없는 상황이었다. 딸래미의 귀환이 걱정되기도 하고, 만일의 사태를 위하여 딸래미에게 선불 교통 카드를 사 주었다.![]() |
| [ 하트빵빵 귀여운 토끼 버전의 교통카드 ] |
2. 모듈의 귀환
[ PN532를 소개한 포스트 바로 가기 ]
![]() |
| [ PN532 ] |
그 다음 OLED 및 ESP8266을 귀환 시켯다.
[ OLED + ESP8266을 이용한 오실로스코프 바로가기 ]
![]() |
| [ OLED ] |
3. 제작 결과물 소개
일단 결과물을 소개하면 아래의 이미지와 같다.![]() |
| [ 나름 투명 아크릴 상판 ] |
![]() |
| [ 측면에서 찰칵. 이번엔 배터리 없이 설계 ] |
![]() |
| [ 전원을 연결하면 카드를 태깅하라고 궁시렁 ] |
![]() |
| [ 좀더 신선하게 고속버스 안에서 촬영 ] |
![]() |
| [ 카드를 가져다 대면 잔액이 표시됨 ] |
수준이 좀 낮은 상태로 촬영 되었지만, 동작은 아래의 모습으로 진행된다.
4. 제작 방법 소개
납땜할 포인트가 별로 없다. 기껏해야 20-30 포인트 정도된다. 회로도 까지라고 말할 필요도 없고 아래와 같이 연결하면 된다.![]() |
| [ 심플한 연결도~ ] |
나는 모듈들은 모두 소켓 방식을 사용하기 때문에, ESP8266은 기판의 뒷면에 꼽을수 있는 형태로 제작되었다. NFC 나 OLED 모듈은 기판의 앞면에서 꼽는다.
![]() |
| [ 급제작으로 인한 케이블 배선의 엉성함은 참아 주시라~ ] |
소스코드는 전체 공개이지만, 라이브러리는 이 포스트에 기록하지 않는다.
먼저 필요한 라이브러리는 2개이다.
PN532관련된 라이브러리는 아래의 링크에서 다운로드 가능하다.
https://github.com/adafruit/Adafruit-PN532
OLED에 한글을 출력하는 과정은 나름 껄끄롭지만, 그 전체 과정 및 라이브러리는 아래의 링크에서 다운로드 가능하다.
http://andy-power.blogspot.com/2018/08/oled.html
대략 이번 선불 교통카드 잔액 조회 기능을 만들기 위해서는 100행 정도를 코딩했으며, 코딩된 전체 내용은 아래와 같다.
5. 끝으로
사실 일전에 다 연구한 모듈과 내용을 다시금 정리하고 디스플레이를 추가한 결과물이다. 조회기만을 만드는 것은 당일 저녁 딸래미를 학원에서 집까지 데려오고 나서 시작해서 그날 잠자기 전에 다 만들었다. (수 시간 정도 걸림) 예전에 NFC 모듈 연구 당시 선불교통카드에 APDU 방식으로 커멘드를 보내고 받아야 하는데, 보내야하는 커멘드를 어느 자료에서도 찾을 수가 없어서 정말 고생했다. 이 포스트에서는 관련 커멘드는 1행의 소스코드로 공개되었지만, 이 1행의 코드는 수일간 고생해서 알아낸 코드이다. 연구는 끝이 없고 시간은 적으며, 흰머리는 너무나도 빠르게 늘어간다. ㅠㅠESP8266 Digital Input Pin의 불편한 진실
1. 믿었던 놈인데... ESP8266은 2017년도 부터 사용했기 때문에, 7년 정도 사용해 왔었다. 그동안 여러 종류의 내 프로젝트에 사용한 MCU이고, 이에 따라서 신뢰도가 상당히 높았다. 물론 순수한 ESP8266으로 사용하지는 않고 Wemos...


















