본문 바로가기

IT/IoT

Waspmote PRO v1.2 실습

 전체 키트

A) Waspmote board

일반적인 데이터(General data):

구분 세부사항
마이크로컨트롤러(Microcontroller) ATmega1281
주파수(Frequency) 14.7456MHz
SRAM 8KB
EEPROM 4KB
FLASH 128KB
SD Card 2GB
중량(Weight) 20g
치수(Dimensions) 73.5*51*13 mm
온도범위(Temperature Range) [-10℃, +65℃]
시계(Clock) RTC(32KHz): Real Time Clock

소비(Consumption):

구분 세부사항
ON 15mA
Sleep 55μA
Deep Sleep 55μA
최대 절전 모드

(Hibernate)

0.07μA
재충전없이 작동(Operation without recharging) 1년*

*최대 절전 모드를 에너지 절약 모드로 사용하여 얻은 시간(Time obtained using the Hibernate mode as energy saving mode)

입/출력(Inputs/Outputs):

7Analog(I), 8digital(I/O), 1PWM, 2UART, 1I2C, 1USB, 1SPI

전기 데이터(Electrical data):

구분 세부사항
배터리 전압(Battery voltage) 3.3V-4.2V
USB 충전(USB charging) 5V - 100mA
태양 전지 패널 충전(Solar panel charging) 6 - 12 V - 280mA

보드에 내장된 센서(Built-in sensors on the board):

구분 세부사항
온도(Temperature)(+/-) -40℃, +85℃. 정확성:0.25℃
가속도계(Accelerometer) ±2g/±4g/±8g
저전력(Low power) 0.5/1/2/5/10 Hz
일반모드(Normal mode) 50Hz/ 100Hz/ 400Hz/1000Hz)

B) Events 2.0 Sensor

B-1)온도 센서(Temperature Sensor)-MCP9700A

특성(Specifications)

구분 세부사항
측정범위(Measurement range) [-40℃, +125℃]
출력전압(Output voltage(0˚)) 500mV
감도(Sensitivity) 10mV/℃
정확도(Accuracy) ±2℃(range 0℃ ~ +70℃), ±4℃(range -40 ~ +125℃)
전형적인 소비량(Typical consumption) 6μA
최대 소비량(Maximum consumption) 12μA

측정과정(Measurement Process)

MCP9700A는 온도 값을 비례 아날로그 전압으로 변환하는 아날로그 센서입니다. 출력 전압 범위는 100mV (-40°) ~ 1.75V (125°C)이며, 이로 인해 10mV/°C의 변동이 발생하며 0°C의 출력은 500mV입니다. 아날로그 센서이므로 커넥터 5 또는 6에 놓아야합니다.

마이크로 칩 센서의 데이터 시트에서 얻은 온도에 따른 MCP9700A 센서 출력 전압의 그래프

실습

센서를 읽는 코드는 다음과 같습니다.

float value;
{
    SensorEventv20.ON();
    delay(10);
    value = SensorEventv20.readValue(SOCKET, SENS_TEMPERATURE);
}

값은 섭씨 온도 (ºC)의 온도가 저장되는 부동 변수입니다.

소켓은 센서가 놓여있는 커넥터를 나타냅니다 (이 센서의 경우 SENS_SOCKET5 및 SENS_SOCKET6 일 수 있음).

!!!!!!!!!!!!!!!!!!!SENS_SOCKET5만 가능!!!!!!!!!!!!!!!!!!!!

float temperature = 0.0;

void setup()
{
  // Open the USB connection
  USB.ON();
  USB.println(F("USB port started..."));

}

void loop()
{  
  // read temperature sensor connected to ANALOG6 pin
  temperature = Utils.readTemperature();
  USB.print(F("Value of temperature: "));
  USB.print(temperature);
  USB.println(F(" Celsius degrees"));
  
  USB.println(F("------------------------------------------------------"));
  delay(1000); 
}

B-2)광도센서-Luminosity Sensor (LDR)

특성(Specifications)

구분 세부사항
어둠 저항(Resistance in darkness) 20MΩ
빛의 저항(Resistance in light)(10lux) 5 ~ 20kΩ
스펙트럼 범위(Spectral range) 400 ~ 700nm
동작 온도(Operating temperature) -30℃ ~ +75℃
최소 소비(Minimum consumption) 0μA*

참고 : 이 센서는 빛의 "표준 강도"가있는 경우 곧 포화되므로 "중간 빛"과 "많은 빛"을 구별 할 수 없습니다. 사실, 센서는 빛의 존재를 감지하는 데 더 적합합니다. Libelium은 빛의 정확한 측정을 요구하는 고급 어플리케이션을 위해 Luminosity (luxes accuracy) 센서 프로브를 권장합니다. Plug & Sense 라인의 Ambient Control 모델에서 사용할 수 있습니다.

자세한 내용은 Plug & Sense! Sensor guide의 "Ambient Control"장을 참조하십시오.

*이 센서의 소비량은 커넥터를 장착 할 수있는 소비 범위에 포함됩니다. ( "Consumption table"절 참조)

측정과정(Measurement Process)

이것은 감광성 부분에 수신되는 빛의 강도에 따라 전도도가 달라지며 측정 할 광도의 범위에 따라 커넥터 또는 소켓 1, 2 및 3 중 하나에 위치해야합니다 (1 매우 낮은 광도에서의 측정, 높은 광도에서의 측정에 대해서는 2 및 3).

측정 가능한 스펙트럼 범위 (400nm - 700nm)는 사람의 눈으로 볼 수있는 스펙트럼과 일치하므로 사람의 눈으로 감지하는 것과 같은 방식으로 빛 / 어둠을 감지하는 데 사용할 수 있습니다.

