2014년 11월 18일 화요일

Note6 - WebServer

ArduinoNote List-page
PREVIOUS: Note5 - isShield-A

Hand-on #3: WebServer



-Ethernet Shield를 이용한 Remote monitoring을 해보자

Web-Server?



Web-Server는 Web-site를 hosting하고 있는 서버로 간단하게 아래의 그림과 같이 Web brower와 같은 Client가 Web-server에 저장되어 있는 Web-page에 대한 Request 요청했을 경우 해당 Wep-page를 Client에세 Reponse하는 Server는 말한다. 이때 Web-server와 Client는 Hypertext Transfer Protocol (HTTP)통해서 hypertext를 Trasfer/Exchange한다.

Network Configuration

Get Request:index.htm

Install Ethenret Library





Network Configuration on PC side



Network Configuration

위와 같이 "Internet Protocol Properies"에서 Network구성을 Test를 위해 아래와 같이 설정해보자

    IP address : 192.168.1.2
Subnet mask : 255.255.255.0
Default gateway : 192.168.1.1


Web Server Sketch




  • Fixed IP address



[code lang=cpp]
IPAddress ip(192, 168, 1, 20);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
// fill in your Domain Name Server address here:
IPAddress myDns(8, 8, 8, 8); // google puble dns
void setup() {
...
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
Ethernet.begin(ip, myDns, gateway, subnet);
#else
Ethernet.begin(mac, ip, myDns, gateway, subnet);
#endif
...
}
[/code]


  • Port Setting



[code lang=cpp]
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
[/code]


  • setup()



[code lang=cpp]
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial)
{
; // wait for serial port to connect. Needed for Leonardo only
}

// start the Ethernet connection and the server:
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
Ethernet.begin(ip, myDns, gateway, subnet);
#else
Ethernet.begin(mac, ip, myDns, gateway, subnet);
#endif
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

[/code]


  • loop()



[code lang=cpp]
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == 'n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == 'n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != 'r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disconnected");
}

[/code]

Compile




  • IDE 메뉴의 스케치>확인/컴파일
    Verify



Program




  • IDE 메뉴의 파일>프로그램어를통해업로드
    Upload



Web-Client (Web-browser)를 이용하여 Web-server (Arduino Board)에 접속




  • web-browser을 실행하고 주소창에 아래와 같이 입력한다.

    http://"Arduino board IP address":"port number
    http://192.168.1.20:80

  • Web-browser실행 화면
    실제로 port에서 입력된 값을 Web-page를 통해 보여줌으로써 Remote Monitoring이 가능함을 보여준다. 5개의 값들은 ADC입력 값을 출력한다. 현재 ADC에 입력이 없기 때문에 Dummy값이 출력되는 것을 볼수 있다.
    Web-browser
    Serial Monitor를 통해 Log값을 볼수 있다. Welcome message와 Web-Client로 부터 수신한 내용을 확인 할 수 있다.
    Serial Monitor



NEXT : Note7 - WebServer controlled LED

Note5 - ioShield-A

ArduinoNote List-page
PREVIOUS: Note4 - Ethernet shield

ioShield-A



ioSheild-A

ioShield-A는 Arduino Platform을 Internet에 연결하게 해주는 Ethernet Shield의 하나이다. Ethernet Shield는 TCP/IPCore Chip으로 W5100의 기반으로 하였으나, ioShield는 W5500을 적용하였다. W5500은 동시에 W5100보다 많은 소켓 수(8Socket)지원 할 수 있으며, Fast SPI (upto 80MHz)를 지원한다. 특별히, 이 Ethenret Shield는 WIZ550io와 Installing Board로 구성되어 있으며, WIZ550io에서 embedded된 MAC Address를 지원하기 때문에 별도의 MAC Address구매없이 Real MAC Address를 사용할 수 있다.

ioShield-A
* WIZ550io: wizwiki
* Schematic: ioshield-a_v1.1_sch.pdf
* Ethernet Library: WIZ_Ethernet_Library
* SPI port: ICSP Header사용
* Github: frizing project for WIZ550io

WIZ Ethernet Library Install




  • Download Library: WIZ_Ethernet_Library-master.zip


  • 압축해제 한뒤 Ethernet폴더를 Copy한다.
    Ethernet폴더


  • 기존의 Sketch IDE를 설치하고 생긴 C:/Program Files/Arduino/Ethernet폴더와 Replace한다.
    Ethernet폴더 replace


  • Ethernet Library에 /Arduino/Ethernet/examples 아래와 같이 다양한 example들이 포함되어 있다.
    Ethernet Library




NEXT : Note6 - WebServer

Note4 - Ethernet shield

ArduinoNote List-page
PREVIOUS: Note3 - Hello world

Ethernet Shield



Ethernet Shield

Arduino Ethernet Shield는 Arduino Platform들을 Internet에 연결할 수 있는 Arduino Platform에 Plug-in하는 Module이다. Ethernet Shield에는 TCP/UDP Network stack을 처리할 수 있는 Ethernet Chip인 W5100 (WIZnet)가 onboard되어 있다. 이 칩과 제공되는 Ethernet Library를 통해 Arduino Platform이 Internet에 연결될수 있도록 합니다. 또한 이 Shield에서 RJ45 (Ethernet) Port를 통해 Ethernet Cable를 연결할 수 있으며, Micro-SD Slot을 지원하여 Network를 통한 File을 저장할 수 있도록 지원한다.

