공공데이터를 이용한 날씨 예보

Posted by 카이젠8501 카이젠8501
2016.11.03 15:46 IT 개발/Arduino

공공데이터를 이용한 날씨 예보

공공데이터 포털이란?

공공데이터포털(Data Portal)은 한국정보화진흥원에서 운영하는 공공데이터 통합제공 시스템이다. 대한민국 정부가 보유한 다양한 공공데이터를 개방하여 누구나 편리하고 손쉽게 활용할 수 있게 하는 것을 목적으로 한다. 행정자치부 공공정보정책과에서 관련 정책을 추진하고 있다.

2015년 8월 기준, 14,416개의 공공데이터가 공개되어 있다. 정부부처 및 산하기관에서 발행하는 백서, 주제별 전문가가 선정한 최신 이슈와 관련된 지식, 지역/분류체계/제공기관/활용방법 별 공공데이터 개방현황 등이 제공된다. 파일 다운로드 또는 Open API를 통해 이용할 수 있다.

참고 : 위키백과

동네 예보정보 조회 서비스 신청

동네예보정보조회서비스 신청 링크를 이용하시면, OpenAPI를 활용 신청 할 수 있다. 신청이 완료 되면, 일정 시간 후 가입 승인 메일을 받을 수 있다.

20161103_145553

동네 예보정보 조회 동작

동네 예보정보 조회 서비스는 크게 4가지 방식으로 데이터를 요청 할 수 있다.

  1. 초단기 실황 조회
    실황정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 조회 조건으로 자료구분코드, 실황값, 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  2. 초단기 예보 조회
    초단기예보정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 조회 조건으로 자료구분코드, 예보값, 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  3. 동네 예보 조회
    동네예보 정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X좌표, 예보지점 Y 좌표의 조회 조건으로 발표일자, 발표시각, 자료구분문자, 예보 값, 예보일자, 예보시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  4. 예보 버전 조회
    동네예보정보조회서비스 각각의 오퍼레이션(초단기실황, 초단기예보, 동네예보)들의 수정된 예보 버전을 파악하기 위해 예보버전을 조회하는 기능

주의점은 각 동작 마다 필수로 요구하는 항목들이 있다. 예를 들어 초단기 실황 조회의 경우, 서비스 키, 발표일자, 발표시각, 예보지점 X좌표, 예보지점 Y 좌표 정보를 필수로 보내 줘야 한다.

동네 예보정보 조회 Request/ 형식

아래 그림은 초단기 실황 조회를 위한 Request 패킷 형식이다. 아래와 같은 포맷으로 데이터를 보내면 두번째 사진과 같은 응답을 받을 수 있다.

20161103_145554

20161103_145555

응답 받은 데이터를 카테고리별로 분석하면 하늘의 상태 및 강수량 등의 정보를 얻을 수 있다.
해당 카테고리 정보는 OpenAPI 사용자 활용 가이드를 참고 하기 바란다.


저작자 표시
신고
이 댓글을 비밀 댓글로

Arduino에서 Wi-Fi 기반의 MQTT 사용하기

Posted by 카이젠8501 카이젠8501
2016.09.05 10:44 IT 개발/Arduino

앞 포스팅에서 기술한 것과 같이, WizFi250 Arduino Library가 업데이트 되면서 기존에 ESP8266이나 Ethernet에서 사용하는 예제들을 별도의 수정 없이 그대로 사용 할 수 있게 되었다.

http://www.life4iot.com/2016/07/27/wizfi250-arduino-library/

본 포스팅에서는 업데이트 된 WizFi250 Arduino Library를 이용하여 Arduino에서 Wi-Fi를 사용하고 MQTT 연결 후 데이터를 Publish하고 Subscribe 하는 예제를 구현 하는 방법을 설명 한다.

MQTT란?

mqttorg

MQTT란 경량의 Publish/Subscribe 메시징 프로토콜이다. IoT(Internet of things)나 M2M(machine-to-machine)에서 사용하기 위해 설계 되었으며, 이런 이유로 낮은 전력, 낮은 대역폭 환경에서 사용할 수 있다.

아래 문서를 참고 하면, MQTT에 대한 자세한 내용을 확인 할 수 있다.
MQTT 소개

