:::: MENU ::::
Posts tagged with: Arduino

Yaler.net relay service

네트워크 기능이 내장된 임베디드 디바이스의 경우 내부 네트워크에서 외부로 접속은 쉽지만, 반대로 외부에서 이 디바이스로의 접근은 방화벽등이 있으면 쉽지않고, 공유기에서 NAT, 포트포워딩 등의 기능을 사용해야 해서 일반사용자들은 이용이 어렵다.

Yaler.net relay service
Yaler.net은 이런 문제점을 해결해 줄 수 있는 서비스인데 아래 그림을 보면 동작이 쉽게 이해가 되며, 튜토리얼 문서를 보면 Arduino, Beaglebone, Raspberry Pi… 등의 유명한 보드들의 셋업가이드도 자세하게 나와있다.

Yaler_net_-_access_devices_from_the_Web

비용
비용은 회원가입을 하면 30일 무료이고, 최저 10CHF (스위스 프랑)이니 약 10불정도이니 비싸지 않다.

테스트
회원가입을 하면 자신의 계정에 다음과 같이 Relay Host, Relay Domain, Secret Key가 생성이 된다.

Yaler_net_-_Account

동작이 되는지 확인을 위해 curl을 이용해 테스트를 하면…

$ curl -vX POST gsiot-sqqm-gym8.try.yaler.net/

다음과 같이 HTTP/1.1 504가 뜨는데 이것은 보드가 온라인이 아니거나 또는 설정이 제대로 되어 있지 않아서 이렇게 응답을 하는 것이고, 만약 제대로 되면 HTTP/1.1 200 OK로 응답을 한다.

yaler_cmdline

응용
Instructables에  Arduino와 Yaler, IFTTT를 사용한 IoT Gauge with Arduino, Yaler & IFTTT 프로젝트가 있는데, 여기서는 IFTTT의 Maker 채널 을 사용하고 “Make a web request”에  Yaler 서비스 정보를 기입해서 폰의 위치정보에따라서 디바이스(Arduino Uno, Arduino Yun) 가 반응하는 꽤 흥미로운 프로젝트를 만들었으니 참고해 보면 Yaler, IFTTT, Maker Channel을 이해하는데 도움이 된다.

IoT Gauge with Arduino, Yaler & IFTTT

괜찮은 서비스
Pushover: 안드로이드, 아이폰에 알림을 띄워주는 서비스이며 IFTTT에도 채널로 등록이 되어 있다.


아두이노 Serial to USB 사용하기

원본소스는 Mac에서 \Resource\Java\hardware\arduino\firmware\atmegaxxu2 아래에 있다. arduino-usbdfu 또는 arduino-usbserial 를 사용한다. 이 소스에는 USB 프레임워크인 LUFA(Lightweight USB Framework for AVRs)가 빠져있으므로 http://www.fourwalledcubicle.com/LUFA.php 에서 다운로드한다. 다운로드한 LUFA 폴더를 arduino-usbserial 폴더와 같은 위치에 복사한다.

make 파일에서 다음과 같은 내용을 수정한다.

LUFA_PATH

# Path to the LUFA library

LUFA_PATH = ../

MCU

MCU = at90usb162  #atmega16u2와 pin to pin 호환임

컴파일된 hex파일은 avr isp등으로 write하면 된다.

이렇게 작업한 내용은 https://github.com/jbkim/usbserial


Arduino Scuola와 3D 프린팅

최근에 발견한 Arduino Scuola 사이트: http://scuola.arduino.cc/

Arduino Scuola

이 사이트는 AdafruitSparkfun의 learn사이트와 같은 컨셉의 사이트인데, 아직 자료가 많지 않아서 인지 메인 사이트에서 링크도 없다. 하지만 아두이노의 블로그의 글에서 언급한 내용에 이 사이트의 내용이 링크로 연결되는 것으로 보아 곧 활성화가 될 것같다. 오픈소스 하드웨어 비즈니스에서 이러한 접근은 몇 년 전부터 내가 예측하고 있던 방향이다. 즉 초보자 들이 쉽게 따라할 수 있는 컨텐츠를 제공하고, 관련된 부품이나 키트를 온라인 샵에서 같이 판매를 하는 것이다.

또 한가지 추세는 3D프린팅과 디지털기기의 결합이다. 아주 간단한 예가 소개가 되고 있는데, 이런 추세는 더 활발해 질 것 같다. 즉 디지털 기기에 3D 프린터를 사용하여 개인화된 내용이 부가되는 형태이다. 이런 식의 접근을 하고 있는 업체중 하나는 3D Racers인데 온라인에서 장난감 자동차의 외관을 사용자가 디자인 할 수 있다.

3DRacers


아두이노 & 이클립스 (Arduino & Eclipse)

