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
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  
...
}
  • Port Setting
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
  • setup()
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());
}

  • loop()
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");
  }

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

Advertisements

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
// 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  
}  

Hello World based on Blink sketch

// 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  
}  

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

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

    // 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  
    }  
    

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