기본 콘텐츠로 건너뛰기

nodemcu(esp8266) 신기능 gpio.serout() 에 대해 알아보자...는 훼이크고 로직 아날라이저 자랑

24Mhz 8ch Logic Analyzer를 최근에 구매했다.

이런 무시무시한 물건은 아니다.

Saleae라는 회사에서 만든 제품인데 USB로 8ch 까지 전송하고 모니터 대신 프로그램(왜 안드로이드나 iOS 앱이 없는지 모르겠다. 적어도 안드로이드는 있을 법도 한데?)으로 분석하는 제품이다.
가격 대비 너무나 훌륭한 제품인데 Aliexpress 버프를 받아 $10도 안되는 가격에 구했다.

테스트를 해보려고 보니 nodemcu 문서에 요상한게 있었다.

바로 serout. serial out인데 연속적인 output을 쏴주는 명령이라고 써있다.

gpio.serout(pin, start_level, delay_times [, repeat_num])

구문은 위와 같은데.
지정한 pin 에 start_level로 시작해서 N개의 delay_time을 배열로 받아 토글을 해주는 명령이다.

1번핀을 기준으로 테스트해보았다.


WeMos 제품 기준으로 GND/D1을 CH1/GND에 각각 연결하고 { 30,30,60,60,30,30 }을 넣어보았다.

gpio.mode(1,gpio.OUTPUT,gpio.PULLUP)
gpio.serout(1,1,{30,30,60,60,30,30})


2µs 정도 오차가 있다. 32 High/ 32 Low / 62 High / 62 Low / 32 High / 32 Low 순서대로 잘 들어오는 걸 볼 수 있다. 끝내주네! 2씩 빼면 오차보정이 정확하게 되려나?

그러하다... gpio.serout(1,1,{28,28,58,58,28,28}) 실행결과

반복문이 있어서 10회 반복해보았다.

10번 반복했더니 10번 나왔다.

32µs

62µs

훌륭하다.
주의할 점은 logic analyzer 쪽에선 CH1~8까지지만 프로그램에선 0~7까지니 -1씩 빼줘서 연결한다.


내친김에 I2C 테스트도 해보자.
5,6 번 핀에 1,2를 꽂고 Analyzer 에서 I2C를 추가한 후 아래와 같이 nodemcu에서 올려보자.

sda = 5
scl = 6
i2c.setup(0, sda, scl, i2c.SLOW)
i2c.write(0, "hello", "world")

트리거라는 기능이 있으니 사용하면 편하다. 해당 채널이 HIGH혹은 LOW가 되는 시점부터 캡쳐를 시작할 수 있다.
멋집니다.

근데 문자값이 얼만지는 어떻게 아는 건지 잘 모르겠다;;; 뭔가 초록/주홍 점이 생긴 건 알겠는데;;;;