지난번 포스팅 ‘이클립스(Eclipse)에서 아두이노(Arduino)사용하기’ 은 이클립스에서 플러그인을 설치해서 아두이노를 사용하는 것이었다. 하지만 아두이노는 command line에서 컴파일을 지원하므로 이런 플러그인 없이도 make 파일의 위치, 컴파일러 정보등만 이클립스에 설정하면 사용이 가능하다.

1. 프로젝트 만들기

File > New > Makefile Project with Existing Code를 선택후 Project Name을 설정하고 Existing Code Location을 설정한다.

2. Project Properties

C/C++ Build항목에서 Build location의 Build directoty 설정은 makefile이 있는 위치를 지정한다.

C/C++ General 항목의 Path and Symbols에서 Include할 폴더들을 입력하고  Symbol에도 미리 정의돼야 할 심볼을 입력한다.

3. MakeFile

정작중요한 것은 MakeFile이다. 여기에 제대로된 설정이 되어 있는지 확인해야 함.


이클립스(Eclipse)에서 아두이노(Arduino)사용하기

이클립스 개발환경에서 아두이노사용하기

  1. 이클립스(Eclipse) 설치 http://www.eclipse.org/downloads/ Eclipse IDE for C/C++ Developers 를 설치
  2. 아두이노 이클립스 플러그인:  저작자의 홈페이지Installation advice, 가 있으니 참고. 플러그인 설치는 이클립스를 실행후 Help >> Install New Software…를 실행후 “http://www.baeyens.it/eclipse/update” 주소를 입력하고 Add 버튼을 누른다. 그러면 Arduino Eclipse extensions 이 나타나는데 이것을 선택하면 설치가 된다.
  3. Preferences > General > Workspace를 선택하고 “Save automatically before build”를 선택 
  4. Arduino항목에서 Arduino가 설치된 path와 library path 를 입력하고, Use Arduino ODE tools in eclipse를 선택한다. 그리고 test serial dll를 클릭해서 serial drive가 동작하는 지 확인한다.
  5. 아두이노 프로젝트 만들기: New >> Project >> Arduino >> New Arduino sketch를 선택, 프로젝트 이름를 설정, 보드와 COM port를 설정하면 setup()과 loop()함수가 만들어진 빈 프로젝트가 생긴다.
  6. 간단한 blink 예제를 만들고 Project >> Build All하면 컴파일이되고, AVR >> Upload Project to Target Device를 선택하면 아두이노 보드에 프로그래밍이된다.


SPI of Arduino

SPI of Arduino

ArduinoMOSIMISOSCK
UnoD11 or ICSP4D12 or ICSP1D13 or ICSP3
Mega256051 or ICSP450 or ICSP152 or ICSP3
LeonardoICSP4ICSP1ICSP3
DueICSP4ICSP1ICSP3

SPI 신호들은 ICSP핀이나 보드의 우측 상단(AREF 있는 쪽)에 같이 연결된 경우도 있으나, 그렇지 않은 경우도 있다. 그러므로 SPI를 사용하는 쉴드를 디자인 할 경우 라우팅을 쉽게하기 위해 한쪽만 SPI를 사용하려면 ICSP핀 쪽에만 연결을 하면 된다.


mbed – SeeedArch 프로그래밍하기

SeeedArch

mbed의 플랫폼 중의 하나인 Seeedstudio에서 만든 보드, SeeedArch를 테스트중이다. 이 보드의 스펙은 다음과 같다.

  • mbed enabled
    • online development tools
    • easy to use C/C++ SDK
    • lots of published libraries, projects
  • Standard Arduino Appearance, two Grove connectors
    • available with 3.3V compatible shields
    • a large number of grove modules
  • Drag-n-drop programming
  • NXP LPC11U24 MCU
    • Low power ARM Cortex-M0 Core
    • 48MHz, 32KB Flash, 8KB RAM, 4KB EEPROM
    • USB Device, 2xSPI, UART, I2C

이 보드의 가장 큰 특징은 보드의 형태가 아두이노 보드와 같아서 아두이노 쉴드를 연결할 수 있다.

.png”>800px-Arch_Pinout.jpg.png” width=”560″ height=”455″ />

코딩은 mbed의 웹컴파일러로 하고 다운로드 역시 msd로 잡히는 외장드라이브에 copy를 하면 되는데, Mac이나 Linux에서는 Windows와 달리 drag & drop이 안된다.

프로그래밍 방법 (Mac)

  • 보드의 왼쪽에 있는 리셋 버튼을 길게 누른다. (짧게 누르면 H/W 리셋이고, 길게 누르면 ISP 모드이다.)
  • 그러면 Finder에 CRP DISABLED 라고 스토리지가 잡힌다. Windows에서는 이 폴더에 있는 firmware.bin을 지우고 새로운 firmware.bin을 copy하면 되지만 Mac에서는 Terminal에서 다음과 같이 dd 명령어로 copy한다.
  • dd if=새로운 firmware 파일명 of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

