2015년 7월 25일 토요일

센서 데이터 무선(WiFi, Bluetooth) 통신 방법

센서로부터 데이터를 받아, 노트북이나, 스마트폰으로 전달해야 하는 일이 생겼다.

이 경우, 블루투스 통신, WiFi 통신을 사용할 수 있다. 
블루투스 통신은 블루투스가 지원되는 장치 양방향 페어링을 하면, 서로 정보를 주고 받을 수 있다. WiFi의 경우, 네트워크 무선 AP가 있는 경우, 특정 포트로 정보를 전달할 수 있다. 이런 통신을 위해서는 다양한 통신 장치가 있으며, 당연히 돈을 많이 투자할수록, 이런 노가다 작업이 매우 쉬워진다. 

1. Adafruit CC3000
테스트해보기 위해, Adafruit CC3000을 이용해 작업해 보았다. 상세한 예제 따라하기는 아래 링크를 참고하길 바란다. 주의할 점은 CC3000라이브러리 내 사용핀이 상수로 고정되어 있어, 핀 번호를 마음대로 변경하면 안된다는 것이다. 이 과정을 무시하면, 한 두시간 그냥 노가다한다. 


만약, 잘 동작하지 않으면, 결선이 제대로 되었는 지, WiFi SSID와 암호를 확인해 보고, 그래도 문제가 있다면, CC3000칩을 다른 칩으로 사용해 본다.

작업 후기 - 실제로 이 작업을 하는 데, 3~4시간이 걸렸다. 매우 간단한 작업이었지만, 앞에 언급된 문제 뿐만 아니라, 얼마전 LG에서 업그레드 해준 공유기 문제까지 겹쳤다. 몇 시간 동안 동작이 안되니, 칩교체+단락테스트+핀교체+아두이노보드교체+재코딩+WiFi SSID/암호 변경을 무한 반복. 헐~ 그래도 안된다. 멘붕이다. 공유기를 교체한 후에도 해결이 안되었다. 마지막으로, 공유기 바로 앞으로 가져가서 테스트해보았다.


헐.. 잘 된다. 젠장. CC3300은 공유기가 보이는 곳에 있어야 인식된다. 다음 같은 메시지가 시리얼모니터로 출력되면 성공이다. 인식은 대략 25초 정도 걸렸다.

Hello, CC3000!

Free RAM: 1133

Initializing...

Attempting to connect to U+Net8080
Connected!
Request DHCP

IP Addr: 192.134.223.148
Netmask: 255.255.255.0
Gateway: 192.168.219.1
DHCPsrv: 192.168.219.1
DNSserv: 1.214.68.2
www.adafruit.com -> 207.58.139.247-------------------------------------
HTTP/1.1 200 OK
Date: Sun, 26 Jul 2015 06:15:13 GMT
Server: Apache
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization, Referer, User-Agent
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1728000
Accept-Ranges: bytes
X-Mod-Pagespeed: 1.9.32.3-4448
Vary: Accept-Encoding
Cache-Control: max-age=0, no-cache
Content-Length: 74
Content-Type: text/html

This is a test of the CC3000 module!
If you can read this, its working :)
-------------------------------------


Disconnecting

Adafruit CC3000 테스트 용으로 Adafruit 웹서버인 http://www.adafruit.com/testwifi/index.html 에 다음과 같은 TEXT 페이지를 넣어 놓았다.


건너방에서 스마트폰에서 와이파이 잘 터진다고, 그곳에서 테스트하면 안된다. 기본적으로 제공되는 WebClient, buildtest 모두 다 잘된다. 다음은 buildtest 결과이다.

Hello, CC3000!

RX Buffer : 131 bytes
TX Buffer : 131 bytes
Free RAM: 1215

Initialising the CC3000 ...
Firmware V. : 1.24
MAC Address : 0xFF 0x66 0x87 0x92 0x30 0x64
Networks found: 3
================================================
SSID Name    : U+zone
RSSI         : 36
Security Mode: 3

SSID Name    : U+Net372B
RSSI         : 36
Security Mode: 3

SSID Name    : U+Net8080
RSSI         : 36
Security Mode: 3

================================================

Deleting old connection profiles

Attempting to connect to U+Net8080
Connected!
Request DHCP

IP Addr: 192.234.453.123
Netmask: 255.255.255.0
Gateway: 192.168.219.1
DHCPsrv: 192.168.219.1
DNSserv: 1.214.68.2
www.adafruit.com -> 127.0.0.1

Pinging 127.0.0.1...0 replies


Closing the connection

HTTPServer 예제는 실행해 접속해 본 결과, 성능이 그리 좋지는 않았다.

Hello, CC3000!

Free RAM: 789

Initializing...

Attempting to connect to U+Net8080
Connected!
Request DHCP

IP Addr: 129.342.324.132
Netmask: 255.255.255.0
Gateway: 192.168.219.1
DHCPsrv: 192.168.219.1
DNSserv: 1.214.68.2