WizFi250 Library 설치 및 PubSub Client Libary 설치

아두이노 IDE에서는 라이브러리 매니저를 지원한다. 라이브러리 매니저를 이용하면, Arduino에서 사용 할 Library를 편하게 검색하고 설치 할 수 있으며, WizFi250 Library 역시 라이브러리 매니저를 이용하여 설치 할 수 있다.

아두이노 IDE의 메뉴에서 [스케치]-[Include Library]-[Manage Libraries] 선택 후, Library Manager에서 WizFi250을 검색 후 설치 한다.

20160801_140536

20160801_140642

Arduino에서 MQTT를 사용하기 위해서는 PubSubClient Library를 설치 해야 한다. 설치 방법은 WizFi250 Library 설치와 동일하며 검색어만 pubsubclient로 바꿔서 사용하면 된다.

Arduino에서 Wi-Fi 연결 후 MQTT 사용하기

WizFi250 Library에는 MQTT를 사용하기 위한 기본적인 예제를 포함하고 있다. 아두이노 IDE에서 [파일]-[예제]-[WizFi250]-[mqtt_wizfi250]를 열고 Wi-Fi SSID와 Password를 공유기에 맞게 설정하면 그대로 사용 할 수 있으며, broker.mqtt-dashboard.com에 설치되어 있는 broker에 접속해서 데이터를 publish 하고 subscribe 할 수 있다.

20160801_142526

// Update these with values suitable for your network.
const char* ssid = "DIR-815_Wiznet";
const char* password = "12345678";
const char* mqtt_server = "broker.mqtt-dashboard.com";

위 코드에서 mqtt_server 값을 변경하면, broker.mqtt-dashboard.com에 있는 broker 이외의 다른 broker를 이용 할 수 있다.

아래 코드는 WizFi250을 AP에 연결한 후, MQTT Broker에 접속하고 Callback 함수를 등록한다. Callback 함수는 Arduino+WizFi250이 MQTT Broker로 부터 MQTT Message를 수신 하였을 때 처리 하기 위한 내용을 정의 한다.