Serial Peripheral Interface



Arduino의 MCU와 Ethernet Shield의 W5100의 Connection을 위해 Serial Peripheral Interface(SPI)를 사용한다. SPI는 Synchronous Serial data protocol를 사용하며 Duplex를 지원하는 Bus Interface이다. 아래와 깉이 MISO, MOSI, SCK, SS 4개의 Line으로 구성돤다.


  • SPI Signals


    • MISO (Master In Slave Out) - The Slave line for sending data to the master

    • MOSI (Master Out Slave In) - The Master line for sending data to the peripherals

    • SCK (Serial Clock) - The clock pulses which synchronize data transmission generated by the master

    • SS (Slave Select) - the pin on each device that the master can use to enable and disable specific devices.


  • Connections
    아래 표와 같이 Arduino Board마다 SPI port가 각각 다르며 ICSP에는 SPI Interface가 공통으로 존재합니다.




































    Arduino Board MOSI MISO SCK
    Uno or Duemilanove 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3
    Mega1280 or Mega2560 51 or ICSP-4 50 or ICSP-1 52 or ICSP-3
    Leonardo ICSP-4 ICSP-1 ICSP-3
    Due ICSP-4 ICSP-1 ICSP-3



    • ICSP Header
      ICSP Header


  • Ethernet shield compatible (W5100 base)


    • Seeedstudio
      Seeedstudio

    • DFROBOT
      DFROBOT

    • e-gizmo
      e-gizmo




NEXT : Note5 - isShield-A

Note3 - Hello World

ArduinoNote List-page
PREVIOUS: Note2 - Blink sketch

Hand-on #2 : Hello World



-"Hello World" Program을 해보자
-Hand-on #1에서 실습한 Blink Example을 바탕으로 Hello world를 출력하기 위해 UART (Serial)를 극복하자.

Setting Serial Port on Sketch IDE




  • Sketch IDE를 실행한 뒤 메뉴에서 Tools를 클릭하여 아래와 같이 Port를 설정한다.
    Go Tools


  • Serial Port를 설정한다.


    • OS가 Windows일 경우
      Serial Port

    • OS가 Linux일 경우
      Serial Port


  • Serial monitor의 실행을 위해 오른쪽 상단의 돋보기 아이콘을 클릭
    Serial Monitor


  • Serial monitor 실행모습
    Serial monitor




Skeleton Code based on Blink sketch


[code lang=cpp]
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
// Open serial communitaions at 9600 bps (bit per seconds)
// ...insert codes #1...
// print "Blick Example"
// ...insert codes #2...
}

// the loop function runs over and over again forever
void loop() {
// print "Hello World"
// ...insert codes #3...
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
[/code]

Hello World based on Blink sketch



[code lang=cpp]
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
// Open serial communitaions at 9600 bps (bit per seconds)
Serial.begin(9600);
// print "Blick Example" or own message
Serial.println("Blick Example");
}

