이미 KC 인증된 IoT 제품을 활용하기
(너무 많은 부분을 포함해서 부족한 내용을 계속 다음는 중입니다.)
|
|
|
ESP8266 ESP-07S 시리얼 와이파이 모듈 KC인증 |
|
ESP8266 ESP-12S 시리얼 와이파이 모듈 KC인증 |
KC 인증제품(인증번호: MSIP-CRM-Eas-ESP07S) |
|
KC 인증제품(인증번호: MSIP-CRM-Eas-ESP07S) |
|
|
ESP-07S의 뒷면 사진. | ESP-07S의 앞면에서 보는 PIN-OUT. ESP-07S & ESP-12S는 핀아웃이 똑같다. |
KC 인증된 ESP8266 ESP-07S 시리얼 와이파이 모듈나 ESP8266 ESP-12S 시리얼 와이파이 모듈을 활용하여 아듀이노나 메가에 붙여서 마치 구식 컴에 와이파이 카드를 붙인것처럼 사용하기에 대해서 알아보겠다. 두 제품 다 사실상 PIN-OUT까지 똑같아서 구현 방법은 거의 같아서 설명을 ESP-07S로만 하겠다. 사실상 개인적으로 12보다는 07을 더 선호하는데 긴 안테나를 붙일수 있기 때문이다. (아래 안테나를 붙인 사진들 참조)
여기에 제품명 끝에 빨강색으로 S를 붙인 이유는 그 S가 붙은 제품만 KC 인증된 제품이기 때문이다.
주문시 주의해야 할 것이다. 여기서 KC인증은 통신인증까지 포함됬다.
두 제품 다 가격이 국내에서 대략 5000원 + 부가가치세쯤인것 같다.
다음은 이 두 제품의 기본 특징이다.
1. IoT용 무선랜WiFi모듈(802.11 b/g/n 지원) |
두 제품 다 각자 독립적인 컨트롤러의 기능을 수행할 수 있지만, 쓰기에 무척 불편하고 3V3제품이라 많은 센서들과 전기적으로 호환성이 떨어지고 일반 아듀이노 우노, 나노, 메가같은 5V에 다수의 A/D와 다수의 I/O핀을 지닌 제품과는 상대적으로 개발환경이 비교가 불가능할 정도로 열악하다. 그리고 무엇보다도 아듀이노계열을 선호하게 되는 가장 큰 이유는 이미 10여년간 쌓여온 방대한 온라인 자료와 라이브러리다. 다량의 센서를 단 쬐끔 복잡한 장난감 자동차를 만들어도 자체적 통신기능이 있는 NodeMCU같은 제품으로 손쉽게 만들것 같지만 구조가 복잡해지면 질수록 NodeMCU같은 제품이 얼마나 열악한지 뼈저리게 경험하게 될 것이다. 최악의 경우는 사용하고자 하는 센서나 부품의 라이브러리가 아듀이노용으로는 흔한데 NodeMCU용으로는 없어서 라이브러리까지 만들어야 하는 황당한 경우일 것이다. 아주 단순하게 센서 한두개쯤 읽어서 통신으로 보고하는 지극히 단순한 체계를 벗어나면 실제로 복잡한 구조에서는 단순 통신 능력은 전체 프로젝트의 아주 작은 일부분에 지나지 않는다.
예를 들면 대학동아리 프로젝트로 조그만 탱크바퀴와 로봇팔과 카메라 좌우상하조종, 다량의 센서, 음향기능등이 들어간 로봇을 1대를 만든다면 나는 아듀이노 나노나 메가에 HC-12 433 SI4463 serial wireless 같은 단순한 통신모듈을 쓰라고 권하겠다. 하지만 이런 것을 5대를 만들어 상호교류를 해야 한다던지 통합 컨트롤을 해야 한다던지, 20대, 200대 등등 수량이 늘어나면 날수록 정말 잘 정렬된 통합 통신방법이 아주 절실해진다. 이런 경우에 개당 6천원정도의 추가 비용으로 TCP/IP의 로컬 고정 주소를 갖고 비교적 빠른 속도 56k bps로도 통신이 가능하고 TCP/IP나 UDP 프로토콜로 중앙 컨트롤 PC와의 양방향 정보교환능력을 더할수 있다면 이건 옛날에는 꿈에서나 가능한 이야기였다.
내가 거주하는 곳은 FCC 인증만 되면 되는 곳이라 ESP-07을 그냥 쓰면 된다. 외관이 ESP-07S와 쪼금 다르지만 100% 같은 제품. |
|
|
첫 스텝 : AT 펌웨어 플래싱하기.
ESP-05는 기본적으로 AT 모드 Firmware로 되어나오지만 다른 기종 ESP-07S, ESP-12S은 LUA Firmware가 설치되어 올수도 있으므로 AT Firmware가 아니라면 AT Firmware를 Flash에 넣어줘야 한다.
물건 주문시 AT Firmware가 기본적으로 설치되어 있느지를 확인한다면 정말 고생하나를 안해도 된다.
나는 필요할때 언제든지 그냥 집어쓰려고 2년 전 거의 20개정도의 ESP-07과 ESP-12를 AT Firmware로 Flashing을 해 놓아서 지금 다시 플래싱하는 법을 찾으려니 잘 기억이 안나서 그냥 링크만 걸어놓겠다. (주의 : 펌웨어 플래싱할때는 핀 연결 세팅이 다르다. 아래 그림 참조.)
|
(비고 : 펌웨어 플래싱하는 방법은 직접 실험을 통해 확인한것이 아니라 부정확할수도 있습니다.) 다음은 펌웨어 플래싱하는 방법을 소개한 링크이다. http://www.instructables.com/id/ESP-12F-Flashing-AT-Firmware/ 이 사이트의 정보가 100% 맞는지는 확인 안했지만 스스로 찾아서 해도 충분히 할 수 있을듯 하다.
다음 툴들은 https://www.espressif.com/en/products/hardware/esp8266ex/resources 에서 다운받은 화일들. 최신 8266 AT Firmware (ESP8266 AT Bin, V1.6.1, 2018/02/13) 최신 8266 플레싱 툴 (Windows PC용, V3.6.4, 2018/03/06) |
둘째 스텝 : 펌웨어가 잘 들어갔나를 테스트하기.
그림에서는 간단하게 하기 위해서 보드의 3V3에 직접 연결했지만 통신모듈은 전력소모가 크기 때문에 전력원을 보드에서 빼는것은 좋은 방법이 아니다. |
|
AT Firmware가 잘 들어갔다면 윗 핀넘버로 ESP-07S을 RX,TX를 연결된 상태에서 코드를 업하고 NANO를 돌리면
Arduino IDE의 Serial Monitor 창을 AT Command를 넣는 창으로 쓸 수 있읍니다.
// NANO에 연결한 경우 샘플 테스트용 코드다.
// MEGA는 시리얼이 원래 두개라 두번째걸 그냥 쓰면 된다. 그래서 위에 두 줄이 필요가 없다.
#include <SoftwareSerial.h>
SoftwareSerial Serial2(10, 11); // RX, TX 나노에서.
// Mega에서는 다음처럼 Serial2를 initialize한다.
// HardwareSerial & terminal = Serial;
// HardwareSerial & esp05 = Serial2;
void setup() {
Serial.begin(115200);
Serial2.begin(115200);
}
void loop() {
while (Serial2.available()) Serial.write(Serial2.read());
while (Serial.available()) Serial2.write(Serial.read());
}
(*) AT Command 로 기본 준비하기.
AT+GMR // retrieve the firmware info.
AT+RST // reset
AT+CWMODE_DEF=3 // _DEF 가 있는 커맨드는 플래시에 저장되는 내용.
AT+CWJAP_DEF="당신의 와이파이 이름","와이파이 패스워드" // 와이파이에 나중에 자동연결됨.
// 이제 이 장비는 전원만 들어오면 자동으로 그 장소의 와이파이에 자동으로 접속되고,
// 라우터에서 이 장비의 MAC 주소를 특정 아이피 주소로 지정해 놓으면 이 장비는 항상 같은 로컬 고정 아이피를 갖는다.
// 이 기능이 공장이나 농장의 자동화에 얼마나 중요한지는 알만한 사람들은 다 공감할 것이다.
AT+CIPSTART="UDP","0",0,6767,2 // 실험때는, UDP 는 특정 IP를 입력 안해도 메세지를 받는다.
============================================================================
여기서 보면 ESP-07에서 받은 메세지는 앞에 +IPD, 14: 나 +IPD, 2, 14: 등이 포함되 있기 때문에 : 이전 텍스트는 걸러줘야 한다.
예문 : 샘플 NANO 코드 :
단순한 예 : MEGA_ESP-05_SAMPLE_CODE.ino
좀 더 복잡한 예: HMC5883L_MPU6050.ino
모든 아듀이노 코드를 보면 알겠지만 각 장비와 계속 대화를 나눠주는 PC 의 어플이 없으면 안된다.
PC의 통합 관리 프로그래밍은 그 자체만으로도 시그널을 받아서 필요하면 데이타베이스에 넣어주고,
웹에 포스팅도 해주고, 이멜도 보내주고 등등 그 기능이 너무 방대해서 따로 다루기로 하겠다.
아래 사진은 장비(Bot) 10개의 다른 개체에 한개씩 통신 테스트를 하는 사진이다. 지금 이 사진은 10번 Bot (Mega + ESP-05)으로 중앙 관리 프로그램에서 50번 시그널을 쏘는 테스트다. 10번 Bot은 와이파이로 받은 시그널을 시리얼포트로 넘겨줘서 아듀이노 IDE의 시리얼모니터로 시그널을 잘 받는지 확인하는 모습이다. 이 실험에 사용된 10번 Bot은 ESP-05를 넷카드로 사용했지만 ESP-07을 쓰든 ESP-12를 쓰든 방법이 다 똑같다. 모두 ESP8266코어를 사용해서 커맨드까지 똑같다. 여기서 보면 #010(기계번호)-TO## (1..50) .... 구조로 데이타를 보냈는데 ESP8266 를 AT모드 외에 다른 모드에서는 저정도의 속도로 계속 시그널을 보내면 엄청난 데이타실종사태가 벌어진다. 중간에 듬성듬성 몇줄씩이 사라지고 통신의 신뢰성을 심각하게 의심하게 만든다. 여러 실험을 해 본 결과 AT모드가 ESP8266의 통신에서는 가장 안정적이란 결론을 내리게 됬다.
윗 실험에 사용된 실제 모델.
------------------------------------------------------------------------------------------------------------------------------
가상실습
한번 위에 기술을 응용해서 아주 단순한 문제를 갖고 가상 실습의 예를 보겠다.
가령 어느 기업에서 사람이 직접 하루에 한번씩 돌면서 해오던 100개의 커다란 발효탱크의 상황검사를 자동화하기로 결정했다고 하자. 모니터링할 자료는 각 탱크의 특정 기체의 농도, 온도, 습도 딱 세가지 정보. 그리고 이왕에 자동화하는 김에 하루에 한번이 아니라 30분마다 자동으로 DB에 상황을 기록하고 이상현상이 있으면 경보알람 + 담당자들에게 이메일을 하게 만들기로 했다고 치자.
여기서 온라인에 떠 있는 대부분의 ESP8266계열들의 샘플은 누군가 각기의 기기에 웹브라우저로 접속해서 접속하는 내용들이 주류를 이룬다. 왜냐면 대부분의 샘플들이 한개의 모니터링 장비 위주로 아마추어들이 쉽게 이해되도록 만들어졌기 때문이다. 이런 방식은 효율성이 없어서 기업에서는 정말 쓸모가 없다. 특히 대기업에서는 온라인에 교육용으로 나와있는 허접한 방식을 제안했다가는 망신당하기 딱 좋다.
이제 프로처럼 문제를 풀어보자. 중앙컨트롤 프로그램에서 30분마다 자동반복실행되는 timer기능에 Tank로 이름붙인 DB의 Table을 읽고 모든 모니터링 기기에 3초당 한 기기씩 그 기기의 고유 로컬 아이피주소로 TCP/IP로든 UDP로든 Wifi 로 "#001:REPORT>" 명령어를 보낸다. 여기서 #는 명령어 시작, 001은 기기 번호(탱크번호), REPORT는 보고하라는 명령, >는 흔히 무전할때 오버! 하는 끝마침표. 이런 규약은 프로그래머가 자신이 원하는 방식대로 정하기만 하면 된다. 어차피 기기에 들어갈 그 명령어를 받고 해석하는 코딩도 본인이 할 것이기 때문이다.
그럼 기기가 메세지를 받고
자신의 번호와 명령받은 번호가 일치하나 확인하고,
명령어가 무엇인가 확인하고, 만약 명령어가 REPORT라면 센서들을 읽고 답신을 한다.
R001:CONC;1.3> ;설명하자면 Respond from Tank 001, gas CONCentration is 1.3 ppm
R001:TEMP;48> ; TEMPerature 48C
R001:MOIS;15> ; MOISture level 15%
이 세 메세지를 중앙컨트롤 프로그램에서 받으면 그 시간과 탱크번호(기기번호)와 자료를 모두 DB에 입력한다. 동시에 데이타값에 이상신호가 있으면 상황발생 알람을 울리고 메일을 보내준다. 그래서 각 기기들은 아주 단순한 통신기능 + 3가지 센서만 딸랑 있으면 나머지는 중앙컨트롤 프로그램에서 다 알아서 해 준다. 각 기기는 자신이 언제 보고하는지 시간도 몰라도 된다. 그냥 명령어 받으면 센서값을 읽고 딱 3문장만 보고하면 끝.
100개의 탱크를 다 모니터하는데 걸리는 시간은 5분. 관리실에 컴에 메인 창에는 특별한 정보 없이 평소때는 큰 글씨로 "이상 무" 와 옆에 현재 잘 작동하고 있다는 표시로 깜빡이는 ❤ 부호만 나온다. 보다 fancy한 효과를 주려면 이쁜 그래픽으로 현재 모니터링 하는 탱크를 나타내 준다던가 마지막 모니터링한 시간, 다음 모니터링할 시간등 추가 정보도 줘도 된다.
특별히 문제가 발생하면 소리알람과 함께 깜빡이는 큰 글씨로 "상황발생: <상황의 자세한 내용, 시간과 몇번 탱크에 무슨 문제인가>"를 표기해 준다. 그리고 나중에 경영진이 검사할 수 있도록 문제발생내역도 DB에 자동으로 입력해 준다. 차후 담당직원이 그 상황을 어떻게 대처했나를 직접 입력하게도 해 주어야 한다. 그리고 DB에 들어 있는 자료를 사용해 언제든지 쿼리와 리포팅 툴로 얼마든지 경영진이 원하는 정보를 만들어낼수 있다.
(*) 내용이 너무 복잡해질까봐 까다로운 내용은 모두 감추고 단순히 메세지 전달부분만을 최대한 간결하게 요약한 내용이다.