'IoT'에 해당되는 글 12건

  1. 2019.08.14 Hardware | ESP-01 or ESP8266 사용기 - 5 2
  2. 2019.01.25 Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

Hardware | ESP-01 or ESP8266 사용기 - 5

|

이번 글을 읽기에 앞서, ESP8266 에 관하여 몇 차례에 걸쳐 다뤄 왔습니다.

ESP8266 을 활용하기 위해서는 여러 지식과 경험이 바탕이 되어야 추가적인 내용을 충분히 이해할 수 있습니다.

시간이 허락되신다면, 먼저 아래 포스팅 들을 참고해 주세요.


* Hardware | ESP-01 or ESP8266 사용기 - 1

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-1


* Hardware | ESP-01 or ESP8266 사용기 - 2

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-2


* Hardware | ESP-01 or ESP8266 사용기 - 3

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-3


* Hardware | ESP-01 or ESP8266 사용기 - 4

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-4



또한, 이 포스트에서 가장 많이 참고한 사이트는 여기 입니다.


* Using ESP8266 SPIFFS

https://www.instructables.com/id/Using-ESP8266-SPIFFS/





1. SPIFFS


SPI Flash File System 의 약자로서,

ESP8266 등에 장착된 Flash memory chip 의 여유공간에 파일을 쓰기/읽기/삭제 등을 할 수 있게 해주는 기능입니다.


* ESP8266 Arduino Core

https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html


|--------------|-------|---------------|--|--|--|--|--|
^              ^       ^               ^     ^
Sketch    OTA update   File system   EEPROM  WiFi config (SDK)


단, 일판 file system 처럼 directory 구조처럼 하위 폴더 개념이 없고, 1차원적으로 모든 파일을 한곳에 넣어서 사용해야 합니다.



궁극적인 목적으로는,

- ESP8266 등에 장착된 controller 가, 시간과 로드가 많이 걸리는 외부 저장장치에 접근하지 않고, 내부적으로 처리하기 위한 방법

- 파일이 자주 변하지 않으며, 주로 읽혀지는 파일

- 여타 파일 시스템 처럼 bad block 등의 검사나, 마킹을 할 수 없음

- HTML, CSS, JS 파일들을 올려놓고 ESP8266 에서 web server 를 돌릴 수 있슴





2. Arduino IDE 에서 환경 설정


파일을 올리는 툴은 Arduino IDE 에서 하게 되므로, SPIFFS 를 사용할 수 있도록 Arduino IDE 를 설정해야 합니다.

우선 Arduino IDE 에서 SPIFFS 메뉴를 활성화 시키기 위해 아래 순서대로 진행합니다.



A. Plug-In 인스톨

아래 사이트에서 최신 파일을 받습니다.


* esp8266/arduino-esp8266fs-plugin

https://github.com/esp8266/arduino-esp8266fs-plugin/


* Latest version of ESP8266 Arduino

https://github.com/esp8266/arduino-esp8266fs-plugin/releases/tag/0.4.0

ESP8266FS-0.4.0.zip


혹시 모르니, 필요한 파일을 받아서 올렸습니다.



B. 파일을 설치

Arduino IDE 에서 설정된 sketch 폴더에 tools 라는 directory 를 만들어 서 그 안에 위의 파일을 해동하여 넣습니다.



sketch 폴더는 환경마다 다르므로, 현재 쓰고 있는 환경에서 sketch 폴더가 어디인지는 Preference 에서 확인 가능합니다.




C. 설치 완료 확인

설치 후, Arduino IDE 를 재시작 하여 Tools 메뉴에 가 보면,

아래 Before/After 처럼, 새롭게 "ESP8266 Sketch Data Upload" 매뉴가 활성화 된 것을 확인 할 수 있습니다.


Before



After






3. ESP8266 의 용량 확인


파일을 업로드 하기 전, ESP8266 에 달려 있는 Flash memory 의 용량을 확인해 봅니다.

사실 대략 알고 있다면 이 부분은 건너 뛰어도 됩니다.