실습

센서를 읽는 코드는 다음과 같습니다.

float value;
{
	 SensorEventv20.ON();
	 delay(10);
	 value = SensorEventv20.readValue(SOCKET, SENS_RESISTIVE);
}

value는 in kilohhms의 저항이 저장되는 float 변수입니다.

SOCKET은 센서가 놓여있는 커넥터를 나타냅니다 (이 센서의 경우 SENS_SOCKET1, SENS_SOCKET2 및 SENS_SOCKET3 일 수 있음).

!!!!!!!!!!!

#include <WaspSensorAgr_v20.h>


// 읽은 값을 저장하는 변수
float value;

void setup()
{
  // USB를 켜고 시작 메시지를 출력하십시오.
  USB.ON();
  USB.println(F("start"));
  delay(100);

  // 센서 보드를 켜십시오.
  SensorAgrv20.ON();
  
  // RTC를 켭니다.
  RTC.ON();
  
}
 
void loop()
{
  // Part 1: 센서 판독
  // 센서를 켜고 안정화 및 응답 시간을 기다립니다.
  SensorAgrv20.setSensorMode(SENS_ON, SENS_AGR_LDR);
  delay(100);
  
  // LDR sensor 읽습니다.
  value = SensorAgrv20.readValue(SENS_AGR_LDR);
  
  // sensor를 끕니다.
  SensorAgrv20.setSensorMode(SENS_OFF, SENS_AGR_LDR);
  
  // Part 2: USB printing
  // USB를 통해 LDR 값을 인쇄하십시오.
  USB.print(F("Luminosity: "));
  USB.print(value);
  USB.println(F("V"));
  
  delay(1000);
}

B-3)물체의 유무 센서-Presence Sensor(PIR)

특성(Specifications)

Height: 25.4mm

Width: 24.3mm

Length:28.0mm

Consumption:100μA

Range of detection: 6~7m

Spectral range:~10μm

측정과정(Measurement Process)

PIR 센서 (Passive Infra-Red)는 적외선 수신 장치와 적외선 수신 장치의 수신 레벨 변화에 대한 모니터링을 기반으로하는 초점 렌즈로 주로 구성된 초전 센서입니다. 출력 신호를 high로 설정한다. 디지털 센서이므로 커넥터 7에 있어야합니다. 10μm 스펙트럼은 대부분 36 ° C의 온도에서 방출되는 포유 동물의 열 방출에 해당합니다.

최대 감지 방향이 이벤트 센서 보드 2.0에 수직이되므로 PIR 센서를 사용할 때 Waspmote를 지면에 수직으로 놓는 것이 좋습니다.

실습

센서를 읽는 코드는 다음과 같습니다.

int value;
{
	 SensorEventv20.ON();
	 delay(10);
	 value = SensorEventv20.readValue(SENS_SOCKET7);
}

값(Value)은 센서 상태 (존재 여부를 나타내는 높은 값 ( '1') 또는 낮은 값 ( '0'))가 저장되는 정수 변수입니다.

#include <WaspSensorEvent_v20.h>

// 읽은 값을 저장하는 변수
float value;


void setup()
{
  // 1. 모듈 초기화  

  // USB를 켜고 시작 메시지를 출력하십시오.
  USB.ON();
  USB.println(F("start"));

  // 센서 보드를 켜십시오.
  SensorEventv20.ON();

  // RTC를 켭니다.
  RTC.ON();
  
  // 먼저, 신호 안정화를 기다린다.  
  while( digitalRead(DIGITAL5) == 1 )
  {    
    USB.println(F("...wait for stabilization"));
    delay(1000);
  }

  // 보드로 부터 인터럽트를 허용합니다.
  SensorEventv20.attachInt();

}


void loop()
{
  ///////////////////////////////////////
  // 1. 센서 전압 출력 읽기
  ///////////////////////////////////////

  // 센서 전압 출력을 읽습니다.
  value = SensorEventv20.readValue(SENS_SOCKET7);

  // Print the info
  USB.print(F("Sensor output: "));    
  USB.print(value);
  USB.println(F(" Volts"));

  
  ///////////////////////////////////////
  // 2. '딥 슬립 모드'로 이동합니다.
  ///////////////////////////////////////
  USB.println(F("enter deep sleep"));
  PWR.deepSleep("00:00:00:10",RTC_OFFSET,RTC_ALM1_MODE1,SOCKET0_OFF);

  USB.ON();
  USB.println(F("wake up\n"));



  ///////////////////////////////////////
  // 3. 중단 플래그를 확인하십시오.
  ///////////////////////////////////////
   
  // 3.1. 센서 보드에서 중단을 확인하십시오.
  if(intFlag & SENS_INT)
  {
    interrupt_function();
  }

  // 3.2. RTC 알람의 중단 확인
  if( intFlag & RTC_INT )
  {   
    USB.println(F("-----------------------------"));
    USB.println(F("RTC INT captured"));
    USB.println(F("-----------------------------"));
  
    // clear flag
    intFlag &= ~(RTC_INT);
  }
}

 





/**********************************************
 *
 * interrupt_function()
 *  
 * Local function to treat the sensor interruption
 *
 *
 ***********************************************/
