JavaScript 인터프리터를 포함하고 있는 펌웨어 Espruino를 마이크로컨트롤러 ESP32에 올리고 JavaScript 코드로 보드에 붙어 있는 LED를 점멸시켜 봅니다.
실습 환경
실습에서 사용한 환경은 아래와 같습니다.
-
컴퓨터
- 프로세서: Intel Core i7-8550U CPU
- 메모리: 16.0GB
- 운영체제: Windows 10 (64-bit)
-
응용프로그램
- Anaconda3 (64-bit)
- Chrome 브라우져
-
보드
-
-
ESP32-WROVER-KIT 앞면
-
ESP32-WROVER-KIT 뒷면
-
-
-
USB 2.0 케이블 (A to Micro-B)
실습 과정
esptool 프로그램 설치하기
-
컴퓨터에서 Anaconda Prompt 창을 엽니다.
-
pip를 사용하여 esptool을 설치합니다.
pip install esptool
Espruino 바이너리 파일 얻기
-
컴퓨터 브라우져에서 Download Espruino 페이지를 엽니다.
-
Find a binary 구역에 있는 Choose a board… 선택 상자를 클릭하고 ESP32 항목을 선택합니다.
-
Release: espruino_version_esp32/ (Directory) 항목들 중에서 가장 최신 버전을 클릭합니다.
이 실습에서 사용한 버전: 2v04
-
다음 세 개의 파일을 클릭하여 파일로 저장합니다.
bootloader.bin
espruino_esp32.bin
partitions_espruino.bin
이 실습에서 저장한 폴더:
C:\DevTest\Espruino\espruino_2v04_esp32
컴퓨터와 ESP32 보드 연결하기
-
컴퓨터와 ESP32 보드를 USB 케이블로 연결합니다.
-
장치 관리자의 포트(COM & LPT) 구역 아래에서 ESP32 보드에 해당하는 COM 포트 이름을 확인합니다.
이 실습에서 사용한 포트: USB Serial Port (COM8)
보드의 펌웨어 업데이트하기
-
컴퓨터에서 Anaconda Prompt 창을 엽니다.
-
Espruino 바이너리 파일이 있는 폴더로 이동합니다.
이 실습에서 저장한 폴더:
C:\DevTest\Espruino\espruino_2v04_esp32
-
esptool 프로그램의
--port
옵션 값으로 위에서 파악한 보드의 COM 포트 이름COM8
을 지정하고--baud
옵션 값으로115200
을 지정하여 아래 명령을 실행합니다.최초 업데이트
(base) C:\DevTest\Espruino\espruino_2v04_esp32>esptool --chip esp32 --port COM8 --baud 115200 --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x8000 partitions_espruino.bin 0x10000 espruino_esp32.bin
실행 결과로 아래와 같은 메시지가 표시되면 펌웨어가 정상적으로 업데이트된 것입니다.
esptool.py v2.8 Serial port COM8 Connecting.... Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 3c:71:bf:47:d6:e8 Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Compressed 15392 bytes to 10130... Wrote 15392 bytes (10130 compressed) at 0x00001000 in 0.9 seconds (effective 135.1 kbit/s)... Hash of data verified. Compressed 3072 bytes to 166... Wrote 3072 bytes (166 compressed) at 0x00008000 in 0.0 seconds (effective 762.7 kbit/s)... Hash of data verified. Compressed 1366240 bytes to 883347... Wrote 1366240 bytes (883347 compressed) at 0x00010000 in 78.8 seconds (effective 138.7 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
이후 업데이트
보드에 있는 기존의 Espruino 펌웨어를 새로운 파일로 교체합니다.
(base) C:\DevTest\Espruino\espruino_2v04_esp32>esptool --chip esp32 --port COM8 --baud 115200 --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x10000 espruino_esp32.bin
Espruino Web IDE 설치하기
-
컴퓨터의 Chrome 브라우져에서 Espruino Web IDE 페이지를 엽니다.
-
Chrome에 추가 버튼을 클릭합니다.
-
대화상자에서 앱의 권한을 확인하고 앱 추가 버튼을 클릭합니다.
Espruino Web IDE 설정하기
-
크롬 앱 목록에서 Espruino IDE를 클릭합니다.
-
ESPRUINO WEB IDE 화면 오른쪽 위에 있는 Settings 메뉴를 클릭합니다.
-
COMMUNICATIONS 탭 화면에서 Baud Rate의 값을
115200
으로 설정합니다.
Espruino Web IDE에서 보드로 연결하기
-
크롬 앱 목록에서 Espruino Web IDE를 클릭합니다.
-
ESPRUINO WEB IDE 화면 왼쪽 위에 있는 Connect / Disconnect 버튼을 클릭하고
COM8
항목을 선택합니다. 화면 왼쪽 패널에 아래와 같은 메시지가 표시되면 정상적으로 연결된 것입니다.Found ESP32, 2v04 Connected to COM8
보드의 전원을 켜고 처음 연결할 때 연결에 실패하는 경우가 자주 발생합니다. 이때 다시 연결을 시도하면 연결에 성공합니다.
JavaScript 코드 실행하기
다음 두 가지 방법으로 JavaScript 코드를 실행할 수 있습니다.
-
화면 왼쪽 콘솔창에서 코드를 작성한 후 엔터키를 칩니다.
-
화면 오른쪽 편집창에서 코드를 작성하고 화면 가운데에 있는 Send to Espruino 버튼을 클릭합니다.
아래 코드를 입력하고 실행해 봅니다.
console.log('Hello World!');
출력은 다음과 같이 표시될 것입니다.
Hello World!
=undefined
위에서 두번째 줄은 호출한 함수의 반환값을 표시하는 것인데 console.log()
함수는 값을 반환하지 않기 때문에 =undefined
로 표시되었습니다.
JavaScript 코드 예제
LED 점멸
var on = false;
setInterval(function() {
on = !on;
LED1.write(on);
}, 500);
보드 뒤쪽에 있는 청색 LED가 0.5초마다 깜박이면 위의 코드가 정상적으로 실행되고 있는 것입니다.
파일 시스템 포맷
try {
fs.readdirSync();
} catch (e) { //'Uncaught Error: Unable to mount media : NO_FILESYSTEM'
console.log('Formatting FS - only need to do once');
E.flashFatFS({ format: true });
}
파일 쓰기 및 읽기
fs.writeFileSync('hello.txt', 'Hello World!!!\n');
fs.readFileSync('hello.txt');
참고 자료
ESP32
Espruino
- Espruino on ESP32
- Espruino Web IDE
- Quick Start (Writing Code)
- Espruino GitHub 저장소
- Espruino Software Reference
기타
Written with StackEdit.