우선 ESP8266 보드를 Arduino IDE 에서 직접 access 할 수 있도록, 보드를 등록해 봅니다.

보드 등록을 위한 관련 파일을 다운로드 받아 설치하려면, 아래 설정처럼 Preference 에 해당 정보가 등록되어 있어야 합니다.


File > Preference


https://arduino.esp8266.com/stable/package_esp8266com_index.json


아래처럼 등록하면 됩니다.

예전에 Digispark 를 DIY 한 흔적이 있네요. 다른 URL이 이미 있다면, 다음 줄에 등록하면 됩니다.



그럼, 아래 메뉴에서 ESP8266 보드 관련 파일을 설치할 수 있게 됩니다.


Tools > Board > Boards Manager



Boards Manager 에서 esp8266 으로 검색하여, 설치되어 있지 않으면 설치해 줍니다.



여기까지 왔다면, Board 메뉴에서 Generic ESP8266 Module 을 선택할 수 있게 됩니다.



특별히 할 설정은 없슴니다만, SPIFFS 를 2M 사용한다고 설정 했습니다.

다른 설정은 잘 모르겠네요.



이제 Flash memory 확인용 sketch 를 선택합니다.


File > Examples > ESP8266 > CheckFlashConfig



실제 소스는 다음과 같습니다.


/*
  ESP8266 CheckFlashConfig by Markus Sattler
  This sketch tests if the EEPROM settings of the IDE match to the Hardware
*/

void setup(void) {
  Serial.begin(115200);
}