void interrupt_function()
{  
  // 보드에서 중단을 비활성화합니다.
  SensorEventv20.detachInt();

  // 인터럽트 플래그를 로드합니다.
  SensorEventv20.loadInt();  

  // 소켓 7에서 중단이 발생한 경우
  if( SensorEventv20.intFlag & SENS_SOCKET7)
  {
    USB.println(F("-----------------------------"));
    USB.println(F("Interruption from socket 7"));
    USB.println(F("-----------------------------"));
  }

  // 출력 및 중단을 활성화합니다.
  USB.println(F("Presence detected\n"));   

  // 사용자는 경고를 구현해야합니다.
  // 이 예제에서는 신호 안정화가 새로운 인터럽트를 생성하기를 기다립니다.
  while( digitalRead(DIGITAL5) == 1 )
  {    
    USB.println(F("...wait for stabilization"));
    delay(1000);
  }

  // 인터럽트 플래그를 지운다.
  intFlag &= ~(SENS_INT);

  // 보드에서 중단을 활성화합니다.
  SensorEventv20.attachInt();

}

D) Batteries

배터리를 Waspmote에 연결하십시오. Waspmote를 사용하기 전에 적어도 24 시간 동안 배터리를 충전해야한다는 것을 기억하십시오.

E) USB-PC interface

모델(Model): Waspmote Gateway*

통신(Communication): 802.15.4/ZigBee - USB PC

프로그래밍 가능한 버튼 및 LED(Programmable buttons and leds)

*개발자 키트에 포함됨(included in the developers Kit)

컴파일러(compiler):

  • IDE-Waspmote(open source)
  • 언어(Language):C++
  • Versions: Windows, Linux and Mac-OS

Waspmote_technical_guide

Waspmote와의 상호 작용

Waspmote 게이트웨이로 XBee 프레임 받기( Receiving XBee frames with Waspmote Gateway )

Waspmote 게이트웨이

이 장치는 표준 USB 포트가있는 PC 또는 장치에 센서 네트워크를 통해 흐르는 데이터를 수집 할 수 있습니다. Waspmote Gateway는 센서 네트워크와 수신 장비 사이의 "데이터 브리지 또는 액세스 지점"(”data bridge or access point”)역할을합니다. 이 수신 장비는 응용 프로그램의 특정 요구에 따라 수신 된 데이터를 저장하고 사용하는 일을 담당합니다.

수신 장비는 Linux, Windows 또는 Mac OS가 설치된 PC 또는 표준 USB 연결과 호환되는 모든 장치가 될 수 있습니다. 게이트웨이는 male USB A 커넥터를 제공하므로 수신 장치에는 famale USB A 커넥터가 있어야합니다. 게이트웨이가 올바르게 설치되면 XBee 모듈의 UART에 직접 연결되는 새로운 통신 직렬 포트가 수신 장비에 나타나므로 XBee는 장치와 직접 통신 할 수 있으며 센서 네트워크에서 데이터 패킷을 수신 할뿐만 아니라 수정 및 / 또는 XBee의 구성 매개 변수를 참조하십시오. 지적할만한 또 다른 중요한 기능은 XBee 모듈의 펌웨어를 업데이트하거나 변경할 수 있다는 것입니다.

LEDs

네 개의 표시기 LED가 게이트웨이에 포함되어 있습니다.

• USB 전원 LED : 보드가 USB 포트를 통해 전원이 공급됨을 나타냅니다.

• RX LED : 보드가 USB 포트에서 데이터를 수신하고 있음을 나타냅니다.

• TX LED : 보드가 USB 포트로 데이터를 전송 중임을 나타냅니다.

• I/O 5 구성 가능 LED : 연결

XBee의 I/O 5 핀에 연결된 구성 가능한 LED는 XBee의 디지털 출력 또는 XBee의 센서 네트워크 연결 표시로 구성 할 수 있습니다.

Buttons

• 재설정 : XBee 모듈을 재설정 할 수 있습니다.

• I/O - 0 : XBee의 I / O 핀 0에 연결된 버튼

• I/O -1 : XBee의 I / O 핀 1에 연결된 버튼

• RTS - I / O - 6 : XBee의 I / O 핀 6에 연결된 버튼

모든 버튼은 눌려지면 해당 데이터 라인 각각을 GND와 연결합니다. 이들 중 어느 것도 풀업 저항을 가지고 있지 않으므로 필요한 용도에 따라 XBee의 내부 풀업 저항을 활성화해야 할 수도 있습니다.

Linux receiver

Linux를 사용할 때 다양한 응용 프로그램을 사용하여 직렬 포트에서 입력을 캡처 할 수 있습니다. Libelium은 'Cutecom'응용 프로그램을 사용할 것을 권장합니다. 응용 프로그램이 시작되면 Waspmote가 연결된 속도와 USB를 구성해야합니다. 선택해야하는 속도는 Waspmote에 설정된 표준 속도 인 115200bps입니다. Waspmote가 연결된 USB는이 응용 프로그램이 처음 실행될 때 추가되어야하며 Waspmote가 연결된 위치에 따라 USB0, USB1 등 (각 컴퓨터의 USB 번호까지)을 추가해야합니다. 이를 위해 Waspmote가 USB0에 연결된 경우이 창에 '/ dev / ttyUSB0'이 포함되도록 '장치'창을 수정해야합니다. 이 매개 변수가 구성되면 '장치 열기'버튼을 눌러 캡처를 시작합니다.

Linux Sniffer

터미널을 사용하여 센서 정보를 볼 수있을 뿐 만 아니라 이 캡처 된 데이터를 파일에 덤프하거나 다른 프로그램에 전달하여 사용 또는 확인하도록 허용하는 응용 프로그램이 개발되었습니다.

파일:

"sniffer.c"

Linux에서 컴파일 :

gcc sniffer.c -o sniffer

사용 예 :

- 수신 된 데이터보기 : ./sniffer USB0