// the loop function runs over and over again forever
void loop() {
Serial.println("Hello World!");
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
[/code]

Compile




  • IDE 메뉴의 스케치>확인/컴파일
    Verify



Program




  • IDE 메뉴의 파일>프로그램어를통해업로드
    Upload



NEXT : Note4 - Ethernet shield

Note2 - Blink sketch

ArduinoNote List-page
PREVIOUS: Note1 - ARDUINO

Hand-on #1 : Blink



-Arduino를 경험해 본다.
-Sketch IDE를 설치, 간단한 Blink Example 따라하기

Preparation Materials




  • Arudino platform : Arduino Mega
    Arduino Mega
    (from http://Arduino.cc)



Arduino Mega

(* form http://duino4projects.com/multiserial-mega-using-arduino/)


























































Spec. Description
Microcontroller ATmega2560
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 54 (of which 15 provide PWM output)
Analog Input Pins 16
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 256 KB of which 8 KB used by bootloader
SRAM 8 KB
EEPROM 4 KB
Clock Speed 16 MHz




Blink Sketch :




  • Load Blink Sketch : IDE의 파일>예제>Basics>Blink

    Blink example


  • Blink codes

    [code lang=cpp]
    // the setup function runs once when you press reset or power the board
    void setup() {
    // initialize digital pin 13 as an output.
    pinMode(13, OUTPUT);
    }
    // the loop function runs over and over again forever
    void loop() {
    digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
    delay(1000); // wait for a second
    }
    [/code]




Pin 13 회로도에서 살펴보자



L LED on Schemetic

Pin 13으로 L LED를 On/Off 한다.!



L LED on Board

Configuration Platform




  • IDE 메뉴의 도구>보드>Arduino Mega of Arduino Mega 2560
    Selett Serial Port



Compile




  • IDE 메뉴의 스케치>확인/컴파일
    Verify



Program




  • IDE 메뉴의 파일>프로그램어를통해업로드
    Upload



NEXT: Note3 - Hello world

Note1 - Arduino

ArduinoNote List-page

Arduino



Arduino UNO

Arduino는 open-source hardware board를 말한다.


open-source hardware?
open-source hardware는 로 알아보면 아래와 같은 개발에 필요한 Material을
Free로 open하는 open design movement이다. (Free라도 License는 있으니 주의 ^^;)
- mechanical drawings
- schematics
- bills of material
- PCB layout
- Software (driver)


2005년 이탈리아에서 Massimo Banzi를 포함한 5명이 시작한 open-source hardware project이다. 10년이 체한된 지금 59여개의 국가에서 hobbyist, 미술가와 같은 전문지식이 부족한 사람들이 Do-it-Yorrself(DIY)을 할때 주로 쓰이는 대표적인 open-source hardware platform이 되었다. 또한 Arduino Compatible board (아두이노 호환보드), Arduino Shield (Arduino Platform에 plug-in하여 사용할 수 있는 Module), Arduino pin-headers (아두이노 보드의 핀헤더형태), Arduino Clone (Arduino 복제품)와 같은 새로운 단어들이 생겨남과 복잡하고 다양한 Ecosystem를 구축하였다. 최근에는 Intel과 같은 Big업체가 Open-source Hardware에 참여하기 위해 Arduino Certified를 받은 IntelGalileo Board를 출시할 정도이다.
Arduino Team
(*from blog.arduino.cc)

Platform



Arduino는 Sigle-board Microcontroller로 초기에는 8Bit Atmel AVR microcontroller를 시작으로 해서 최근에는 32-Bit Atmel ARM의 microcontroller까지 여러 Platform Board를 계속해서 Release하고 있다.

Evolution of Arduino
(*from blog.arduino.cc)


  • Arduino platforms




































































    8-Bit MCU 3-Bit IoT 8-Bit EDU 8-Bit Wearable 32-Bit ARM Dev 32-Bit MPU Certified
    UNO BT Esplora Gamma ZERO TRE Galileo x86
    Leonardo Ethernet Robot Lilypad DUE Edison x86
    Mega WiFi
    Xbee/Fio
    GSM
    Yun



Sketch IDE



Arduino의 intergrated development environment (IDE)는 C, C++기반의 Code의 편집이 가능하고, 편집한 Code를 Target Board에 Program할 수 있는 Sketch라고 하는 Software tool을 사용한다. 이 Sketch에는 사용자들의 편의를 위해서 다양한 예제 Code들을 포함하고 있으며 이를software library라고 부르고 있다.

Sketch Library
* Arduino 1.0.x버젼은 8-Bit AVR Microcontroller를 Maintenance함
* Arduino 1.5.x버젼은 최신 Arduino platform을 지원함
* IDE설치 참고 : 네이버 아두이노 교재

Shield



Arduino Shield는 Arduino와 Arduino-compatible board에 plug-in 혹은 Stacking되는 Arduino pin-header를 가진 PCB Circuit를 말한다. 아래의 그림은 Arduino Official Shield이며, Arduino official Shield 이외에도 Display (LCD shield), prototyping (Breadboard)등과 같은 다양한 Shield들이 존재한다.
Arduino Official Shield

Arduino최근 동향



Arduino ZERO : Cortex-M0+ + Debugger



Arduino ZERO

Arduino TRE : TI Cortex-A9 + ATmega32u4 + WEB-IDE



Arduino TRE

ArduinoMateria101 : Arduino 3D priter



ArduinoMateria101

NEXT: Note2 - Blink sketch

2014년 11월 16일 일요일

Hauntbox

Haundbox

What is Hauntbox



The HAUNTBOX is a open source platform which is configured by web browser for haund and some projects.


“It is a system of parts. Sensors and outputs plug into your Hauntbox and it plugs into your network. You tell it what do by using your browser on your computer, iPad or smartphone on your home network with our simple visual interface."


The Hauntbox supports up to 6 intput and outputs and set what voltate they run and their trigger time.
It controls inputs and outputs with no programming, because of configuring them by the web-based.
setting page
Please, refer to this web-page for more details.

Hardware



Haundbox' Specs include:
* 256 KB of flash
* 8 KB SRAM (~4.8 KB free with firmware)
* 4 KB EEPROM
* 7-12V input voltage
* 5/12/24V output options depending on power supply
* Supplies up to 300mA per output (open collector)
* W5100 Ethernet controller (works seamlessly with official Arduino libraries)microSD card slot
* FTDI header pins for firmware hacking/updating
* Easy to use screw terminals accepting up to 18 gauge wire
* Unused header pins for easy expansion via Arduino shields or proto-boards
* LEDs indicating I/O status
* Motion sensor (additional/optional)
* Audio module (additional/optional)

Software



Github : https://github.com/Aylr/theHB

##Related Links
Hounbox had funded on Kickstarter and posted on Atmelcoporation.
- Kickstarter : Easily add sound & automation to your HAUNTS and PROJECTS with this open source prop controller without programming! Arduino compatible
- Atmelcorporation : Automate your props with the ATmega2560 based Hauntbox