2015년 2월 15일 일요일

초저가 IoT WiFi 모듈 - ESP8266 사용기

알리가 춘절로 2달 걸릴 것 같아 두배정도 비싸게 주고 국내에서 구입
이틀만에 왔으니 위안을 삼아야지.
ESP-12를 사고 싶었으나 5배 비싸서 못삼.
나도 부품 장나사 할까 (.....는 아니지 -_-)

ESP8266은 그 자체로도 훌륭한 MCU를 가지고 있어서
굴러다니는 USB-Serial 케이블을 3.3v 전압으로 개조. (5v 넣었더니 엄청 뜨거워지더라;)
http://www.adafruit.com/products/954 (PL2303 계열. 500mA로 전류가 안정적이다)
이렇게 생긴 놈인데
힘줘서 USB 커넥터 쪽을 쪼개면

요렇게 생겨먹었다.
현재는 빨간선이 5v로 되어있다.

3.3V로 옮겨주고 다시 재조립

제품이랑 연결했는데 다시는 ESP-1 사지 말아야지 싶은 것이 핀 숫자도 적고 배열이 아주 별로여서 핀을 롱노즈로 휘고 쌩쇼를 함.

앞면을 기준으로 위에서 아래로 왼쪽에서 오른쪽으로 USB-Serial 케이블 연결을 보면

* ESP8266
1 2 3 4
5 6 7 8

1: GND (-)
2: GPIO2
3: GPIO0
4: RX
5: TX
6: CH_PD
7: RESET
8: VCC (+)

* USB-Serial
R G W B (빨 녹 흰 검)

R: VCC+
G: TX
W: RX
B: GND-
이라고 할때

1-B 2-x 3-x 4-G
5-W 6-x 7-x 8-R

순으로 대응을 하고 6번 CH_PD에도 VCC+를 넣어주면 된다.


얼기설기 엮어보자꾸나

펌웨어 개조를 하지 않은 상태에서 기본은 Arduino IDE 같은 곳에서 Tool>Serial Port>/dev/tty.usbserial을 선택하고 Tool>Serial Monitor에서 하단 Both NL & CR / 9600 baud를 체크하고 AT 명령을 테스트 해본다.

이상하다 싶을 땐 TX/RX가 반대로 껴져있는지 CH_PD가 VCC+를 못받는지를 확인해보자.
CH_PD를 뺐다꼈다 하면

[Vendor:www.ai-thinker.com Version:0.9.2.4]

ready

이런 식으로 ready를 알려주는데 이게 된다면 AT를 쳐보면 된다.
screen이나 일반 터미널에선 CR+LF가 안 먹는지 명령이 잘 되지 않았고 Arduino IDE의 Serial Monitor는 정상적으로 작동했다.

에 AT 명령어들을 잘 정리해 놓았다.

Basic

AT Test if AT startup

AT+RST Restart

AT+GMR View version info

AT+GSLP Enter deep-sleep mode

ATE AT commands echo

Wi-Fi

AT+CWMODE WIFI mode(station/softAP/station+softAP)

AT+CWJAP Connect to AP

AT+CWLAP Lists available APs

AT+CWQAP Disconnect from AP

AT+CWSAP Set parameters under AP mode

AT+CWLIF Get stations’ ip which are connected to ESP8266 

AT+CWDHCP Enable/Disable DHCP

AT+CIPSTAMAC Set mac address of ESP8266 station

AT+CIPAPMAC Set mac address of ESP8266 softAP

AT+CIPSTA Set ip address of ESP8266 station

AT+CIPAP Set ip address of ESP8266 softAP

TCP/IP

AT+CIPSTATUS Get connection status

AT+CIPSTART Establish TCP connection or register UDP port 

AT+CIPSEND Send data

AT+CIPCLOSE Close TCP/UDP connection

AT+CIFSR Get local IP address

AT+CIPMUX Set multiple connections mode

AT+CIPSERVER Configure as server

AT+CIPMODE Set transmission mode

AT+CIPSTO Set timeout when ESP8266 runs as TCP server

AT+CIUPDATE For OTA(upgrade through network)

Data RX

+IPD Data received from network

softAP

몇가지 확인을 해보면 버전은
AT+GMR 했을때

0018000902-AI03

OK

이와 같이 나온다.

AT+CWMODE? 로 현재 상태를 알아보자

+CWMODE:2

OK

2 즉. 기본은 AP-공유기 상태인 것을 알 수 있다.

AT+CWSAP? 로 공유기 정보를 알아보면

+CWSAP:"ESP_9D2CD8","",11,0

OK

이런 식으로 나온다. 접속명인 SSID는 ESP_9D2CD8에 암호는 없고, 채널ID는 11번, 오픈 모드인 것으로 보인다.

<ssid> string, ESP8266 softAP’ SSID

<pwd> string, MAX: 64 bytes

<chl> channel id

< ecn >0 OPEN

 2 WPA_PSK

 3 WPA2_PSK

 4 WPA_WPA2_PSK

공유기에 접근하려면

AT+CWMODE를 Station으로 바꾸자

AT+CWMODE=1

OK

그리고 
AT+CWLAP 로 공유기 목록을 보자

AT+CWLAP

+CWLAP:(4,"SSID_1",-61,"aa:bb:cc:dd:ee:ff",1)
+CWLAP:(4,"SSID_2",-85,"aa:bb:cc:dd:ee:ff",1)
+CWLAP:(4,"SSID_3",-93,"aa:bb:cc:dd:ee:ff",1)
+CWLAP:(2,"SSID_4",-65,"aa:bb:cc:dd:ee:ff",2)
+CWLAP:(3,"SSID_5",-89,"aa:bb:cc:dd:ee:ff",3)
+CWLAP:(0,"SSID_5",-88,"aa:bb:cc:dd:ee:ff",3)
+CWLAP:(1,"SSID_5",-88,"aa:bb:cc:dd:ee:ff",1)
.....

