블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  


Configuring the onboard WiFi  (English)



Yún(雲)은 액세스 포인트 역할을하지만 기존 네트워크에도 연결할 수 있습니다. 이 지침은 Yún(雲)을 무선 네트워크에 연결하는 과정을 안내합니다. Yún(雲)은 WEP, WPA 및 WPA2 암호화를 지원하는 네트워크는 물론 암호화되지 않은 네트워크에도 연결할 수 있습니다.


처음 Yún(雲)의 전원을 켜면 Linino-XXXXXXXX라는 WiFi 네트워크가 생성됩니다. 컴퓨터를 이 네트워크에 연결하십시오.


IP 주소를 얻은 다음 웹 브라우저를 열고 주소 표시 줄에 http : //linino.local 또는 192.168.240.1을 입력하십시오. 잠시 후 암호를 묻는 웹 페이지가 나타납니다. "doghunter"를 입력하고 로그인 버튼을 클릭하십시오.






현재 네트워크 연결에 대한 진단 정보가있는 페이지를 찾을 수 있습니다. 첫 번째는 WiFi 인터페이스이고, 두 번째는 Ethernet 연결입니다. 진행하려면 Configuration 버튼을 누르십시오.





새 페이지에서 Yún(雲)을 구성하고 고유 한 이름을 지정하고 연결할 네트워크를 식별합니다.


board 이름 입력란에 Arduino의 고유 이름을 입력하십시오. 이것을 나중에 참조 할 때 사용할 것입니다.


Arduino에 8 자 이상의 암호를 선택하십시오. 이 필드를 공백으로두면 기본 암호 인 doghunter가 유지됩니다


원하는 경우 시간대와 국가를 설정할 수 있습니다. 이러한 옵션은 로컬 WiFi 네트워크 연결에 도움이되므로 설정하는 것이 좋습니다. 현지 시간대를 설정하면 해당 국가의 규제 도메인도 선택됩니다.


연결하려는 WiFi 네트워크의 이름을 입력하십시오.


보안 유형을 선택하고 암호를 입력하십시오.





Configure & Restart (구성 및 재시작) 버튼을 누르면 Arduino가 재설정되고 지정된 네트워크에 연결됩니다. Arduino 네트워크는 잠시 후 종료됩니다.





이제 Yún(雲)에게 지정한 네트워크에 가입 할 수 있습니다.





Programming the 32U4 over WiFi


Yún(雲)이 컴퓨터와 동일한 네트워크에 있으면 무선으로 연결하여 프로그래밍 할 수 있습니다.

Yún(雲)을 구성한 후 구성 설정에서 지정한 네트워크에 연결하십시오. Arduino IDE를 엽니 다.

Tools> Port 메뉴에서 Yún(雲)의 이름과 IP 주소를 나열하는 항목이 보여야 합니다. board 메뉴에서 Arduino Yún(雲)을 선택하십시오.

Blink example (File > Examples > 01Basics > Blink)을 열고 board에 스케치를 업로드하십시오. 관리자 암호를 묻는 메시지가 나타납니다. 구성 화면에서 입력 한 것을 사용하십시오.

프로그램이 업로드되면 32U4 프로세서가 다시 시작됩니다. 13 번 핀에 연결된 LED가 깜박 거려야합니다.


Using the onboard Ethernet


Yun을 Ethernet 케이블로 유선 네트워크에 연결하면 DHCP를 통해 자동으로 연결을 시도합니다. board는 Wi-Fi와 마찬가지로 포트 메뉴에 표시됩니다.

Yun을 컴퓨터에 직접 연결하려면 컴퓨터의 인터페이스가 고정 IP 주소를 갖도록 구성하거나 DHCP 서버의 역할을 수행하십시오.

NB : Ethernet 인터페이스는 eth1이 아니라 eth0입니다.


Tutorial (English)





Tutorial (Korean)






Communicating with LininoOS via Bridge


Bridge 라이브러리는 Arduino와 LininoOS 간의 통신을 가능하게합니다. 아래에 표현된 대로 둘 사이에서 서로 다른 종류의 커뮤니케이션을 용이하게 해 주는 여러개의 utility class들이 있습니다. 좀 더 자세한 내용은 Bridge library reference 페이지를 참조하세요.





WiFi 및 Ethernet 인터페이스, USB 호스트 및 SD 카드는 모두 AR9331에 연결됩니다. Bridge 라이브러리를 사용하면 이러한 장치로 작업하고 스크립트를 실행하고 웹 서비스와 통신 할 수 있습니다.


The Console

Bridge를 기반으로 한 콘솔을 사용하면 직렬 모니터에서와 같이 무선으로 정보를 Yún(雲)에서 컴퓨터로 보낼 수 있습니다. 그것은 SSH를 통해 Yún(雲)과 컴퓨터 사이의 보안 연결을 만듭니다.