void loop() {

  uint32_t realSize = ESP.getFlashChipRealSize();
  uint32_t ideSize = ESP.getFlashChipSize();
  FlashMode_t ideMode = ESP.getFlashChipMode();

  Serial.printf("Flash real id:   %08X\n", ESP.getFlashChipId());
  Serial.printf("Flash real size: %u bytes\n\n", realSize);

  Serial.printf("Flash ide  size: %u bytes\n", ideSize);
  Serial.printf("Flash ide speed: %u Hz\n", ESP.getFlashChipSpeed());
  Serial.printf("Flash ide mode:  %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));

  if (ideSize != realSize) {
    Serial.println("Flash Chip configuration wrong!\n");
  } else {
    Serial.println("Flash Chip configuration ok.\n");
  }

  delay(5000);
}


!!주의!!

ESP8266 의 Flash memory 에 writing 하기 위해서는 아래 순서에 맞게 해야 합니다.


1. RST 의 스위치를 누른다.

2. FLASH 의 스위치를 누른다.

3. RST 의 스위치에서 손을 뗀다.

4. FLASH 의 스위치에서 손을 뗀다.

5. Flash program 에서 "시작" 을 누른다.



위의 구성처럼, 꼭 외부 전원으로 ESP8266 을 구동시키는 것과,

PC 와 Serial 연결 위한 FTDI 나 CP2102 의 GND 를, 외부전원의 GND 와 서로 연결해 주는 것을 빼먹으면 안됩니다. (동기)


FTDI 는 Serial 통신만을 위한 것이지, ESP8266 의 전원까지 공급하게 하면, 매우 높은 확률로 실패합니다.



컴파일된 sketch 가 잘 밀어들어가고 있고요.



문제 없이 끝났습니다.

Hard resetting via RTS pin... 이라고 나오고, 그 뒤 반응에 대한 내용은 나오지 않습니다.



Serial Monitor 로 확인해 보면, 올라간 sketch 가 잘 구동되는 것을 확인할 수 있습니다.

원래 1MB 였던 Flash memory 가 4MB 로 변경된 것이 확인 됩니다.





4. SPIFFS upload


이제 아까 Plug-in 을 이용해 구현했던 "ESP8266 Sketch Data Upload" 기능을 이용하여 실재로 data upload 를 해 봅니다.

sketch 폴더에 "data" 폴더를 만들고, 거기에 파일을 놔두면, 그 파일이 자동으로 upload 된다고 합니다.



으잉? 빈 깡통이라고 그러네요?

이미 위에서 알고 있는 sketch folder 와 또 다른 곳을 이야기 하는 듯 합니다.

IDE 메뉴의 "Show Sketch Folder" 를 이용하여 어디를 이야기 하는지 확인해 봅니다.


Sketch > Show Sketch Folder



Sketch 폴더가 여기였어? 이 SPIFFS 업로드용 sketch 폴더는 Temp 폴더로 잡혀있나 보네요.

data 폴더를 만들어 주고 업로드 하고 싶은 파일을 심어 놓습니다.



드디어 이 메뉴를 눌러 봅니다.



"SPIFFS Uploading Image..." 라고 뜨면서 막 뭐를 밀어 넣는 것 같습니다.



"SPIFFS Image Uploaded" 라고 뜨면서, "Hash of data verification" 까지 실행하고 끝납니다.

텍스트 파일이라서 그런지 data 압축도 자동으로 되는 것 같습니다.



Data upload 영역과 기존 firmware 영역이 잘 분리되어 있는지, 전원을 리셋하여 command 를 날려 봅니다.

기존 Wi-Fi firmware 영역은 완벽히 구분되어 잘 보존되어 있네요.



아래 그림에서 보이듯, SPIFFS 가 사용하는 File System 영역과 Program 영역이 분리되어 있는지 확인해 본 것입니다.





5. Upload 된 파일 확인


그럼 upload 되어 있는 파일이 진짜 내가 올린 파일인지 확인해 볼까요?

이 글, 맨 처음에 참조한 사이트에서 text 파일 확인용 소스가 있습니다. 그대로 활용해 봅니다. (Steve 고마워요~)


/* Steve Quinn 06/03/17
Copyright 2017 Steve Quinn

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .

Written to accompany the following Instructable;

'Using ESP8266 SPIFFS'

Compiled using Arduino 1.6.9 
*/

#include "string.h"
#include "FS.h"

bool    spiffsActive = false;
#define TESTFILE "/esp8266_SPIFFS.txt"

void setup() {
	Serial.begin(115200);
	delay(1000);
	
	// Start filing subsystem
	if (SPIFFS.begin()) {
		Serial.println("SPIFFS Active");
		Serial.println();
		spiffsActive = true;
	} else {
		Serial.println("Unable to activate SPIFFS");
	}
	
	delay(2000);
}

void loop() {
	if (spiffsActive) {
		if (SPIFFS.exists(TESTFILE)) {
			
			File f = SPIFFS.open(TESTFILE, "r");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Reading");
				Serial.println();
			} else {
				String s;
				Serial.print("Contents of file '");
				Serial.print(TESTFILE);
				Serial.println("'");
				Serial.println();
				
				while (f.position() < f.size()) {
					s=f.readStringUntil('\n');
					s.trim();
					Serial.println(s);
				}
				f.close();
			}
			Serial.println();
			
			f = SPIFFS.open(TESTFILE, "a");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Appending");
				Serial.println();
			} else {
				Serial.print("Appending line to file '");
				Serial.print(TESTFILE);
				Serial.println("'");
				Serial.println();
				f.println("This line has been appended");
				f.close();
			}
			
			f = SPIFFS.open(TESTFILE, "r");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Reading");
				Serial.println();
			} else {
				String s;
				Serial.print("Contents of file '");
				Serial.print(TESTFILE);
				Serial.println("' after append");
				Serial.println();
				
				while (f.position() < f.size()) {
					s=f.readStringUntil('\n');
					s.trim();
					Serial.println(s);
				}
				f.close();
			}
		} else {
			Serial.print("Unable To Find ");
			Serial.println(TESTFILE);
			Serial.println();
		}
	}
	
	while (true) {
		yield();
	}
}


프로그램 영역에 올려야 구동되므로, IDE 에서 일반 sketch upload 로 밀어 넣습니다.

프로그램이 올라가면 Serial Monitor 를 통해 확인해 봅니다.