좀 더 쉽게하기위해서 Mac의 Automator를 사용하여 쉘 스크립트를 만든다.

  • dd if=$* of=/Volumes/CRP\ DISABLD/firmware.bin conv=notrunc

Automator_SeeedArch

LED blink 프로그래밍

SeeedArch

관련정보: SeeedStudio WiKi


Arduino Ethernet 라이브러리 업데이트

WZnet 칩 W5100, W5200과 W5500을 지원하는 통합 아두이노 라이브러리인 Arduino Ethernet 라이브러리를 업데이트 했다. 기존 코드에서 달라진 점은 다음과 같다.

  • Arduino IDE 1.5.x 지원 : Arduino Due를 지원하기 위함.
  • Due용  SPI 드라이버 추가
  • W5200및 W5500의 경우 SPI드라이버 속도를 높였다. 무려 42Mhz까지 지원
  • w5100::read_data함수의 파라미터의 형 변경
  • flush() 함수 추가

Arduino IDE 1.5.xx를 지원하기 위해서는

  • 32비트 SAM용 SPI 드라이버가 추가 되야한다.
  • IDE 1.5.x의 폴더 구조가 바뀌어서 헤더파일 include가 변경된다.아래 그림 참고…  예를 들면 #include “w5100.h”가 #include “utility/ w5100.h” 이런 식으로…

Arduino_Folder

  • AVR코드와의 구별은 #if defined (ARDUINO_ARCH_AVR)로 한다.

W5500 SPI

W5500_SPI

데이터 시트에는 이론상 80Mhz까지 가능하다고 나오지만 실제로는 33Mhz 정도가 최대 SPI clock으로 명기해 놓고 있다. 그리고 Atmel SAM에서  SPI clock은 다음과 같이 결정된다. 즉 메인 클럭을 분주해서 사용을 하는데, 아두이노에서는 84Mhz를 메인으로 사용하므로 14Mhz, 28Mhz, 42Mhz, 84Mhz가 설정이 가능하다.

SAM_SPI

 

아두이노 코드에서는 다음과 같이 클럭을 분주해서 42Mhz가 가능하다. 1로 분주하면 84Mhz 인데, 칩에서는 80Mhz까지만 지원하므로 84Mhz는 지원이 안된다. 42에서 84는 갭이 크다…

참고로 아두이노에서 W5100의 SPI는 4Mhz로 설정이 되어 있으니, 거의 10배 이상이 빨라짐~~


Arduino 코드에서 WIZnet칩 구별하기

WIZnet 칩

WIZnet 칩중에서 SPI가 지원되는 칩은 W5100, W5200 그리고 W5500이 있다. 이중 W5100은 아두이노에 적용이 되어 Ethernet Shield 및 Arduino Ethernet 보드에 사용이 되고 있다. 물론 W5200으로 만든 Ethernet Shield도 있고 W5500으로 만든 Ethernet Shield도 있다. 그리고 최근에는 아두이노 팀에서 W5500으로 Ethernet Shield를 만들고 있다. 이렇게 3가지 칩으로 적용된 보드가 있는데, 그럼 코드에서 이 칩들을 구별할 수 있는 방법이 있는가?

Arduino 코드에서 WIZnet칩 구별하기

W5100, W5200, W5500의 칩들의 기본 기능은 같지만 H/W적으로는 패키지도 다르고 핀도 다르고, 내부 메모리 맵도 다르다. 모두 SPI 를 사용하지만 칩을 제어하기 위한 SPI format도 다르다. 그리고 W5100은 소켓이 4개이고 나머지 칩들은 모두 8개의 소켓을 지원한다.

코드에서 이들 칩을 구별을 하려면 이 칩들의 내부 레지스터를 읽어서 각 칩들에만 유효한 값을 확인해서 비교를 해야한다. 다행히 W5200과 W5500은 칩의 버젼을 구분하는 레지스터가 있다. 따라서 이들 2칩을 구분하면 3개중 2개를 구분이 되니 W5100은 구분이 가능하다. 즉 W5200이 경우 version 레지스터(0x001F)를 읽으면 0x03이 읽히고, W5500의 경우 0x0039 번지를 읽으면 0x04가 읽힌다.

 W5100W5200W5500
0x001F0x000x030x00
0x00390x000x000x04

아두이노 코드

아래 코드는 아두이노 Ethernet 코드를 수정하여 만든 코드이고, Webserver.ino에서 테스트를 했다.

관련 코드는 : https://github.com/jbkim/Differentiate-WIznet-Chip


Pages:1234