다음을 Yún(雲)에 Load 하세요.

#include <Console.h>

const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into

void setup() {
  // initialize serial communication:
  Bridge.begin();
  Console.begin();

  while (!Console){
    ; // wait for Console port to connect.
  }
  Console.println("You're connected to the Console!!!!");
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // see if there's incoming serial data:
  if (Console.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Console.read();
    // if it's a capital H (ASCII 72), turn on the LED:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    // if it's an L (ASCII 76) turn off the LED:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
  delay(100);
}




콘솔을 보려면 포트 메뉴에서 Yún(雲)의 이름과 IP 주소를 선택하십시오. Yún(雲)은 컴퓨터가 Yún(雲)과 동일한 LAN에있는 경우에만 포트 메뉴에 나타납니다. board가 다른 네트워크에 있으면 Ports (포트) 메뉴에 표시되지 않습니다. 포트 모니터를 엽니 다. Yún(雲)의 암호를 묻는 메시지가 나타납니다.


터미널 창을 열고 ssh root@yourYunsName.local 'telnet localhost 6571'을 입력 한 다음 enter를 눌러 콘솔을 볼 수도 있습니다.


주의 : Windows를 사용하는 경우 터미널 에뮬레이터를 설치해야합니다. PuTTY는 좋은 프로그램입니다. PuTTY에서는 위의 두 명령을 별도로 입력해야합니다.


'H'를 입력하면 핀 13의 LED가 켜지고 'L'을 입력하면 LED가 꺼집니다.


Process


프로세스 명령을 사용하면 Arduino를 통해 LininoOS에서 Linux 프로세스를 실행할 수 있습니다.

다음 예에서 LininoOS는 curl을 사용하여 서버에 연결하고 ASCII 텍스트를 다운로드합니다. 텍스트를 직렬 연결로 인쇄합니다.

#include <Process.h>

void setup() {
  // Initialize Bridge
  Bridge.begin();

  // Initialize Serial
  Serial.begin(9600);

  // Wait until a Serial Monitor is connected.
  while (!Serial);

  // run various example processes
  runCurl();
}

void loop() {
  // Do nothing here.
}

void runCurl() {
  // Launch "curl" command and get Arduino ascii art logo from the network
  // curl is command line program for transferring data using different internet protocols
  Process p;        // Create a process and call it "p"
  p.begin("curl");  // Process that launch the "curl" command
  p.addParameter("http://arduino.cc/asciilogo.txt"); // Add the URL parameter to "curl"
  p.run();      // Run the process and wait for its termination

  // Print arduino logo over the Serial
  // A process output can be read with the stream methods
  while (p.available()>0) {
    char c = p.read();
    Serial.print(c);
  }
  // Ensure the last bit of data is sent.
  Serial.flush();
}




Using Bridge to pass information between processors

Bridge를 사용하면 키 / 값 쌍을 사용하여 두 프로세서간에 정보를 전달할 수 있습니다.

이 예제는 Bridge 라이브러리를 사용하여 REST 호출을 통해 board의 디지털 및 아날로그 핀에 액세스하는 방법을 보여줍니다. 브라우저를 통해 REST 스타일 호출을 사용할 때 자신의 API를 만드는 방법을 보여줍니다.

이 예제를 실행할 때 컴퓨터가 Yun과 동일한 네트워크에 있는지 확인하십시오.

board를 프로그래밍했으면 핀에 값을 요청하고 핀에 값을 쓰고 핀을 입력 또는 출력으로 구성 할 수 있습니다.

REST 암호가 해제되어 있으면 다음과 같은 URL 구조의 브라우저를 사용할 수 있습니다.



원하는 경우 브라우저 대신 명령 행에서 curl 명령을 사용할 수 있습니다.

Bridge, YunServer 및 YunClient 라이브러리를 포함해야합니다.


#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>



Yun이 연결된 클라이언트를 청취 할 수 있도록 서버를 인스턴스화하십시오.

YunServer server;

setup ()에서 디버깅을 위해 직렬 통신을 시작하고 Bridge가 시작되는 동안 핀 13의 내장 LED를 HIGH로 설정하십시오. Bridge.begin ()이 (가) 차단 중이며 완료하는 데 약 2 초가 걸립니다. 브리지가 시동되면 LED를 끄십시오.

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);



setup ()의 두 번째 부분에서는 YunServer의 인스턴스에 localhost에서만 들어오는 연결을 수신 대기하도록 지시합니다. LininoOS와의 연결은 핀 분석 및 제어를 위해 32U4 프로세서로 전달됩니다. 이것은 포트 5555에서 발생합니다. server.begin ()을 사용하여 서버를 시작합니다.



server.listenOnLocalhost();
  server.begin();
}


