2014년 11월 28일 금요일

아두이노 와이파이 쉴드 펌웨어 업그레이드

와이파이 쉴드 펌웨어 업그레이드

와이파이 쉴드는 HDG104 모듈을 통해 IEEE 802.11 b/g 표준으로 무선 연결을 제공한다. TCP/IP 스택과 와이파이 라이브러리를 위한 API들은 와이파이 쉴드의 AT32UC3A1256(짧게 AT32UC3) 마이크로컨트롤러에 의해 관리된다. 당신의 아두이노는 와이파이 라이브러리를 통해 SPI를 사용하여 쉴드에 연결한다.
AT32UC3와 HDG104 모듈 둘다 미니 USB 커넥터를 통해 펌웨어 업그레이드가 가능하다.
이 튜토리얼은 어떻게 업그레이드 하는지를 보여준다.
 - HDG104 와이파이 모듈 펌웨어는 제조사에서 제조사에서 새로운 펌웨어 바이너리를 제공할 때
 - AT32UC3는 아두이노로부터 유용한 펌웨어의 새로운 버전일 때. 다르게는, 와이파이 라이브러리 리포지토리에서 직접 컴파일 해서 가능함.

펌웨어를 업그레이드 할 때, 와이파이 쉴드는 아두이노 보드에 연결되지 않음.
디바이스에 펌웨어를 업그레이드하는것은 두단계 처리임.
 - HDG104 펌웨어는 "wifi_dnld.elf"로 이름되어짐. H&D 모듈은 static 메모리를 가지고 있지 않으므로 AT32UC3 컨트롤러를 사용하여 펌웨어를 업로드 해야할 것임. 그러면 AT32UC3은 펌웨어를 HDG104 모듈의 전담 플레시 메모리에 전송할 것임
 - 펌웨어가 HDG104에 한번 업로드되는것은, 당신은 AT32UC3를 위한 와이파이 쉴드 펌웨어를 업로드 하는것을 준비한다. "wifiHD.elf"는 컨트롤러를 위한 응용프로그램을 포함하는 파일이다.

DFU 프로그래머 다운로드
32UC3에 코드를 업데이트하는 것은 추가적인 소프트웨어를 필요로 할 것이다.

32UC3A1256을 위한 업데이트된 펌웨어 다운로드

윈도우즈에서 수행하기
윈도우즈에서 Flip 소프트웨어를 사용하면 아트멜에 의해 DFU 모드를 사용하여 디바이스에 프로그램하는 것이 제공된다. Flip는 batchisp라 불리는 유틸리티를 제공한다.
먼저 J3 점퍼를 연결한다. USB 미니로 연결한다. 커멘트 라인에서 경로를 찾고 다음을 입력한다. 경로는 보통 아래와 비슷하다.
C:\Program Files (x86)\Atmel\Flip 3.4.5\bin

다음과 같이 명령을 입력한다. C:\에 wifi_dnld.elf 파일이 있는 경우
batchisp.exe -device AT32UC3A1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer /wifi_dnld.elf program verify start reset 0


USB 연결을 끊었다 다시 연결 후 다음의 명령을 입력한다.
batchisp.exe -device AT32UC3A1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer /wifiHD.elf program verify start reset 0



점퍼 3 연결을 해제한다.

2014년 11월 23일 일요일

아두이노 와이파이 쉴드

아두이노 와이파이 쉴드를 이용한 개발
참고 Site : http://arduino.cc/en/Reference/WiFi

와이파이 라이브러리

와이파이 쉴드를 위한 펌웨어가 아두이노 IDE 1.0.5에서 변경되었다. 업데이트 하길 바란다.
아두이노 와이파이 쉴드를 사용하여 이 라이브러리는 아두이노 보드가 인터넷에 연결되는 것을 허가한다. 그것은 들어오는 연결을 수락하는 서버나 나가는걸 만드는 클라이언트 중 하나를 지원할 수 있다. 라이브러리는 WEP와 WPA2 개인 키를 지원하지만 WPA2 엔터프라이즈는 지원하지 않는다. 또한 참고할 것은, 만약 SSID가 브로드캐스트가 아니면 쉴드는 연결할 수 없다. 와이파이 쉴드를 이용한 아두이노 통신은 SPI 버스를 이용한다. 이것은 Uno의 디지털 핀 11, 12, 13과 Mega의 50, 51, 52이다. 두 보드 모두 10번 핀은 SS로 사용된다. Mega에 하드웨어 SS 핀 53번은 사용되지 않지만 출력으로 유지되어야 한다. 디지털 핀 7번은 와이파이 쉴드와 아두이노 사이에 핸드쉐이크로 사용된다.
와이파이 라이브러리는 이더넷 라이브러리와 매우 유사하고 함수 호출의 많은 부분이 같다.
와이파이 쉴드의 추가적인 정보는 Getting Started page나 WiFi shield hardware page를 보라.