- 받은 데이터를 파일로 덤핑 : ./sniffer USB0 >> data.txt

- 받은 값을 다른 프로그램에 전달 : ./sniffer USB0 | program

참고 :이 예제에 사용 된 속도는 19200bps입니다. 최종 속도는 XBee 모듈이 구성된 속도에 따라 달라집니다 (기본값 115200).

Code:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <termios.h> /* Terminal control library (POSIX) */
#define MAX 100
main(int argc, char *argv[])
{
    int sd = 3;
    char *serialPort ="";
    char *serialPort0 = "/dev/ttyS0";
    char *serialPort1 = "/dev/ttyS1";
    char *USBserialPort0 = "/dev/ttyUSB0";
    char *USBserialPort1 = "/dev/ttyUSBS1";
    char valor[MAX] = "";
    char c;
    char *val;
    struct termios opciones;
    int num;
    char *s0 = "S0";
    char *s1 = "S1";
    char *u0 = "USB0";
    char *u1 = "USB1";
    if (argc != 2)
    {
        fprintf(stderr,"Usage : % s[port]\nValid ports : (S0, S1, USB0, USB1)\n", argv[0], serialPort);
        exit(0);
    }
    if (!strcmp(argv[1], s0))
    {
        fprintf(stderr,"ttyS0 chosen\n...");
        serialPort = serialPort0;
    }
    if (!strcmp(argv[1], s1))
    {
        fprintf(stderr,"ttyS1 chosen\n...");
        serialPort = serialPort1;
    }
    if (!strcmp(argv[1], u0))
    {
        fprintf(stderr,"ttyUSB0 chosen\n...");
        serialPort = USBserialPort0;
    }
    if (!strcmp(argv[1], u1))
    {
        fprintf(stderr,"ttyUSB1 chosen\n...");
        serialPort = USBserialPort1;
    }
    if (!strcmp(serialPort, ""))
    {
        fprintf(stderr, "Choose a valid port(S0, S1, USB0, USB1)\n", serialPort);
        exit(0);
    }
    if ((sd = open(serialPort, O_RDWR | O_NOCTTY | O_NDELAY)) == -1)
    {
        fprintf(stderr,"Unable to open the serial port % s - \n", serialPort);
        exit(-1);
    }
    else
    {
        if (!sd)
        {
            sd = open(serialPort, O_RDWR | O_NOCTTY | O_NDELAY);
        }
        //fprintf(stderr,”Serial Port open at: %i\n”, sd);
        fcntl(sd, F_SETFL, 0);
    }
    tcgetattr(sd, &opciones);
    cfsetispeed(&opciones, B19200);
    cfsetospeed(&opciones, B19200);
    opciones.c_cflag |= (CLOCAL | CREAD);
    /*No parity*/
    opciones.c_cflag &= ~PARENB;
    opciones.c_cflag &= ~CSTOPB;
    opciones.c_cflag &= ~CSIZE;
    opciones.c_cflag |= CS8;
    /*raw input:
 * making the applycation ready to receive*/
    opciones.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    /*Ignore parity errors*/
    opciones.c_iflag |= ~(INPCK | ISTRIP | PARMRK);
    opciones.c_iflag |= IGNPAR;
    opciones.c_iflag &= ~(IXON | IXOFF | IXANY | IGNCR | IGNBRK);
    opciones.c_iflag |= BRKINT;
    /*raw output
 * making the applycation ready to transmit*/
    opciones.c_oflag &= ~OPOST;
    /*aply*/
    tcsetattr(sd, TCSANOW, &opciones);
    int j = 0;
    while (1)
    {
        read(sd, &c, 1);
        valor[j] = c;
        j++;
        // We start filling the string until the end of line char arrives
        // or we reach the end of the string. Then we write it on the screen.
        if ((c =='\n') || (j == (MAX - 1)))
        {
            int x;
            for (x = 0; x < j; x++)
            {
                write(2, &valor[x], 1);
                valor[x] = '\0';
            }
            j = 0;
        }
    }
    close(sd);
}

F) Sensor board

일반적인 설명( General Description )

Waspmote가 Sleep 모드이거나 Deep Sleep 모드 인 동안 센서는 이벤트 센서 보드 2.0에서 활성화됩니다. 센서가 이전에 프로그래밍 된 임계 값보다 높은 값을 선택하면 낮은 소비 상태에서 모트를 깨우고 어떤 센서가 신호를 생성했는지 알려주는 신호가 생성됩니다.

Waspmote가 활성 모드 (ON)에 있으면 인터럽트를 수신하고 이전 사례와 동일한 방식으로 인터럽트에 응답 할 수 있습니다.

스펙( Specifications )

이 보드는 출력이 임계 값과 비교되는 최대 8 개의 센서와 동시 연결을 허용하며, 모트를 깨우는 인터럽트 비트의 변경을 구현하는 OR 논리 게이트에서 결합됩니다. 이러한 임계 값은 시스템이 디지털 포텐쇼미터 (디지털 포텐쇼미터)를 통해 제어되기 때문에 버스 I2C를 통해 마이크로 컨트롤러에 의해 프로그래밍됩니다.

mote를 중단 한 센서는 정상적인 작동 상태에서 Waspmote가 읽을 수있는 시프트 레지스터에서 식별됩니다.

중량(Weight): 20g

치수(Dimensions): 73.5 x 51 x 1.3 mm

온도 범위(Temperature Range): [-20ºC, 65ºC]

전기적 특성(Electrical Characteristics)

•보드 전원 전압( Board power voltages ): 3.3V

•센서 전원 전압( Sensor power voltage): 3.3V

