기본 콘텐츠로 건너뛰기

ESP8266/nodemcu에서 servo사용하기

https://github.com/milikiller/nodemcu-firmware 에 보니 servo 객체가 있다.

servo를 다루는 것은 프로그램으로 pwm을 구현해도 되지만 잡음 문제도 있고 신경쓰이는 부분이 많으므로 저수준에서 구현된 것을 쓰도록 하자.

일단 firmware 를 다시 빌드하려고 보니

make
DEPEND: xtensa-lx106-elf-gcc -M -Os -Os -ffunction-sections -fno-jump-tables -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -D__ets__ -DICACHE_FLASH -DLWIP_OPEN_SRC -DPBUF_RSV_FOR_WLAN -DEBUF_LWIP -I include -I ./ -I ../../include/ets -I ../libc -I ../platform -I ../lua -I ../wofs -I ../include -I ./ -I ../../include -I ../../include/eagle user_main.c
/bin/sh: xtensa-lx106-elf-gcc: command not found
xtensa-lx106-elf-gcc -Os -Os -ffunction-sections -fno-jump-tables -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals  -D__ets__ -DICACHE_FLASH -DLWIP_OPEN_SRC -DPBUF_RSV_FOR_WLAN -DEBUF_LWIP   -I include -I ./ -I ../../include/ets -I ../libc -I ../platform -I ../lua -I ../wofs -I ../include -I ./ -I ../../include -I ../../include/eagle  -o .output/eagle/debug/obj/user_main.o -c user_main.c
make[2]: xtensa-lx106-elf-gcc: No such file or directory
make[2]: *** [.output/eagle/debug/obj/user_main.o] Error 1
make[1]: *** [.subdirs] Error 2
make: *** [.subdirs] Error 2

보다시피 xtensa-lx106-elf-gcc 를 찾는다.
xtensa lx106 용 gcc toolchain이 필요한데...

https://github.com/pfalcon/esp-open-sdk 에서 설치해보도록 하자.

OS X의 경우 case-sensetive 문제로 빌드의 애로사항이 있으니 가상 디렉토리를 만들어서 mount 하자
$ sudo hdiutil create ~/Documents/case-sensitive.dmg -volname "case-sensitive" -size 10g -fs "Case-sensitive HFS+"
$ sudo hdiutil mount ~/Documents/case-sensitive.dmg
$ cd /Volumes/case-sensitive
이런 식이다.
실제로 빌드해보니 2.67GB 정도 차지하니 무식하게 -size 10g 아니하고 -size 3g정도로 해도 무방하다.

http://www.esp8266.com/viewtopic.php?f=21&t=1432
일단 성격이 급하신 분은 여기에서 0x00000.bin, 0x10000.bin이 있는 파일을 받아서 사용하시고

빌드를 해서 쓰려면 계속 따라가보자.
OS X 한정인 얘기지만 make해보면 한참 열심히 빌드를 하다가 오류를 발생한다.
https://github.com/pfalcon/esp-open-sdk/issues/45 이런 오류인 것.
은근 이쪽은 OS X보다 Linux환경을 쓰시는 분들이 많은가보다.

잊고 있다가 최근 글을 보니
idserda commented 4 days ago
Probably not the best solution, but this makes it compile:
In esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.2/gcc, add this line somewhere at the top:
#include <stddef.h>
of the following files:
graphite.c 
graphite-blocking.c 
graphite-clast-to-gimple.c
graphite-dependences.c 
graphite-interchange.c 
graphite-optimize-isl.c 
graphite-poly.c 
graphite-scop-detection.c 
graphite-sese-to-poly.c
불완전하지만 이런 해결법을 내놓아서 esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.2/gcc 경로 아래 graphite*.c들 맨 첫줄에 #include <stddef.h> 를 죄다 추가해줬다.
저장하고 make.
어쨌든 이러면 꽤 길도 지루한 시간 동안 커다란 build 파일을 만들고 xtensa toolchain이 완성이 된다.


export PATH=/Volumes/case-sensitive/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

이런 식으로 toolchain을 경로에 넣고 다시 https://github.com/milikiller/nodemcu-firmware 을 clone한 경로로 가서 make를 해준다.

별 오류가 없다면 bin/ 경로 아래에

$ ll
total 760
drwxr-xr-x   7 spectrum  staff     238 Apr 27 04:18 ./
drwxr-xr-x  19 spectrum  staff     646 Apr 21 05:04 ../
-rw-r--r--   1 spectrum  staff      79 Apr 20 05:03 .gitignore
-rw-r--r--   1 spectrum  staff   45872 Apr 27 04:18 0x00000.bin
-rw-r--r--   1 spectrum  staff  325872 Apr 27 04:18 0x10000.bin
-rw-r--r--   1 spectrum  staff    4096 Apr 20 05:03 blank.bin
-rw-r--r--   1 spectrum  staff     128 Apr 20 05:03 esp_init_data_default.bin
bin $ ls

이런 식으로 0x00000.bin과 0x10000.bin을 볼 수 있다.
준비는 끝. flash 하자. GPIO0은 GND로 연결하고 리셋 한번.

/<esptool이 있는 경로>/esptool -p /dev/tty.<esp8266이 연결된 포트> -b 230400 write_flash 0x00000 0x00000.bin 0x10000 0x10000.bin

flash가 끝나면 다시 GPIO0를 원래대로 하고 리셋.
콘솔 접속 후 servo 객체가 있는 것을 확인한다.
사용법은 간단.

setup(id, pin, servo pulse length) - Start generating servopulses on selected pin
position(id, servo pulse length) - Change servo pulse length at selected ID 
stop() - Stop timer for servo pulse generator