void setup() {
  pinMode(9, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void setup_wifi() {

  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.init();
  WiFi.begin((char*)ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

본 예제의 callback 함수는 Broker로 부터 Message를 수신하면 “Topic”을 출력하고 “Topic”에 대한 Payload 값을 출력 한다.
그리고 모든 “Topic”에 대하여 Payload 값이 ‘1’이면 9번 핀에 연결되어 있는 LED를 ON하고 ‘0’이면 LED를 OFF 한다.

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  // Switch on the LED if an 1 was received as first character
  if ((char)payload[0] == '1') {
    digitalWrite(9, LOW);   // Turn the LED on (Note that LOW is the voltage level
    // but actually the LED is on; this is because
    // it is acive low on the ESP-01)
  } else {
    digitalWrite(9, HIGH);  // Turn the LED off by making the voltage HIGH
  }

}

Main Loop에서는 MQTT Broker와 연결이 끊어 지면 다시 연결 하고, 2초에 한번씩 “outTopic”이라는 Topic으로 “WizFi250 hello world xxxx” 메시지를 보낸다.

void loop() {

  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - lastMsg > 2000) {
    lastMsg = now;
    ++value;
    snprintf (msg, 75, "WizFi250 hello world #%ld", value);
    Serial.print("Publish message: ");
    Serial.println(msg);
    client.publish("outTopic", msg);
  }
}

MQTT Publish/Subscribe Test

위 예제를 컴파일 하고 아두이노에 업로드 한 후, 예제가 정상적으로 구동 한다면 아래와 같은 로그 메시지를 확인 할 수 있다.

20160801_144011

MQTT Publish Test

PC의 웹브라우저를 이용하여 broker.mqtt-dashboard.com에 접속하면 아래와 같은 화면을 볼 수 있으며, 빨간 박스로 표시된 부분과 같이 “outTopic”에 “WizFi250Hello world #xxxx” 메시지가 출력되면 아두이노에서 메시지를 정상적으로 publish 한 것으로 판단 할 수 있다.

20160801_143851

MQTT Subscirbe Test

PC에 MQTT.fx 툴을 설치 한다. MQTT.fx Download

MQTT.fx의 Connection Profile에 연결할 broker.mqtt-dashboard.com 정보를 입력한 후 Connect 버튼을 누르면 broker.mqtt.dashboard.com에 연결 할 수 있다.

20160801_150203

20160801_150215

아래 그림과 같이 첫번째 박스에 Topic, 두번째 박스에 Message를 입력한 후 Publish 버튼을 누르면, Arduino에서 해당 토픽에 대한 메시지를 로그 메시지로 출력한다. 아래 그림과 같이 출력 되면, 정상적으로 Subscribe가 된다고 판단 할 수 있다.

20160801_150232

20160801_145851

저작자 표시
신고
이 댓글을 비밀 댓글로

Arduino Library Manger에 Library 등록하기

Posted by 카이젠8501 카이젠8501
2016.09.05 10:23 IT 개발/Arduino

Library를 Arduino Library Manager에 등록하는 방법

새로 작성한 라이브러리를 Arduino Library Manager에 등록하기 위해서는 아래 문서에 있는 조건들을 만족해야 한다.
https://github.com/arduino/Arduino/wiki/Library-Manager-FAQ

간단하게 정리하면

  • GitHub에 Library Repository 등록
  • GitHub Repository 폴더 구조는 아래과 같은 구조로 구성
    • examples : 라이브러리 예제
    • src : 라이브러리를 구성하는 전체 소스 파일 (.h, .cpp)
    • README.md : 라이브러리를 설명하는 문서
    • keywords.txt : 아두이노 IDE에서 Highlite 할 문자 표시
    • library.properties : 라이브러리 이름, 버전, 저자, 및 다운로드 url
  • 라이브러리 Tag 생성

20160801_155014

위 조건에 따라 GitHub Repository를 만든 후, https://github.com/arduino/Arduino의 Issues 탭에 GitHub Repository를 등록 해 달라는 이슈를 남기면, 관리자가 검토 후 Arduino Library Manager에 등록 한다.

20160801_155508

20160801_155519

저작자 표시
신고
이 댓글을 비밀 댓글로

WizFi250 Arduino Library

Posted by 카이젠8501 카이젠8501
2016.09.05 10:18 IT 개발/Arduino

기존 WizFi250 Arduino Library 개선 필요

이전에 있던 WizFi250 Arduino Library에 아래와 같은 문제 및 불편한 사항이 있었다.
Old Version WizFi250 Arduino Libary Download link

  1. API 함수들이 표준과 달라서, Arduino 예제들을 그대로 사용 할 수 없음
  2. 구조적으로 버퍼를 많이 사용하고 있어, Arduino Uno와 같이 RAM이 부족한 보드에서는 Memory Overflow가 발생

위와 같은 문제가 있어 WizFi250 Arduino Library를 다시 구현해야 겠다는 생각이 들었으며, 본 포스팅에서는 새로운 WizFi250 Arduino Library를 구현하는 과정과 예제 구동 방법에 대해 설명한다.

개발 환경

Arduino Library를 구현하기 위한 Eclipse 개발 환경 구축을 참고 하기 바란다.

WizFi250 Arduino Library 다운로드 링크

New Version WizFi250 Arduino Library Download link

WizFi250 Arduino Library 참고 사항

WizFi250 Arduino Library는 ESP-8266 기반의 아두이노 라이브러리를 참고 해서 개발하였다.
이미 일반적으로 많이 사용되고 있는 ESP-8266 라이브러리의 함수 포맷을 맞춰서, 이미 만들어져 있는 예제들을 그대로 사용 할 수 있도록 하는 것에 초점을 두고 개발 하였다. 그 결과 WizFi250 Arduino Library 예제에 있는 것과 같이 별도의 큰 수정 없이 MQTT, ThingPlus 및 Ubidot와 같은 클라우드 예제를 사용 할 수 있다.

WizFi250 Arduino Library 폴더 구조

파일및폴더명 내용
examples WizFi250 Library를 활용한 예제(.ino)
utility
WizFi250_spi_drv SPI 인터페이스로 WizFi250을 제어하는 드라이버 구현
WizFiRingBuffer WizFi250에서 사용하는 Ring Buffer 구현
general_parse Parsing을 위한 범용적인 함수들 구현
WizFi250 Wi-Fi 동작을 위한 기능 구현
WizFi250Client TCP Client 동작을 위한 기능 구현
WizFi250Server TCP Server 동작을 위한 기능 구현
WizFi250Udp UDP 동작을 위한 기능 구현
저작자 표시
신고
이 댓글을 비밀 댓글로

Arduino Library를 구현하기 위한 Eclipse 개발 환경 구축

Posted by 카이젠8501 카이젠8501
2016.09.05 10:02 IT 개발/Arduino

Arduino를 설치 하면 Sketch라는 별도의 IDE를 사용해서 코드를 수정, 컴파일 및 다운로드를 한다. 간단한 프로그램을 작성하거나, 사용하고 있는 라이브러리를 내부까지 확인 할 필요가 없는 경우 Sketch 프로그램만 이용해도 대부분의 Arduino의 기능을 사용 할 수 있다.

하지만 나와 같이 Arduino Library를 구현해야 하거나, Arduino Core 및 Library에서 제공하는 함수들의 내부를 확인하고 싶을 때는 Sketch 프로그램의 기능이 한 없이 부족함을 느낀다.

때문에 본 포스팅에서는 Eclipse IDE 환경에서 Arduino Library를 개발 하기 위한 환경 구축하는 방법을 설명한다.

Arduino Library를 구현하기 위한 Eclipse 개발 환경

Download Eclipse

본 포스팅에서는 Eclipse Mars 버전을 사용 하였다.

아래 주소를 이용하면 Eclipse Mars 버전을 다운로드 할 수 있다.

Eclipse IDE for C/C++ Developers

Install Arduino Plugin

Eclipse를 실행 한 후, [Help]-[Eclipse Marketplace]에서 Arduino Eclipse IDE V2를 설치 한다.

20160727_091520

정상적으로 설치가 완료되면, 아래와 같은 메뉴와 아이콘이 생성되는 것을 볼 수 있다.

20160727_092202

Install Arduino IDE

위에서 설치한 Arduino Plugin은 Arduino IDE version 1.6.5 이상을 지원하지 않는다. 때문에 최신 버전의 Arduino IDE 대신, 1.6.5 버전을 설치해야 되며 아래 주소를 이용하면 해당 버전을 다운로드 할 수 있다.

https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

20160727_093141

Configure Arduino Plugin in Eclipse

Arduino IDE 설치가 완료되면, Eclipse에서 Arduino를 컴파일하기 위한 환경 설정이 필요하다. Eclipse에서는 Arduino IDE에 설치된 컴파일러와 다운로드 프로그램을 이용하여 컴파일 및 다운로드를 할 수 있으며, Arduino IDE가 설치 되어 있는 경로를 지정하는 간단한 환경 설정이 필요 하다.

[Window]-[Preferences]-[Arduino]에서 아래 표시되어 있는 정보를 설정하면 된다.

(일반적인 Arduino IDE를 설치 경로는 C:\Program Files (x86)\Arduino 이다.)

또한 개인적으로 사용하고 있는 Library가 있는 경우, 아래 Private Library path 에 설정하면 Arduino에서 지원하는 Library 이외의 개인적인 Library를 사용 할 수 있다.

20160727_093549

Create Arduino Project

새로운 Arduino Project를 생성하기 위해서는, Project Explorer에서 [New]-[Project]-[Arduino]-[New Arduino sketch]를 선택 하고 프로젝트 이름 및 간단한 옵션들을 선택 해야 한다.

20160727_092534 20160727_092606

20160727_094049 20160727_094102

20160727_094122

프로젝트가 정상적으로 만들어 지면 아래와 같은 폴더 구조를 볼 수 있으며, Test_Arduino.cpp 파일에 main 코드를 구현하면 된다.

20160727_094151

Import Library

내가 만든 새로운 라이브러리 혹은 별도의 외부 라이브러리를 사용하기 위해서는 라이브러리를 Import 해야 한다.

Import를 위한 방법은 프로젝트 이름을 선택 한 후, [마우스 우 클릭]-[Import]-[Arduino]-[Import Arduino libraries into the current project]를 선택 해서 원하는 라이브러리를 추가 한다.

20160727_095036

20160727_095149

20160727_095210

Compile and Download

코드를 작성한 후, 아래 표시된 화살표 아이콘을 누르면 컴파일과 다운로드가 동시에 된다. 다운로드가 정상적으로 완료 되면 Console 탭에서 아래와 같은 메시지를 확인 할 수 있다.

20160727_111425

Trouble Shooting

혹시, 컴파일이 안되거나 다운로드시 보드를 찾을 수 없다는 메시지가 나오면 아래와 같이 프로젝트 속성을 확인해서 컴포트 및 보드가 제대로 설정되어 있는지 확인 해야 한다.

20160727_111638

저작자 표시
신고
이 댓글을 비밀 댓글로

Using Arduino Serial monitor of Eclipse on Linux

Posted by 카이젠8501 카이젠8501
2014.10.20 13:13 IT 개발/Arduino


Using Arduino Serial monitor of Eclipse on Linux

요 근래 NoteBook의 OS를 windows에서 Linux로 변경 하였다. 변경 된 Linux 환경에서 Eclipse의 Arduino Plugin을 설치하고 Arduino Library 개발 작업을 진행하려고 하는데, Serial Monitor가 동작하지 않는다. 이를 해결하기 위해 구글링한 내용을 정리하여 포스팅 한다.

위 문제를 해결 하기 위해서는 eclipse.ini 파일에 아래 내용을 추가 해야 한다.

-Dgnu.io.rxtx.SerialPorts=/dev/ttyACM0:/dev/ttyACM1:/dev/ttyACM2:/dev/ttyACM3:/dev/ttyUSB0::/dev/ttyUSB1::/dev/ttyUSB2::/dev/ttyUSB3::/dev/ttyUSB4

kaizen@kaizen-SharkBay-Platform ~/eclipse $ pwd
/home/kaizen/eclipse

kaizen@kaizen-SharkBay-Platform ~/eclipse $ ls
about.html   artifacts.xml  dropins  eclipse.ini   features  notice.html  plugins
about_files  configuration  eclipse  epl-v10.html  icon.xpm  p2           readme

kaizen@kaizen-SharkBay-Platform ~/eclipse $ vi eclipse.ini

In Eclipse.ini

위 내용을 추가 한 후, Eclipse.ini 파일을 열면 아래과 같다.

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m
-Dgnu.io.rxtx.SerialPorts=/dev/ttyACM0:/dev/ttyACM1:/dev/ttyACM2:/dev/ttyACM3:/dev/ttyUSB0::/dev/ttyUSB1::/dev/ttyUSB2::/dev/ttyUSB3::/dev/ttyUSB4

Reference

http://www.baeyens.it/eclipse/Arduino%20eclipse%20plugin%20FAQ.html#Serialdoesntwork


저작자 표시
신고
이 댓글을 비밀 댓글로
    • 2014.11.24 16:49
    비밀댓글입니다

Arduino Sketch 버전을 1.5.x로 변경시 발생하는 컴파일 에러를 해결하는 방법

Posted by 카이젠8501 카이젠8501
2014.10.20 11:27 IT 개발/Arduino


Arduino Sketch 버전을 1.5.x로 변경시 발생하는 컴파일 에러를 해결하는 방법

아두이노 라이브러리를 작업하면서, Arduino Sketch 버전을 1.5.x로 변경하면 아래와 같은 컴파일 에러가 발생하는 경우가 있다.

error: variable ‘debugreceivingdatatable’ must be const in order to be put into read-only section by means of ‘attribute((progmem))’
error: variable ‘notistring_table’ must be const in order to be put into read-only section by means of ‘__attribute
((progmem))’
error: variable ‘at_cmd_table’ must be const in order to be put into read-only section by means of ‘__attribute
((progmem))’

위와 같은 문제가 발생하였을 때의 제 코드는 아래와 같습니다.

const char at_command_wset[]                PROGMEM = "AT+WSET=0,%s";
const char at_command_wsec[]                PROGMEM = "AT+WSEC=0,%s,%s";
const char at_command_wnet[]                PROGMEM = "AT+WNET=1";
const char at_command_wjoin[]               PROGMEM = "AT+WJOIN";
const char at_command_wstat[]               PROGMEM = "AT+WSTAT";
const char at_command_scon_tcp_client[]     PROGMEM = "AT+SCON=O,TCN,%s,%d,,%d";
const char at_command_scon_tcp_server[]     PROGMEM = "AT+SCON=O,TSN,,,%d,%d";
const char at_command_scon_udp[]            PROGMEM = "AT+SCON=O,UCN,%s,%d,%d,%d";
const char at_command_fdns[]                PROGMEM = "AT+FDNS=%s,%d";
const char at_command_fwebs_down[]          PROGMEM = "AT+FWEBS=0";
const char at_command_fwebs_up[]            PROGMEM = "AT+FWEBS=1,A";
const char at_command_smgmt[]               PROGMEM = "AT+SMGMT=%c";
const char at_command_ssend[]               PROGMEM = "AT+SSEND=%c,%s,%d,%d";
const char at_command_ssend_data[]          PROGMEM = "";
const char at_command_wleave[]              PROGMEM = "AT+WLEAVE";

PROGMEM const char *at_cmd_table[] =
{
        at_command_wset,                    // AT_WSET
        at_command_wsec,                    // AT_WSEC
        at_command_wnet,                    // AT_WNET
        at_command_wjoin,                    // AT_WJOIN
        at_command_wstat,                    // AT_WSTAT
        at_command_scon_tcp_client,        // AT_SCON_TCP_CLIENT
        at_command_scon_tcp_server,        // AT_SCON_TCP_SERVER
        at_command_scon_udp,                // AT_SCON_UDP
        at_command_fdns,                    // AT_FDNS
        at_command_fwebs_down,            // AT_FWEBS_DOWN
        at_command_fwebs_up,                // AT_FWEBS_UP
        at_command_smgmt,                // AT_SMGMT
        at_command_ssend,                    // AT_SSEND
        at_command_ssend_data,            // AT_SSEND_DATA
        at_command_wleave                // AT_WLEAVE
};

// Read Point
strcpy_P((char *)tmpstr, (char*)pgm_read_word(&(at_cmd_table[AT_WNET])));

제일 좋은 것은 호환성을 위해 PROGMEM 키워드를 사용하지 않는 것이 제일 좋겠으나, Arduino Board 중 RAM Size가 현저히 작은 것들이 있기 때문에 사용 할 수 밖에 없었습니다. 이로 인해 아래와 같은 컴파일 에러가 발생 하였고 이를 해결 하기 위해서는 아래와 같으 수정하면 된다.

PROGMEM const char *at_cmd_table[] =

to

const char * const at_cmd_table[] PROGMEM =


저작자 표시
신고
이 댓글을 비밀 댓글로

Arduino 기반의 WizFi250 SPI Signal 확인 방법

Posted by 카이젠8501 카이젠8501
2014.09.01 20:29 IT 개발/Arduino

Arduino 기반의 WizFi250 SPI Signal 확인 방법

SPI Signal 측정을 위한 준비 과정

  1. Arduino Board와 WizFi250을 연결
  2. Oscilloscope를 사용하기 위해, 아래 그림과 같이 SPI pin(MOSI,SS,SCK,MISO,GND)들에 Cable을 연결
    LG Electronics | LG-F320S | Center-weighted average | 1/30sec | F/2.4 | 0.00 EV | 4.0mm | ISO-100 | Flash did not fire | 2014:09:01 11:03:38LG Electronics | LG-F320S | Center-weighted average | 1/30sec | F/2.4 | 0.00 EV | 4.0mm | ISO-50 | Flash did not fire | 2014:09:01 11:03:31

일반적인 SPI 파형

  1. SPI Data를 송/수신 하면, SS(CS)는 low로 설정되고 SCK(CLK)가 8번 분주한다. 이때, 아래 그림과 같이 MISO,MOSI 핀을 이용하여 SPI Data를 송/수신 한다.
  2. 아래 그림은 SS(CS) 주기를 기준으로 Capture 한 사진이다.

WizFi250이 MCU에게 데이터를 송신 할 때의 파형

  1. WizFi250이 MCU에게 보낼 데이터가 있으면, Data Ready Pin은 low로 설정된다. 이때, MCU는 SPI Data를 수신 할 수 있다.

SPI Test를 위한 예제 코드

#include <Arduino.h>
#include <SPI.h>
#include <IPAddress.h>
#include "WizFi250.h"

#define ARDUINO_MEGA_2560

WizFi250         wizfi250;

//The setup function is called once at startup of the sketch
void setup()
{
// Add your initialization code here
    Serial.begin(9600);
    Serial.println("\r\nSerial Init");

    wizfi250.begin();
    wizfi250.setDebugPrint(4);
    wizfi250.hw_reset();

    wizfi250.sync();
}

// The loop function is called in an endless loop
void loop()
{
        while(1);
}


저작자 표시
신고
이 댓글을 비밀 댓글로

WizFi250-EVB(Arduino Shield) 이용 시, Check 사항

Posted by 카이젠8501 카이젠8501
2014.08.16 10:29 IT 개발/Arduino

 

 

WizFi250-EVB는 Arduino Shield 역할도 할 수 있도록 설계 되어 있다.

때문에, Arduino Board에 WizFi250-EVB을 연결하면 Arduino Board에서 WizFi250을 쉽게 제어 할 수 있다.

 

그럼 Arduino Board에서 WizFi250-EVB를 Shield 처럼 사용하기 위해 체크 해야 하는 사항들을 정리 한다.

 

1. WizFi250이 SPI Mode로 동작하는지 확인 해야 한다.

  • WizFi250 Arduino Library는 SPI Interface를 사용해서 WizFi250-EVB(Arduino Shield)와 Arduino를 연결하기 때문에 WizFi250의 현재 모드를 확인 해야 한다.

 

  • WizFi250은 Factory Default Setting 후, 처음 입력되는 Interface 신호에 따라 모드가 정해 진다. 예를 들면, 처음 입력되는 신호가 UART이면 UART 모드로, SPI면 SPI 모드로 동작 한다.

 

  • WizFi250을 Factory Default 하기 위한 방법은 아래와 같다.

 


  • Function Button을 이용한 방법 이외에 Serial Command를 이용해서 Factory Default를 수행 할 수 있다. (주의 할 점은 시리얼로 Factory Default를 수생한 후에는 아무런 Serial Data를 송신 하면 안된다. )


 

2. WizFi250-EVB의 0ohm 저항이 아래 위치에 있는지 확인 해야 한다.

 

 

위 1,2번이 정상적으로 확인 되면, WizFi250 Arduino Library를 다운로드 한 후 WizFi250의 Wi-Fi 기능을 사용 할 수 있다.

 

 

 

저작자 표시
신고
이 댓글을 비밀 댓글로

IOT를 겨냥한 Arduino Zero Board

Posted by 카이젠8501 카이젠8501
2014.05.26 19:07 IT 개발/Arduino



Atmel에서도 IoT를 겨냥하여 32-bit Aruino Zero Board를 출시 하였다.

MCU는 Atmel의 SAMD21(Cortex M0)를 탑재 하였으며, 기존의 핀 맵들을 Aruino Uno 보드와 100% 호환되게 만들었으며 기본적인 스펙은 아래와 같다.



MicrocontrollerATSAMD21G18, 48pins LQFP
Operating Voltage3.3V
Digital I/O Pins14, with 12 PWM and UART 
Analog Input Pins6, 12-bit ADC channels
Analog Output Pins1, 10-bit DAC
DC Current per I/O Pin7 mA
Flash Memory256 KB
SRAM32 KB
EEPROMup to 16KB by emulation
Clock Speed48 MHz




아두이노에서 작성한 글을 보면, IoT 기기를 겨냥하여 Cortex M0로 Arduino Zero Board를 출시 한 것으로 보인다.

( 참고로 기존에도 Cortex M3 기반의 Arduino Due가 있었다.) (이런 점으로 보면, 사용 목적에 따라 다르겠지만 IoT 기기에는 Cortex M0가 많이 쓰이는 듯 하다.)

The Zero board aims to provide creative individuals with the potential to realize truly innovative ideas for smart IoT device, wearable technology, high-tech automation, robotics and projects not yet imagined.



저작자 표시
신고
이 댓글을 비밀 댓글로