NOTE: This sketch may cause problems with other sketches
since the .disconnect() function is never called, so the
AP may refuse connection requests from the CC3000 until a
timeout period passes.  This is normal behaviour since
there isn't an obvious moment to disconnect with a server.

Listening for connections...

CC3000은 앞서 언급한 것처럼, 인식에 25초 정도 시간이 걸려, 다운된 것이 아닌가라는 생각을 하게 하는 함정이 있다.

참고로, 이 문제와 관련해, Adafruit forum website 에서 mike가 남긴 메시지이다.



2. Serial WiFi ESP8266
CC3000은 많은 양의 데이터를 전송할 때는 효과적일 수 있으나, 그렇지 않은 경우(영상 이외의 일반 센서 데이터 값처럼 그리 많지 않은 경우)에는 ESP8266과 같은 초소형 시리얼 WiFi 칩을 사용해도 충분하다. 참고로, CC3000의 경우 많은 라이브러리 코드로 인해, 코딩이 추가되면, 일반 아두이노 우노 보드에 코드가 업로드되지 않는 문제도 보고되고 있다.

ESP8266은 가격과 적당한 성능이 인상적이다. 처음 출시때 단돈 5달러인것이 요즘에는 3달러까지 내렸다.


회로 결선은 다음과 같이 하면 된다. 좀 더 상세한 예제는 이 링크를 참고한다.


ESP8266라이브러리를 설치하였다면, WiFiWebServer 예제를 실행해 본다. 참고로 오래된 아두이노 IDE 버전에 단순히 라이브러리만 설치하면, 에러가 나므로, 최신 버전을 설치한 후에 적용해 보자. 아래는 이 칩을 이용해, WiFi 웹서버 릴레이를 만든 사례이다. 
3. WiFi 동글
아울러, 아두이노보다 성능이 좋은 (다만 사용이 좀 더 복잡한) 라즈베리파이에서 주로 사용하는 WiFi 동글 ipTIME N100mini 을 사용할 수도 있다. 개인적으로 라즈베리파이에서는 제일 편한 방법이라 생각한다.

ipTIME N100mini

설치 방법은 아래 링크를 참고한다. 매우 간단하다. 사서 USB에 꼽기만 하면 된다 (물론 드라이버가 미리 설치되어 있는 운영체제에서는 자동으로 WiFi가 인식됨).
이외에 쉴드형 WiFi 장치가 있다. 다만, 가격이 비싸다.

4. Serial Bluetooth 
Bluetooth를 지원하는 간단한 시리얼 통신 형태 장치가 있다. 간단한 데이터 통신은 이 장비로도 충분하다.

HC-05, HC-06의 가격은 5~7달러 정도로 매우 싸다.

이 제품과 관련된 상세한 내용은 이 링크를 참고한다.
아두이노와 연동하는 예제여기를 참고한다.
블루투스는 AT명령을 지원해, 전송속도, 암호 등을 설정할 수 있다.

AT : Ceck the connection.
AT+NAME : See default name
AT+ADDR : see default address
AT+VERSION : See version
AT+UART : See baudrate
AT+ROLE: See role of bt module(1=master/0=slave)
AT+RESET : Reset and exit AT mode
AT+ORGL : Restore factory settings
AT+PSWD: see default password

HC-06은 AT명령이 아래와 같이 제한되어 있다. 
AT : check the connection
AT+NAME: Change name. No space between name and command.
AT+BAUD: change baud rate, x is baud rate code, no space between command and code.
AT+PIN: change pin, xxxx is the pin, again, no space.
AT+VERSION

DF Robot에서 나온 다음과 같은 블루투스는 모든 명령을 지원하고 있다. 다만, 가격이 비싸다.
DF의 Bluetooth V3 기본 설정값은 다음과 같다.
  • Default setting
    1. Device class: 0
    2. Inquiry code: 0x009e8b33
    3. Device mode: Slave mode
    4. Binding mode: SPP
    5. Serial port: 38400 bits/s; 1 stop bit, no parity (In datasheet, it said the default baud rate is 9600 which is wrong.)
    6. Pairing code: “1234”
    7. Device name: “HHW-SPP-1800-2

이외에, Adafruit에서 개발된 Adafruit Bluefruit LE UART Friend 등도 있다.



몇몇 보드는 약간 변경된 블루투스 방식을 사용하여, 전용 블루투스 장치가 필요하다. 다음은 다이나믹셀 제어용으로 개발한 OpenCM과 연결되는 BT-410, BT-210 블루투스 장치에 관한 링크이다. 
OpenCM에는 무선통신 용 RX, TX 단자가 있고, 코딩은 아두이노 변형 IDE 도구를 이용하기 때문에 손쉽게 일반적으로 사용되는 블루투스 장치와 호환될 것 같지만, 일반적인 블루투스 칩을 여기에 연결해도 통신이 이루어지지 않는다(쉽게 보고 삽질하다가 결국 잘 안되었다. 레퍼런스도 없다. 가격이 3이배 이상 비싸더라도 해당 제조사가 패키징한 블루투스 BT-410/210을 구매하자 -.-). 






댓글 없음:

댓글 쓰기