•최대 허용 전류-연속(Maximum admitted current-continuous): 200mA

•최대 허용 전류- 피크(Maximum admitted current-peak): 400mA

G) SD card

Waspmote에 SD card를 넣습니다.

실습

create_delete_file

// define file name: MUST be 8.3 SHORT FILE NAME
char filename[]="FILE1.TXT";


void setup()
{
  // USB port 열기
  USB.ON();
  USB.println(F("SD_1 example"));

  // SD ON으로 설정
  SD.ON();

  // file 삭제
  if(SD.del(filename)) 
  {
    USB.println(F("file deleted"));
  }
  else 
  {
    USB.println(F("file NOT deleted"));  
  }

}


void loop()
{  
  // file1 생성
  if(SD.create(filename))
  {
    USB.println(F("file created"));
  }
  else 
  {
    USB.println(F("file NOT created"));  
  }  
    
  delay(5000);


}

실습하기

Software(소프트웨어)

  • Waspmote IDE 만 사용하여 업로드하십시오. 다른 IDE를 사용하면 Waspmote가 손상되어 응답하지 않을 수 있습니다. 이 사용은 보증 범위에 포함되지 않습니다.
  • 코드를 업로드하는 동안 모든 커넥터를 분리하지 마십시오. Waspmote가 응답하지 않을 수 있습니다. 이 사용은 보증 범위에 포함되지 않습니다.
  • Waspmote가 켜져있는 동안 커넥터를 연결하거나 분리하지 마십시오. Waspmote가 불안정하거나 응답하지 않아 내부 부품이 손상 될 수 있습니다. 이 사실은 보증 범위에 포함되지 않습니다.

Hardware(하드웨어)

  • Waspmote를 액체에 담그지 마십시오.
  • 충격과 혹은 큰 진동에 노출 될 수있는 장소 또는 장비에 노드를 두지 마십시오.
  • Waspmote를 -10ºC 이하 또는 50ºC 이상의 온도에 노출시키지 마십시오.
  • Libelium이 제공 한 원본과 다른 전원으로 Waspmote에 전원을 공급하지 마십시오. 최대 전압 및 전류 등급이 초과되어 Waspmote가 작동하고 보증이 무효화 될 수 있습니다.
  • 솔라 패널 커넥터에 센서를 연결하지 말고 솔라 패널을 센서 커넥터에 연결하지 마십시오.
  • Waspmote가 손상되어 보증이 무효화 될 수 있습니다.
  • Libelium에서 제공하지 않은 센서를 연결하지 마십시오.
  • Waspmote를 물이 장치에 닿을 수있는 곳에 두지 마십시오.
  • 자세한 정보 : http://www.libelium.com

Waspmote IDE: Download and Installation 

IDE: Integrated Development Environment

소프트웨어 개발을위한 포괄적인 기능을 제공하는 응용 프로그램입니다.

API: Application Programming Interface

Setup function

초기 구성 용입니다.

보드가 켜지면 한 번만 실행됩니다.

처음에 한 번만 실행하려는 코드를 포함하십시오.

loop function

순환 적으로 실행되어 무한 루프를 만듭니다.

플랫폼 및 기능을 사용하여 여러 모듈을 관리하는 방법을 지정합니다.

첫 번째 단계는 Waspmote를 프로그래밍하는 데 사용되는 Waspmote-IDE (통합 개발 환경)를 설치하는 것입니다. 이 IDE는 여기에서 찾을 수 있습니다.

http://www.libelium.com/development/waspmote

Linux

Waspmote를 올바르게 컴파일하고 사용하려면 Atmel 마이크로 컨트롤러 및 Java 환경 용 컴파일러 버전과 관련된 일부 패킷을 설치해야합니다.

a) Installing Java

첫 번째 단계는 필요한 Java 환경 버전을 설치하는 것입니다. Synaptic 패키지 관리자 나 터미널을 사용할 수 있습니다. Synaptic 패키지 관리자를 사용하여 "sun-java6-jre"패키지를 찾아 설치해야합니다. 터미널을 사용하여 다음과 같이 apt-get 명령을 사용해야합니다.

sudo apt-get install sun-java6-jre

b) Installing AVR-GCC Compiler

다음 단계는 Waspmote ATMEGA 1281 마이크로 컨트롤러를 프로그래밍 할 수 있도록 필요한 버전의 avr-gcc 컴파일러를 설치하는 것입니다. Synaptic 패키지 관리자 나 터미널을 사용할 수 있습니다. 시냅틱을 사용하여 "gcc-avr"패키지를 찾아서 설치해야합니다. 터미널을 사용하여 다음과 같은 방법으로 apt-get 명령을 사용해야합니다.

sudo apt-get install gcc-avr

c) Installing lib-avc Library

다음 단계는 필요한 버전의 lib-avc 라이브러리를 설치하는 것입니다. Synaptic 패키지 관리자 나 터미널을 사용할 수 있습니다. Synaptic을 사용하여 "lib-avc"패키지를 찾아 설치해야합니다. 터미널을 사용하여 다음과 같은 방법으로 apt-get 명령을 사용해야합니다.

sudo apt-get install avr-libc

d) Running Waspmote IDE

Waspmote 설치는 이전 단계에서 다운로드 한 파일을 선택한 폴더로 압축 해제합니다. 다운로드 한 파일의 압축을 풀면 Waspmote라는 파일을 실행하여 IDE를 시작해야합니다.

먼저 PyPar2를 실행할 수 있도록 PyPar2를 설치해야합니다.

sudo apt-get update
sudo apt-get install pypar2