쭈욱 나온다.
접속은 간단하다.
AT+CWJAP="SSID","PASSWORD"

OK

따옴표를 꼭 쓰자.

http://nodemcu.com/index_en.html 여기를 보니까 별도의 Arduino등이 없어도 lua로 코딩해서 서버를 구성하거나 GPIO를 제어하는 펌웨어를 올릴 수 있더라.

가자! 플래싱!

파이썬이 없으면 brew install python 하든 어쩄든 해서 파이썬 먼저 설치하고
pyserial을 얹어주자

pip install pyserial

https://github.com/themadinventor/esptool 여기에서 esptool.py 받자. 귀찮아서 그냥 git clone https://github.com/themadinventor/esptool.git 으로 내림.

그리고 플래싱할 바이너리를 받아주자

여기 있는 것중 땡기는 걸로 받자.

자 esptool.py 와 nodemcu_XXXX.bin 을 받았으면 플래싱할 준비를 하자.
간단하다.

1. GPIO0 + GND 를 연결한다.
2. 리셋한다. RESET + GND를 연결한 뒤 제거한다. 연결을 제거하는 순간 적석 LED왼편에 청색 LED가 깜빡 하고 한번 점멸할 것이다.

그러면 이제 serial monitor가 먹통이 되었을거다.

./esptool.py --port /dev/tty.usbserial write_flash 0x000000 ../nodemcu_latest.bin 

이런식으로 플래싱하자.
첨엔 오류가 났는데
Connecting...
Erasing flash...
Traceback (most recent call last):
  File "./esptool.py", line 525, in <module>
    esp.flash_begin(blocks*esp.ESP_FLASH_BLOCK, address)
  File "./esptool.py", line 188, in flash_begin
    struct.pack('<IIII', size, num_blocks, ESPROM.ESP_FLASH_BLOCK, offset))[1] != "\0\0":
  File "./esptool.py", line 105, in command
    if self._port.read(1) != '\xc0':
  File "/usr/local/lib/python2.7/site-packages/serial/serialposix.py", line 475, in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

당황하지 않고 2차 시도.
./esptool.py --port /dev/tty.usbserial write_flash 0x000000 ../nodemcu_latest.bin 
Connecting...
Erasing flash...
Writing at 0x00062000... (100 %)

Leaving...

성공이다.

screen /dev/tty.usbserial 으로 들어가보자!
프롬프트가 달라졌다.
모르겠다면 또 리셋.

NodeMCU 0.9.5 build 20150213  powered by Lua 5.1.4
이런식으로 나온다면 대성공!

여기 보고 한땀 한땀 쳐보거나

API를 보면서 해보자.

node.js 하던 감각으로 하면 별 문제 없을 것이다.
서버, 파일시스템 모두 매우 잘 돌고 멋지다!
https://www.npmjs.com/package/esp8266 같은 걸로 업로드도 되고 아주 굿
폰에서 찍은 사진이 blogger에서 바로 뜨는게 아주 좋다.
lua용 websocket 라이브러리도 있으니 Meteor로 DDP 통신도 할 수 있겠다.



모두들 구..굿좝!

2015년 2월 13일 금요일

Meteor build farm 사용하기

Npm 사용하는 package 만들다보니

해당 패키지안에 c/c++ 소스 코드가 있어서 바이너리를 OS별로 빌드해야하는 경우가 있는데
package를 meteor publish 로 올리고 나서 OS별로 meteor publish-for-arch packagename@version 해야한다.

가령 나는 linux를 쓰고 친구는 OS X를 쓴다.
그럼 서로 나는 잘되는데 너는 안되냐 이런 소리가 나오기 마련이다.
왜냐면 바이너리가 없으니까.
OS X 컴에서 publish-for-arch 해서 올려야한다.

하지만 나는 바이너리를 빌드해줄 친구도 없고 맥도 없다면 (크흐흑 ㅜ_ㅜ)
걱정마시라 meteor admin get-machine을 사용하면 된다.

https://github.com/meteor/meteor/wiki/Build-Machines
뭐 이렇게까지 친절할 필요가 있나 싶은 서비스인데;
Meteor developer 계정으로 로그인 한 뒤

# OS X
meteor admin get-machine os.osx.x86_64

# Linux on 64-bit Intel
meteor admin get-machine os.linux.x86_64

# Linux on 32-bit Intel
meteor admin get-machine os.linux.x86_32

셋중 하나 필요한 걸로 골라잡니다. 눈치챘을지 모르겠지만 윈도우는 지원안한다. 지금은 윈도우도 된다. meteor admin get-machine os.windows.x86_32 로 접근 가능하다.

그러면 ssh 한것처럼 shell 원격접속이 된다.
작동 방식은
1. 머신을 요청한다.
2. 5분간 머신을 할당받는다.
3. 서버는 요청한 사용자의 로그인 정보를 넘겨받고
4. 5분안에 다시 들어오면 같은 머신을 할당해 준다.

당연히 제한이 있는데
1. 한번에 15분 이상 유지 안됨
2. 주당 한시간 이상 못씀

그래도 이게 어디냐. 어리버리말고 계획적으로 잘 사용하자.
xxxx.meteor.com 도 모잘라서 빌드서버까지 무료로 임대(galaxy로 유료로 ㅜㅜ)해주는 대인배 Meteor 되시겠다.