WiFi class
와이파이 클래스는 이더넷 라이브러리와 네트워크 설정을 초기화한다.
  • begin()
    • 와이파이 라이브러리의 네트워크 설정을 초기화하고 현재 상태를 제공
  • disconnect()
    • 현재 네트워크에서 와이파이 쉴드를 연결해제 함
  • config()
    • WiFi.config()는 와이파이 쉴드의 DNS, 게이트웨이, 서브넷을 잘 변경하는 고정 IP 주소를 설정한다.
    • DHCP를 사용하여 와이파이 쉴드를 자동적으로 설정하는 WiFi.begin()과는 달리 WiFi.config()는 쉴드의 네트워크 주소를 수동적으로 설정한다.
    • WiFi.begin() 전에 WiFi.config()를 호출하면 config()안에서 와이파이 쉴드를 설정하는 것은 begin()을 강제적으로 한다.
    • WiFi.config()는 WiFi.begin() 후에 호출할 수 있다. 그러나 쉴드는 begin()으로 기본적으로 DHCP 모드로 초기화 될 것이다. 한번 config()메소드를 호출하면 요구되는 네트워크 주소로 변경될 것이다.
  • setDNS()
    • DNS를 설정
  • SSID()
    • 현재 네트워크의 SSID를 가져옴
  • BSSID()
    • 연결된 라우터의 MAC 주소를 가져옴
  • RSSI()
    • 라우터에 연결의 신호 강도를 가져옴
  • encryptionType()
    • 현재 네트워크의 보안 형식을 가져옴
  • scanNetworks()
    • 유용한 WiFi 네트워크들을 스캔하고 발견된 번호를 반환한다
  • getSocket()
    • 유용한 첫번째 소켓을 가져옴
  • macAddress()
    • 와이파이 쉴드의 MAC 주소를 가져옴

IPAddress class
IP주소 클래스는 네트워크 설정에 대한 정보를 제공한다.

Server class
서버 클래스는 연결되어진 클라이언트(다른 컴퓨터나 디바이스에서 실행되는 프로그램)로부터 데이터를 받거나 보낼 수 있는 서버를 생성한다.
  • Server - 
  • WiFiServer()
    • 특정한 포트로 들어오는 연결을 대기하는 서버 생성
  • begin()
    • 서버에 연결이 들어오는 것에 대한 대기를 시작
  • available()
    • 서버에 연결이 되고 읽을 수 있는 데이터를 가진 클라이언트를 가져옴. 연결은 클라이언트 객체가 범위를 벗어남을 반환할때까지 지속됨. client.stop()를 호출하여 닫을 수 있음.
    • available()는 Stream 유틸리티 클래스로부터 상속됨.
  • write()
    • 서버에 연결된 모든 클라이언트에 데이터를 씀
  • print()
    • 서버에 연결된 모든 클라이언트에 데이터를 출력함. 출력 번호는 숫자의 연속으로 각각의 아스키 문자이다. (숫자 123은 세개의 문자 '1', '2', '3')
  • println()

Client class
클라이언트 클래스는 서버에 연결하여 데이터를 주고 받을 수 있는 클라이언트를 생성한다.
UDP class
UDP 클래스는 UDP 메시지를 보내거나 받을 수 있다.
  • WiFiUDP
    • UDP 메시지를 보내고 받을 수 있는 WiFi UDP 클래스의 인스턴스를 생성
  • begin()
    • WiFi UDP 라이브러리와 네트워크 설정을 초기화. WiFiUDP 소켓을 시작하고 내부 포트 PORT를 읽기대기함
  • available()
    • 버퍼에서 읽기 유용한 문자 바이트의 개수를 가져옴. 이 데이터는 이미 도착한거임. 이 함수는 WiFiUDP.parsePacket()의 뒤에 호출되어야 성공될 수 있음
    • available()는 Stream 유틸리티 클래스로부터 상속됨
  • beginPacket()
    • 떨어진 연결에 UDP 데이터를 쓰기위한 연결 시작
  • endPacket()
    • 떨어진 연결에 UDP 데이터를 쓰고 난 후 호출. 패킷 보낸후 종료 마침.
  • write()
    • 떨어진 연결에 UDP 데이터 쓰기. beginPacket()과 endPacket()로 싸여져야 함. beginPacket()는 데이터의 패킷을 초기화하고 그것은 endPacket()가 호출될때까지 보내지지 않음
  • parsePacket()
    • 다음 유용한 들어오는 패킷의 처리를 시작하고, UDP 패킷의 실제여부를 체크하고, 크기를 보고함. parsePacket()은 UDP.read()로 버퍼를 읽기 전에 호출되어져야 함.
  • peek()

  • read()
    • 특정 버퍼에서 UDP 데이터를 읽음. argument가 없으면 버퍼의 다음 문자를 반환함. 이 함수는 WiFiUDP.parsePacket() 후에 호출되어야 성공적일 수 있음
  • flush()
    • 클라이언트에 쓰여졌지만 아직 읽지 않은 일부 바이트를 포기함
  • stop()
    • 서버로부터 연결해제. UDP 세션동안 사용된 리소스들을 해제함.
  • remoteIP()
    • 떨어진 연결의 IP 주소를 가져옴
    • 이 함수는 WiFiUDP.parsePacket() 후에 호출되어져야 함
  • remotePort()
    • 떨어진 UDP 연결의 포트를 가져옴
    • 이 함수는 WiFiUDP.parsePacket() 후에 호출되어져야 함