제가 작성했던 text 파일이 잘 읽혀지네요. 신기~!



한글 및 ASCII 코드도 잘 읽혀서 변환되었습니다. (OS 가 한글이기도 하고, 파일 인코딩을 UTF-8 로 지정함)



이 소스는 Flash memory 에서 SPIFFS 를 사용하여,

일반 file system 의 IO 처럼, 추가 쓰기가 가능하다는 것을 보여주기 위해 append 기능이 부여되어 있습니다.



이 과정을 통해 기존 firmware 위에 확인용 sketch 가 overwrite 되었으므로,

다시 Wi-Fi firmware 를 입혀주고, 그렇게 해도 여전히 data 영역이 그래도 보존되는지 확인해 봅니다.



그 다음, 다시 위의 소스 sketch 를 입히고 실행시켜 보니, 아래와 같이 한줄 더 추가 되었습니다.



즉, data 영역은 프로그램 용 sketch 나, Wi-Fi firmware 와는 완전 분리된 상태로 관리 되고 있다는 것을 알 수 있습니다.





FIN


ESP8266 에 대해서 5회에 걸쳐 살펴봤습니다.

대략적인 사용법 - 개념, 환경 구성, Flash memory 사용법 - 은 훑어 본것 같습니다.


ESP8266 의 진정한 활용은 무선으로 연결하여 IoT data 나, 실시간 연결을 통한 제어가 주 목적이 되겠습니다.

다음부터는 센서를 가지고 놀면서, IoT 적인 활용법을 익혀 보겠습니다.


And

Book | 훤히 보이는 RFID/USN - Get to know RFID/USN

|

조만간 AliExpress 에서 주문한 RFID reader 와 tag 가 도착하기 전에 RFID 에 조금이라도 알고 싶어서 이 책을 도서관에서 빌렸습니다.

ETRI 관련된 박사님들이 각자 잘 아시는 영역의 글을 모아 만든 RFID/USN 관련된 서적입니다.



아래는 목차입니다.




이 책은 8분이 공동으로 저술한 책 입니다.





1. 책 정보


* 시리즈 : ETRI easy IT 의 6번째 책

* 제목 : 훤히 보이는 RFID/USN

* 발행 : 초판 2008년 6월 25일

* 지은이 : 표철식, 박상준, 김기일, 김동균, 이문규, 김관중, 김선진, 서정해

* 펴낸곳 : 전자신문사

* ISBN 978-89-92885-05-8 03560

* 값 : 20,000원


꼭 알아야 할것은, 이 책이 발간된 해가 2008 년도 라는 부분입니다.


지금은 NFC 나 RFID 가 일상생황에 많이 쓰이고 있어서, 독자에게 별다른 감흥을 못주는 책이 될 수 있습니다.

또한 일본에서는 이미 NFC 기능의 Suica 를 2001년부터 시험 운용하고 있었다는 점을 보면, 2008년에 이 책이 나온것도 조금 늦은 감이 없지않아 있습니다.





2. 용어


알아둬야 할 용어는 당연히 다음과 같겠습니다.


* RFID : Radio Frequency Identification

https://en.wikipedia.org/wiki/Radio-frequency_identification


* USN : Ubiquitous Sensor Network

T23010000040001PDFE.pdf


* NFC : Near Field Communication

https://en.wikipedia.org/wiki/Near-field_communication


지금에 와서는 USN 은 IoT 의 일부가 되겠네요.

요즘은 USN 이라고 이야기 하면 알아듣는 사람은 거의 없을꺼예요.

이 출판물이 나왔던 2008년에 ITU 에서 발간한 문서에서 USN 이라는 용어가 쓰였습니다.


또한 비슷한 것끼리는 RFID 와 NFC가 있습니다만, 개발된 흔적에 따라 쓰임이 조금 다릅니다.

아래 website 에서 잘 설명되어 있네요.


* RFID vs. NFC: What’s the Difference?

https://blog.atlasrfidstore.com/rfid-vs-nfc