설치가 완료된 후에 압축파일을 푼 폴더 안으로 들어가서 waspmote를 실행합니다.

cd ~/waspmote-pro-ide-v04-linux64
./waspmote

Receiving Frames from Waspmote(Waspmote에서 프레임 수신)

Waspmote 게이트웨이에서(In Waspmote Gateway)

Waspmote는 장치의 올바른 작동을 점검 할 수있는 프로그램으로 공장에서 미리 구성됩니다. 이 프로그램은 표준 프레임을 게이트웨이로 보냅니다. wasp_pro_test_code.pde라고하며 IDE와 이 링크에서 항상 사용할 수 있습니다.

http://www.libelium.com/development/waspmote/examples/waspmote-pro-test-code/

이 프로그램은 다음 무선 모듈에 무선 프레임을 전송합니다.

  • XBee 802.15.4
  • XBee 868MHz
  • XBee 900MHz
  • XBee Digimesh
  • XBee ZigBee
  • LoRa

다른 모듈의 경우 프로그램이 작동하지만 USB를 통해 프레임을 보내도록 연결이 제한됩니다.

단계 :

  1. 드라이버 및 직렬 모니터 소프트웨어를 컴퓨터에 설치하십시오.
  2. 안테나와 원하는 나머지 구성 요소를 Waspmote 및 Waspmote 게이트웨이에 연결하십시오.
  3. Waspmote 게이트웨이를 컴퓨터의 USB 포트에 연결하십시오.
  4. 직렬 모니터 응용 프로그램을 시작하고 다음 매개 변수를 설정하십시오.

배터리를 Waspmotes에 연결하십시오.

Waspmotes를 ON 위치로 전환하십시오.

프로그램이 시작되면 다음 작업을 순차적으로 실행합니다.

  • 상태 1 - 5 초 동안 LED가 켜짐
  • 상태 2 - 3 초 동안 LED가 깜박입니다.
  • 상태 3 - 메시지 보내기

상태 1과 2는 한 번만 (프로그램이 시작될 때) 실행되며 상태 3은 매 초마다 무한 반복됩니다 (Waspmote를 재설정하면 프로그램이 다시 시작됩니다).

모든 패킷에는 Waspmote 데이터 프레임 형식의 센서 데이터가 포함 된 메시지가 포함되어 있습니다. 프레임에 추가 된 센서 필드는 다음과 같습니다.

가속도계 값, RTC 내부 온도 값 및 배터리 수준. XBee가 DigiMesh 프로토콜을 사용하지 않는 경우 길이 제한 때문에 MAC 주소가 추가됩니다. 자세한 내용은 Waspmote 데이터 프레임을 확인하십시오.

가이드 문서:

http://www.libelium.com/development/waspmote/documentation/?cat=programming

예시:

~\0x00I\0x90\0x00}3\0xa2\0x00@z\0xcb\0x92\0xd8\0xd3\0x02<=>\0x80\0x03#35689722##7#ACC:80;10 ;987#IN_TEMP:22.50#BAT:93#\0xb4

초기에는 프레임 헤더에 속한 몇 가지 16 진수 문자가 있으며 그 뒤에 메시지가옵니다. 위의 예에서 메시지는 다음과 같습니다.

<=>\0x80\0x03#35689722##7#ACC:80;10;987#IN_TEMP:22.50#BAT:93#

In Meshlium

Meshlium과 Waspmote가 포함 된 키트를 구입하면 Waspmtes가 이미 프레임을 게이트웨이로 보내도록 구성됩니다. 나중에 사용자가 게이트웨이로 전송하기위한 코드를 개발하면 그는 Meshlium으로 전환 할 수 있습니다.

Meshlium으로 프레임을 전송하기 전에 모듈에 대한 네트워킹 안내서를 읽고 공부하는 것이 좋습니다.

  • Waspmote 802.15.4 Networking Guide
  • Waspmote 868MHz Networking Guide
  • Waspmote 900MHz Networking Guide
  • Waspmote Digimesh Networking Guide
  • Waspmote ZigBee Networking Guide
  • Waspmote LoRa Networking Guide
  • Waspmote WiFi Networking Guide
  • Waspmote 3G+GPS Networking Guide
  • Waspmote GPRS Pro Networking Guide
  • Waspmote GPRS+GPS Networking Guide

Meshlium은 무선 모듈을 사용하여 Waspmote가 전송 한 센서 데이터를 수신하고 프레임을 로컬 데이터베이스에 저장합니다. 이는 Sensor Parser 덕분에 자동으로 수행 할 수 있습니다.

센서 파서는 Meshlium (3.0.5 버전 이상)의 기능입니다. 쉽고 투명한 방식으로 다음 작업을 수행 할 수있는 소프트웨어 시스템입니다.

• XBee / LoRa / WiFi / 3G / GPRS에서 프레임 수신 (데이터 프레임 형식 사용)

•이 프레임을 구문 분석합니다.

• 로컬 데이터베이스에 데이터 저장

• 로컬 데이터베이스를 외부 데이터베이스와 동기화합니다.

게다가, 사용자는 자신의 센서를 추가 할 수 있습니다.

Compiling a New Program

Waspmote-IDE 컴파일러를 사용하려면 컴파일러가 설치된 폴더에 'Waspmote'라는 실행 가능 스크립트를 실행해야합니다. Waspmote는 다음 그림에서 볼 수있는 4 가지 주요 부분으로 나뉩니다.

• 첫 번째 부분은 선택한 직렬 포트와 같은 일반 매개 변수를 구성 할 수있는 메뉴입니다.