이게 전부.
이렇게 번거로운 과정들을 자꾸 겪다보니 어짜피 Renoise말곤 딱히 시퀀서도 안쓰고 멀티미디어도 안하는데 내가 왜 OS X를 쓰나 싶은 생각이 자꾸만 든다 -_ㅜ)
하긴 맥은 iOS 개발 셔틀이었지;;

이 블로그의 인기 게시물

Mac 주의 - 약간 빡치는 git 대소문자 변환 파일명 변환(renaming)하는 법

Mac에서 종종 화나는 일 중 하나가 파일 시스템이 대소문자를 구분하지 않는 점이다.
가령, A.png를 a.png로 바꿔야할 경우 HFS 기준으론 전혀 바뀐 점이 없는 걸로 인식하는데 다소 화가난다.
하지만, 방법이 없는 것은 아닌데

A.png를 임의의 다른 파일로 바꾼다. (ex. A_.png)1에서 바꾼 상태에서 staging 한다. (git add A_.png)1의 파일을 다시 원래 바꾸려고 했던 파일로 바꾼다. (mv A_.png a.png)3을 다시 staging 한다. (git add a.png)commit 한다.https://stackoverflow.com/a/40307511/880991 에서 답변해준 Chris Barr 님에게 감사를.
* 추가

실제로 해보니 git mv --force A.png a.png 가 더 간단하다. 이는 바로 staging 영역에 add까지 해준다.

즐거운 Online Prototyping Tool 들

jsbin, codepen, jsfiddle 이런 것들은 일단 생략. 너무 유명한 것들이라.

https://launchpad.graphql.com - node.js 기반 graphQL 연습장. 이것만으로도 충분히 훌륭한 백엔드
https://codesandbox.io/ npm 사용이 가능한 클라이언트 사이드 연습장. webpackbin이 너무 문제가 많아서 찾아본 것.

https://scrimba.com 이건 codesandbox+ asciinema(https://asciinema.org/) 같은 느낌인데 키 녹화와 음성 녹화 기능이 추가되었다. 다 좋은데 화살표 키로 빨리감기 뒤로감기 기능이 안되고 익스포트(youtube등)으로 지원이 없는게 아쉽다.

이 둘이 만나면? https://codesandbox.io/s/jvlrl98xw3?from-embed
뭐야 이거 무서워 하지마 ㄷㄷ;  graphql+react-native-web(부왘ㅋㅋ)

https://repl.it/languages 전통을 자랑하는 REPL 도구. 지원 언어 종류가 -_-;;;;;

https://tio.run/# repl.it? 장난함? 얘는 지원 언어가 무려 386종류. J랑 아희도 있다.

https://play.golang.org/ 즐거운 go playground. 소스 포멧팅 넘 좋아.

http://decaffeinate-project.org/repl/ 최고의 coffeescript REPL. 원래 용도는 coffee를 ecma6코드로 바꾸는 것이지만...

https://scaphold.io
https://www.graph.cool/ graphql backend service. scaphold.io는 설치도 필요없는 클라우드. graphcool은 호스팅+클라우드 다있음. 둘 다 막상막하. 푸쉬서버도 되고 뭐 미친득.

https://glitch.com/ gomix에서 결국 glitch로 안착.  node.js

https://www.shadertoy.com 잘하고 싶다! 쉐이다! 오디오도 된다!

http:/…

vulcan 추천사

왜 Vulcan인가요?

유명한가요?
이걸 배워도 괜찮은 건가요?
취직은 잘 되나요?
회사에 필요한가요?
많이들 쓰나요?
앞으로 유망한가요?

항상 강의(보통 국비지원인 무료 수강)를 할때마다 자주 들었던 질문인데요.
vulcan은 제 생각엔 이 질문들에 대해 모두 "예"일수도 "아니오"일수도 있다고 생각합니다.

왜냐면 vulcan는 framework이며 제품으로 치면 반쯤은 조립이 된 제품으로 구성한 IKEA 같은 거라서 팝업 스토어나 전시실에 있는 걸 보고 구성하거나 아니면 처음부터 하나하나 자신이 구성하듯이 Apollo, AutoForm(aka. smartForm), Collection2, Email Templating, GraphQL, Meteor, MongoDB, React, Router, Server-sided rendering 등등 각각 검증된 요소들로 웹앱을 만들 수 있습니다.

질문에 대한 답을 드리자면 vulcan 자체는 "아니오"일 수도 있지만 vulcan에 들어가는 요소들은 "예"라고 할 수 있는 것들이 꽤 많습니다.

웹은 프로그래밍 분야 중에서도 제법 오래되고 안정된 분야이면서 동시에 대중적인 인기를 업고 많은 실험과 혁신을 시도하고 있는 분야이기도 합니다.
사용자 입장과 달리 만드는 사람 입장에선 눈에 보이는 부분(frontend)에서부터 보이지 않는 부분(backend)까지 세심하고 정밀하게 고려해야하고 오랜기간 웹에 노출된 노련한 사용자들은 당신이 어떤 부분이 부족한지 금방 알아차립니다.
이 부분은 만드는 사람 입장에선 꽤 괴로운 일입니다. 기술의 변화는 빠르고 학습해야할 양은 늘어나며 구현해야할 디테일은 더욱 엄격하게 평가받습니다.

Vulcan은 대부분 최신(Cutting edge) 기술들로 가득하며 각각 기술에 대해 깊은 이해가 있다면 좀 더 예리하게 만들 수 있지만 최소한의 학습양으로도 당장 작동하는 결과물을 만들 수 있습니다.
Vulcan은 Meteor Pla…