도플광어(https://twitter.com/gbox3d) 님의 요청에 따라 SPI도 도전해본다.
라인 두개를 더 꽂자.

SPI의 경우 WeMos기준
5 - SCK
6 - MISO
7 - MOSI
8 - CS

인걸로 보인다.
spi.setup(id, mode, cpol, cpha, databits, clock_div[, duplex_mode]) 인데 뭐가 뭔지 모르겠다.

spi.setup(0, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8, 0, spi.FULLDUPLEX)

10k 저항도 꽂고 했는데

음......
모르겠다. +_+
일단 여기까지.

댓글

이 블로그의 인기 게시물

Unicode 2.0 에서 한글의 이해

요즘 SNS이나 SNG등등 기계적으로 문장을 생성하는 프로그램들이 넘쳐나는 시대에 의외로 한글처리를 제대로는 프로그램들이 드물구나 하는 생각에 간단한 한글 자소 분석기를 만들어보았다. 링크는 이쪽( http://jsbin.com/ofoqal/10/edit ) 애초에 만든 목적은 다음과 같다. 조사처리(은/는, 이/가, 을/를 등등)를 위해 단어의 마지막 글자의 종성을 조사하기 위함인데 예문을 들어보자면 "준기 는 강남에서 사진 을 찍었다." "예슬 은 홍대에서 식사 를 했다." "슬기 가 대화방에서 나갔습니다." "준기님은 강남에서 사진님을 찍으셨습니다 고갱님" 이라고 말하면 할말 없다. 한국식 소프트웨어(꼭 소프트웨어가 아니더라도)의 특징이자 장점이 무엇이냐라고 물으면 귀찮을 정도로 깨알같은 디테일이라고 대답할텐데 한글 기계화 작업에 대한 중요성은 프로그램을 만드는 사람들에게도 별로 중요하게 다가오지 않나보다. 에또 사설이 길었다. 한때 우리는 한글코드체계의 비표준 숲속에서 너무도 괴로운 나날들을 보낸 역사가 있다. KSC5601부터 시작해서 Microsoft통합형한글을 지나 Unicode 2.0의 시대가 왔다. 개인적으로 UTF-8을 사용하지 않고 EUC-KR이나 CP949를 쓰는 제품이나 서비스의 업체의 대표/관계자에게 1억 미만의 벌금 혹은 3년 이하의 금고형의 실형을 내려줬으면 할 정도로 너무나 많은 사람들을 불행하게 하고 막대한 비용을 지출한 악의 근원이라고 생각한다. 하지만 광명이 왔다. 기계적으로 납득이 가능한 검색 및 정렬이 용이한 Unicode 의 시대가 열렸단 말이다. 지금 당신이 복사해서 붙이고 있는 팁들 보다 훨씬 쉽고 명쾌하니 다음 그림을 한번 보자. (출처: http://www.w3c.or.kr/i18n/hangul-i18n/ko-code.html ) 어떤가? 무쟈게 쉽지 않은가? 현대 한글은 초성 ...

MQTT 접속해제 - LWT(Last will and testament)

통신에서 중요하지만 구현이 까다로운 문제로 "상대방이 예상치 못한 상황으로 인하여 접속이 끊어졌을때"의 처리가 있다. 이것이 까다로운 이유는 상대방이 의도적으로 접속을 종료한 경우는 접속 종료 직전에 자신의 종료 여부를 알리고 나갈 수 있지만 프로그램 오류/네트웍 연결 강제 종료와 같은 의도치 않은 상황에선 자신의 종료를 알릴 수 있는 방법 자체가 없기 때문이다. 그래서 전통적 방식으로는 자신의 생존 여부를 계속 ping을 통해 서버가 물어보고 timeout 시간안에 pong이 안올 경우 서버에서 접속 종료를 인식하는 번거로운 방식을 취하는데 MQTT의 경우 subscribe 시점에서 자신이 접속 종료가 되었을 때 특정 topic으로 지정한 메시지를 보내도록 미리 설정할 수 있다. 이를 LWT(Last will and testament) 라고 한다. 선언을 먼저하고 브로커가 처리하게 하는 방식인 것이다. Last Will And Testament 라는 말 자체도 흥미롭다. 법률용어인데  http://www.investopedia.com/terms/l/last-will-and-testament.asp 대략 내가 죽으면 뒷산 xx평은 작은 아들에게 물려주고 어쩌고 하는 상속 문서 같은 내용이다. 즉, 내가 죽었을(연결이 끊어졌을) 때에 변호사(MQTT Broker - ex. mosquitto/mosca/rabbitMQ등)로 하여금 나의 유언(메시지)를 상속자(해당 토픽에 가입한 subscriber)에게 전달한다라는 의미가 된다. MQTT Client 가 있다면 한번 실습해보자. 여러가지가 있겠지만 다른 글에서처럼  https://www.npmjs.com/package/mqtt  을 사용하도록 한다. npm install mqtt --save 로 설치해도 되고 내 경우는 자주 사용하는 편이어서 npm install -g mqtt 로 전역설치를 했다. 호스트는 무료 제공하고 있는 test.mosquitto.o...

OS X 터미널에서 tmux 사용시 pane 크기 조절

http://superuser.com/a/660072  글 참조. OS X 에서 tmux 사용시 나눠놓은 pane 크기 조정할 때 원래는 ctrl+b, ctrl+↑←→↓ 로 사이즈를 조정하는데 기본 터미널 키 입력이 조금 문제가 있다. 키 매핑을 다시 하자 Preferences(cmd+,) > Profile >  변경하고자 하는 Theme 선택 > Keyboards 로 들어가서 \033[1;5A \033[1;5B \033[1;5C \033[1;5D 를 순서대로 ↑↓→←순으로 매핑이 되도록 하면 된다. +를 누르고 Key에 해당 화살표키와 Modifier에 ctrl 선택 한 후 <esc>, [, 1, ;, 5 까지 한키 한키 입력 후 A,B,C,D를 써준다. 잘못 입력했을 땐 당황하지 말고 Delete on character 버튼을 눌러 수정하도록 하자. 그리고 다시 tmux에서 ctrl+b, ctrl+↑←→↓로 사이즈를 조절해보자. 잘 된다.