• 두 번째 부분은 선택한 코드를 보드에서 확인, 열기, 저장 또는로드 할 수있는 버튼 메뉴입니다.

• 세 번째 부분에는 Waspmote에로드될 주 코드가 들어 있습니다.

• 네 번째 부분은 프로세스가 올바르게 수행되면 성공 메시지뿐만 아니라 가능한 컴파일 및로드 오류를 보여줍니다.

Waspmote-IDE 버튼 패널은 이전에 저장된 코드를 열거 나 새 코드를 만들거나 보드에 코드를로드하는 것과 같은 특정 기능을 수행 할 수있게합니다. 다음 그림은 패널과 각 버튼의 기능을 보여줍니다.

일단 프로그램이 올바르게 열리면 Waspmote에서 프로그램이 올바르게로드되도록 구성을 변경해야합니다.

'Tools / Board'탭에서 Waspmote 보드를 선택해야합니다. 선택한 API를 나타냅니다.

'Tools / Serial Port'탭에서 Waspmote가 컴퓨터에 연결된 USB를 선택해야합니다.

[Error]

도구/시리얼포트 가 비활성되어 있는 문제(USB-직렬장치가 감지되지 않음)

이유: 권한 문제로 발생한 에러로 IDE 프로그램에서 시리얼 포트 선택 버튼이 비활성화되는 문제입니다. Waspmote(및 다른 USB 직렬 장치)는 /dev/ttyUSBxxx의 형태입니다. ttyUSB0 장치에 사용자는 root, 그룹으로 dialout으로 지정되어 있습니다.

해결: 권한을 바꾸고, 기존 id(hyper)를 그룹에 추가해줘야 합니다.

장치를 연결한 후에 권한을 수정하세요.

sudo chmod a+rw /dev/ttyUSB0

#특정 그룹에 사용자를 추가하거나 제거하고 특정 그룹에 패스워드를 설정하는 작업은 gpasswd를 이용
#-a user : 특정 그룹에 새로운 그룹멤버를 추가함.
sudo gpasswd -a hyper dialout

이 두 매개 변수가 구성되면 Waspmote에 프로그램을로드 할 수 있습니다. 이 과정은 아주 간단한 예를 사용하여 설명합니다. Waspmote 환경을 배우고 익히기위한 일련의 예제가 컴파일러가 포함 된 다운로드 파일에 포함되어 있습니다.

가장 간단한 예제는 'test.pde'라는 파일입니다. 이 예제에서 텍스트 문자열 "Hello World!"가 화면에 나타납니다. 예제는 Waspmote에 프로그램을로드하는 방법과 화면에 정보를 표시하는 방법을 보여줍니다.

다음 단계는 생성 된 프로그램이 저장 될 폴더를 구성하는 것입니다. Waspmote-IDE에서이 폴더는 'sketchbook'이라고 불리며 '파일 / 환경 설정'탭에 액세스하여 구성 할 수 있습니다. 이 탭을 클릭하면 새 창이 열립니다.

스케치 북의 위치가 표시 될 수 있습니다. 스케치북 폴더 경로가 표시되면 다운로드 한 테스트 프로그램을이 폴더에 저장해야합니다.

Waspmote-IDE는 스케치북 폴더의 변경 사항과 새로 저장된 프로그램이 반영되도록 닫아야합니다.

Waspmote를 다시 실행하고 '열기'를 클릭하여 다운로드 한 테스트 프로그램을 엽니다.

압축이 풀린 경로에서 'test.pde'파일을 선택하여 엽니 다. 보시다시피, 이것은 3 초마다 LED를 켜고 화면에 "Hello World!"라고 쓰는 아주 간단한 코드입니다.

다음 단계는 Waspmote에 프로그램을로드하는 것입니다. 이렇게하려면 Waspmote가 USB를 통해 컴퓨터에 연결되어 있어야하며 '업로드'버튼을 클릭해야합니다. 그런 다음 프로그램 컴파일을 시작합니다. 프로그램이 올바르게 컴파일되면이 이벤트를 나타내는 창의 아래 부분에 메시지가 나타납니다. 반대로, 오류가 발생하면 코드에 버그를 나타내는 빨간색 메시지가 나타납니다. 컴파일이 끝나면 코드가 Waspmote에 로드됩니다.

프로그램이 올바르게 로드되면 Waspmote 창에 'Done Uploading'이라는 메시지가 나타납니다.

반대로로드하는 동안 문제가 발생하면 오류를 나타내는 빨간색 메시지가 나타납니다.

이 프로그램이 보드에로드되면로드 된 코드가 아키텍처 및 시스템 장에서 설명한대로 실행됩니다.

참고 : 게이트웨이는 단지 UART-USB 브리지입니다. 즉, 게이트웨이를 프로그래밍 할 수 없으며 코드를 업로드 할 수 없습니다.

이 기능은 XBee 또는 LoRa 모듈에서 USB로 데이터를 전달하거나 그 반대로 데이터를 전달하는 것입니다.

Uploading a New Program to Waspmote

void setup() {
    // put your setup code here, to run once:
    USB.ON();
}


void loop() {
    // put your main code here, to run repeatedly:
    Utils.blinkLEDs(1000);
    USB.println(F("Hello world, this is Waspmote!"));
    delay(2000);
}

코드를 업로드해야 할 때마다 항상 다음 단계를 수행해야합니다.

1 단계 : Waspmote를 ON으로 전환합니다 (이미지에서 스위치를 왼쪽으로 이동).

2 단계 : Waspmote를 USB 케이블을 통해 PC에 연결하십시오. Waspmote의 IDE를 열고 "도구"메뉴에서 적절한 보드 및 직렬 포트를 선택하십시오.