infographic 으로 된 그림이 있어서 여기에 개제해 봅니다.



iPhone 끼리 근거리 통신을 통하여 사진을 전송받는 기술이 NFC 였군요.





3. 원리


긴 이야기를 짧게 해본다면 다음과 같습니다.



- 전자기파를 reader 에서 쏴주면, tag 코일에서 발생하는 유도전류를 통해 생성된 전기

- 그 전기를 이용하여 tag ID 를 reader 에 부하변조를 통하여 정보 전달

- 변조 방식은 ASK, FSK, PSK 등을 사용



실제 tag 를 까 보면, transponder 와 chip 및 회로로 되어 있습니다.



가로세로 1mm 의 저 작은 칩이 모든 것을 관장한다니 너무 신기합니다.



저 chip 의 제조에 대해서는 아래 Youtube 를 참고해 보세요.


* How I Made My Own RFID tag - From Shenzhen, China to New York City

https://www.youtube.com/watch?v=PWzyPZAPbt0



사실 저도 이 영상을 보고 RFID 와 arduino 를 연결해서 확인해 보고 싶다는 생각을 한 계기가 되었습니다.

저 위의 Youtube 주인공은 (오른쪽 - Scotty Allen), iPhone 을 부품을 개별적으로 구입해서 하나의 완성 iPhone 을 만들어서 큰 반향을 일으켰던 사람입니다.


이번에는 RFID 를 쫒아, 중국의 Shenzehen 으로부터 New York 까지의 일정이 담겨있습니다.





4. 활용


활용되는 분야는 너무 많습니다.

물류부터 시작하여, 뭔가 추적해야 하는 것이라면 모두 사용될 수 있겠습니다.



등록된 주차장에 들어갈 때도 사용되구요.



마라톤을 뛸 때, 신발에 부착하여 저 바닥면을 지나갈 때, 선수 기록용으로도 활용됩니다.

확실하게 저 위에만 밟고 지나가면 시간이 등록되고 휴대폰 SMS 로 전송되어서 신기했습니다.





5. chip 선택


이미 완성된 기술이기 때문에 그만큼 규격도 다양하게 나왔습니다.

그 규격에 따라 사용되는 tag chip 과 reader 종류가 많습니다.

사실 규격이라고 하기보단, 필요에 따라 발전시킨 버전들이라고 봐야겠죠.


마침 "RFID Selection Guide" 라는 PDF 를 인터넷에서 발견해서 여기에 링크를 걸어 봅니다.


* RFID Selection Guide

rfid+guide.pdf



위에서 보이는 PN532 가 마켓에서 쉽게 구할 수 있고, NFC 및 RFID 양쪽에 대응하면서 그럭저럭 쓸만한 대상으로 보입니다.

인터넷에서 찾아보면 RFID 만 되고, 상용 NFC 가 안되는 것들도 있거든요.


SONY 가 개발한 FeliCa (Suica) 및 iPhone 의 FeliCa 대응 NFC 도 될 듯도 하니,

AliExpress 에서 도착하면 따로 글을 작성해 보겠습니다.






FIN


책 이야기는 별로 하지 않고, RFID 와 NFC 에 대해서 조사해본 이야기가 주가 되었네요.


이 책의 아쉬운 부분은, 이미 한창 발전해버린 RFID 가 주제이다 보니, 지금의 2019 년에 읽기에는 조금 old 한 느낌입니다.


또 하나를 더 들자면, 저자가 8명이나 관여하다 보니 서로 겹치는 내용이 다뤄져 있어, 읽는데 지겹습니다. (사공이 많음)

어떤 챕터는 너무 기본 기술에 치중되어 있고, 다른 챕터는 활용성에만 치중되어 있어서, 이게 기술서적인지 마케팅 서적인지 혼란스러운 부분도 있습니다.


다만 일관성이 없다보니, 전반적으로 "응~ 그렇구나" 정도로 넓은 범위로 지식을 얻기에는 좋은 책이네요. (궂이 들자면...)


And
prev | 1 | 2 | next