loop ()에서 YunClient의 인스턴스를 만들어 연결을 관리합니다. 클라이언트가 연결되면 사용자 정의 기능 (아래 설명 참조)에서 요청을 처리하고 완료되면 연결을 닫습니다.

루프 ()의 끝 부분에 지연을 두는 것은 프로세서가 너무 많은 일을하지 않도록하는 데 도움이됩니다.


void loop() {
  YunClient client = server.accept();

  if (client) {
    process(client);
    client.stop();
  }

  delay(50);
}



YunClient를 인수로 사용하는 process라는 함수를 만듭니다. 들어오는 정보를 보관할 문자열을 작성하여 명령을 읽으십시오. REST 명령을 기능 (디지털, 아날로그 및 모드)별로 구문 분석하고 해당 이름이 지정된 함수에 정보를 전달하십시오.


void process(YunClient client) {
  String command = client.readStringUntil('/');

  if (command == "digital") {
    digitalCommand(client);
  }
  if (command == "analog") {
    analogCommand(client);
  }
  if (command == "mode") {
    modeCommand(client);
  }
}




디지털 명령을 처리하는 함수를 만듭니다. 클라이언트를 인수로 승인하십시오. 명령의 핀과 값을 보유 할 로컬 변수를 작성하십시오.

void digitalCommand(YunClient client) {
  int pin, value;


 
client.parseInt ()를 사용하여 핀에 대한 클라이언트의 요청을 구문 분석하십시오.

핀의 뒤의 문자가 「/」의 경우는, URL가 1 또는 0의 값을 가지는 것을 의미합니다. 이 값은 핀에 값을 할당하여 HIGH 또는 LOW로 만듭니다. 말미의 「/」가없는 경우, 지정된 핀으로부터 값을 읽어들입니다.

pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    digitalWrite(pin, value);
  }
  else {
    value = digitalRead(pin);
  }


값을 클라이언트에 인쇄하고 데이터 저장소 키를 현재 핀 값으로 업데이트하십시오.

F ()에서 클라이언트에 값을 래핑하면 플래시 메모리 형태로 인쇄됩니다. 이렇게하면 URL과 같은 긴 문자열을 처리 할 때 유용한 SRAM의 공간을 절약 할 수 있습니다.

키는 핀이 될 것이고, 타입이 될 것이다. 예를 들어 디지털 핀 2에 대해 D2가 저장됩니다.이 값은 핀이 현재 설정되어 있거나 핀에서 읽은 값이됩니다.

client.print(F("Pin D"));
  client.print(pin);
  client.print(F(" set to "));
  client.println(value);

  String key = "D";
  key += pin;
  Bridge.put(key, String(value));
}


아날로그 입력 핀으로 작업 할 때 D 대신 A로 키를 설정하는 것을 제외하면 동일한 방식으로 아날로그 통화를 처리하는 기능을 설정하십시오.


void analogCommand(YunClient client) {
  int pin, value;

  pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    analogWrite(pin, value);

    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" set to analog "));
    client.println(value);

    String key = "D";
    key += pin;
    Bridge.put(key, String(value));
  }
  else {
    value = analogRead(pin);

    client.print(F("Pin A"));
    client.print(pin);
    client.print(F(" reads analog "));
    client.println(value);

    String key = "A";
    key += pin;
    Bridge.put(key, String(value));
  }
}




핀 모드 변경을 처리하는 하나 이상의 함수를 만듭니다. YunClient를 인수로 받아들이고 핀 번호를 저장할 로컬 변수를 만듭니다. 디지털 및 아날로그 기능에서와 마찬가지로 핀 값을 읽습니다.

void modeCommand(YunClient client) {
  int pin;
  pin = client.parseInt();



URL이 올바른지 확인하십시오.


if (client.read() != '/') {
    client.println(F("error"));
    return;
  }



유효한 URL 인 경우 URL을 문자열로 저장하십시오. 모드가 입출력이면, 핀을 구성하여 클라이언트에보고하십시오. 문자열이이 값과 일치하지 않으면 오류를 반환합니다.

String mode = client.readStringUntil('\r');

  if (mode == "input") {
    pinMode(pin, INPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as INPUT!"));
    return;
  }

  if (mode == "output") {
    pinMode(pin, OUTPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as OUTPUT!"));
    return;
  }

  client.print(F("error: invalid mode "));
  client.print(mode);
}


이 예제에 대한 자세한 내용은 Bridge Example 페이지에서 확인할 수 있습니다.




최종 수정 2011 년 11 월 4 일 SM

Arduino 시작 안내서의 텍스트는 Creative Commons Attribution-ShareAlike 3.0 License에 따라 사용이 허가되었습니다. 가이드의 코드 샘플은 공개 도메인으로 배포됩니다.

저작자 표시 비영리 동일 조건 변경 허락
신고

티스토리 툴바