3 단계 : Waspmote에 대한 코드를 준비합니다. 여기서는 "hello_world"템플릿으로 이동하거나 스케치에 텍스트를 복사하여 붙여 넣습니다.

4 단계 : "hello_world"라는 이름으로 스케치를 저장하고 IDE에 "Done Saving"을 확인합니다.

5 단계 : 코드를 컴파일하고 (IDE에 버튼이 있음) 오류 또는 경고가 없는지 확인합니다. IDE는 "Done Compiling"이라고 말해야합니다.

6 단계 : Waspmote에 코드 업로드 : "업로드"버튼을 클릭하고 프로세스가 끝날 때까지 몇 초 기다리십시오. 거기에 오류 메시지가 없다는 것을 확인하십시오. "Done uploading".

[Error] Serial monitor에서 값이 깨져서 나오는 경우

통신 속도의 문제 이므로 9600baud로 설정되어 있는 것을 115200baud로 바꿔주면 제대로 출력

How to Use the Developer’s Guides

축하합니다. 여기에 도착했다면 퀵 스타트 가이드를 완료했고 Waspmote에 대한 기본 사항을 알았습니다.

다음 단계는 개발하려는 프로젝트의 종류에 따라 다릅니다. 일반적으로 Waspmote 용 프로그램은 4 부분으로 구성됩니다.

1. 구성 (RTC, 센서, 통신 모듈)

2. 판독 센서 (들)

3. 통신 (XBee, LoRa, WiFi, GPRS, ...)

4. 절전 모드로 들어갑니다.

첫 단계로 Waspmote 기술 가이드를 읽어야합니다. Waspmote는 모든 기능, 모듈 및 보드에 대해 이야기하기 때문에 좋은 소개입니다. 철저하게 사용해야하는 기능에 대한 장을 읽어야합니다.

RTC 관리 또는 전원 / 절전 기능은 거의 모든 유형의 프로젝트에 있어야하므로 시작하는 것이 좋습니다.

게다가, 그들은 제어하기가 꽤 쉽습니다. RTC 가이드와 전원 가이드를주의 깊게 읽어야합니다. 모든 기능, 모듈 또는 보드에는 많은 예제가 있으며 관련 가이드를 읽는 동안 Waspmote에서 예제를 실행해야합니다.

이것은 일을 정리하는 데 도움이되며 독서뿐만 아니라 수행함으로써 개념을 배울 수 있습니다. 어떤 경우 든, 예제는 난이도가 높아지는 순서로 배열됩니다. 즉, 하위 예제부터 시작하여 고급 예제로 이동해야합니다.

센서를 읽는 것도 쉽고 첫 번째 단계 중 하나 여야합니다. 해당 센서 안내서를 읽은 다음 관련 예제를 실행할 수 있습니다.

SD, 가속도계, EEPROM 등을 사용할 계획이라면 지금 공부해야하는 옵션 기능이나 모듈이 있습니다.

가장 어려운 부분 일 수 있으므로 마지막 단계를 위해 통신 부분을 남겨 두는 것이 좋습니다. 그 순간까지는 개발의 첫 단계에 USB를 통해 데이터를 전송하는 것이 좋습니다. 필요한만큼의 메시지를 인쇄 할 수 있으므로 유용한 중간 메시지를 인쇄 할 수 있습니다. 프레임에 대해 배워보십시오. 통신 모듈을 사용하여 공식 프레임 형식으로 프레임을 전송하는 것이 좋습니다.

일단 여기 도착하면 RTC, 전력, 센서 및 통신을 결합하여 첫 번째 완전한 프로그램을 수행 할 수 있습니다.

성공적인 방법으로 그것을 수행하는 방법을 보여주는 여러 가지 결합 된 예제가 있습니다.

프로젝트 개발을 진행하면서 프로그래밍 가이드를 읽는 것을 잊지 마십시오. 이 안내서는 실제 프로젝트에 유용한 원자 팁을 포함합니다. 여기에 나와있는 아이디어 중 일부는 성공적인 프로젝트를 구축하는 데 도움이 됩니다.

게이트웨이가 항상 권장됩니다. 게이트웨이를 사용하여 프레임을 수신하는 것이 더 좋다고 생각합니다. 일단 편안함을 느끼면 Meshlium으로 전환 할 수 있습니다. Meshlium은 고급 게이트웨이로 볼 수 있습니다. Meshlium Quick Start Guide를 읽으면 시작할 수 있습니다. 그 후에는 완전한 Meshlium 기술 안내서를 학습 할 수 있습니다.

2 개의 통신 라디오를 사용하려면 별도로 연구해야합니다. 그들의 첫 번째 개발을 완료하면 2 단계로 진행하십시오. 두 가지 사실을 모두 알고 나면 같은 프로그램에서 두 가지 방법을 시도 할 수 있습니다. 도움이 될 수 있는 2 개의 라디오가 결합 된 예가 있습니다.

중단은 하나의 고급 기능이므로 학습 과정의 마지막 단계에서 중단 할 수 있습니다.

OTA 기능이 필요한 경우 복잡한 기능이기도하므로 OTA 가이드를 읽기 시작하는 것이 좋습니다.

예제를 실행하십시오.

'IT > IoT' 카테고리의 다른 글

Waspmote 802.15.4  (0) 2017.12.28
Waspmote ZigBee Networking Guide  (0) 2017.12.28
Waspmote event-sensor-board 2.0  (0) 2017.12.28
Waspmote-SD Examples  (0) 2017.12.28
Waspmote Quickstart Guide  (0) 2017.12.28