페이지

2020년 2월 5일 수요일

마이크로컨트롤러에서 JavaScript 사용하기

마이크로컨트롤러에서 JavaScript 사용하기

JavaScript 인터프리터를 포함하고 있는 펌웨어 Espruino를 마이크로컨트롤러 ESP32에 올리고 JavaScript 코드로 보드에 붙어 있는 LED를 점멸시켜 봅니다.

실습 환경

실습에서 사용한 환경은 아래와 같습니다.

  • 컴퓨터

    • 프로세서: Intel Core i7-8550U CPU
    • 메모리: 16.0GB
    • 운영체제: Windows 10 (64-bit)
  • 응용프로그램

    • Anaconda3 (64-bit)
    • Chrome 브라우져
  • 보드

  • USB 2.0 케이블 (A to Micro-B)

실습 과정

esptool 프로그램 설치하기

  1. 컴퓨터에서 Anaconda Prompt 창을 엽니다.

  2. pip를 사용하여 esptool을 설치합니다.

    pip install esptool
    

Espruino 바이너리 파일 얻기

  1. 컴퓨터 브라우져에서 Download Espruino 페이지를 엽니다.

  2. Find a binary 구역에 있는 Choose a board… 선택 상자를 클릭하고 ESP32 항목을 선택합니다.

  3. Release: espruino_version_esp32/ (Directory) 항목들 중에서 가장 최신 버전을 클릭합니다.

    이 실습에서 사용한 버전: 2v04

  4. 다음 세 개의 파일을 클릭하여 파일로 저장합니다.

    • bootloader.bin
    • espruino_esp32.bin
    • partitions_espruino.bin

    이 실습에서 저장한 폴더: C:\DevTest\Espruino\espruino_2v04_esp32

컴퓨터와 ESP32 보드 연결하기

  1. 컴퓨터와 ESP32 보드를 USB 케이블로 연결합니다.

  2. 장치 관리자포트(COM & LPT) 구역 아래에서 ESP32 보드에 해당하는 COM 포트 이름을 확인합니다.

    이 실습에서 사용한 포트: USB Serial Port (COM8)

보드의 펌웨어 업데이트하기

  1. 컴퓨터에서 Anaconda Prompt 창을 엽니다.

  2. Espruino 바이너리 파일이 있는 폴더로 이동합니다.

    이 실습에서 저장한 폴더: C:\DevTest\Espruino\espruino_2v04_esp32

  3. 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 설치하기

  1. 컴퓨터의 Chrome 브라우져에서 Espruino Web IDE 페이지를 엽니다.

  2. Chrome에 추가 버튼을 클릭합니다.

  3. 대화상자에서 앱의 권한을 확인하고 앱 추가 버튼을 클릭합니다.

Espruino Web IDE 설정하기

  1. 크롬 앱 목록에서 Espruino IDE를 클릭합니다.

  2. ESPRUINO WEB IDE 화면 오른쪽 위에 있는 Settings 메뉴를 클릭합니다.

  3. COMMUNICATIONS 탭 화면에서 Baud Rate의 값을 115200으로 설정합니다.

Espruino Web IDE에서 보드로 연결하기

  1. 크롬 앱 목록에서 Espruino Web IDE를 클릭합니다.

  2. ESPRUINO WEB IDE 화면 왼쪽 위에 있는 Connect / Disconnect 버튼을 클릭하고 COM8 항목을 선택합니다. 화면 왼쪽 패널에 아래와 같은 메시지가 표시되면 정상적으로 연결된 것입니다.

    Found ESP32, 2v04
    Connected to COM8
    

    보드의 전원을 켜고 처음 연결할 때 연결에 실패하는 경우가 자주 발생합니다. 이때 다시 연결을 시도하면 연결에 성공합니다.

JavaScript 코드 실행하기

다음 두 가지 방법으로 JavaScript 코드를 실행할 수 있습니다.

  1. 화면 왼쪽 콘솔창에서 코드를 작성한 후 엔터키를 칩니다.

  2. 화면 오른쪽 편집창에서 코드를 작성하고 화면 가운데에 있는 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

기타

Written with StackEdit.

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...