본문 바로가기
Hardware/3D Printing

Anycubic Delta Kossel - WIFI 모듈 설치 및 무선 시리얼 통신 (ESP01+ESP3D)

by lovey25 2020. 7. 26.
반응형

세상에는 정말 대단하신 분들이 많습니다. 3D 프린터 처음 사서 조립하면서도 어떻게 이런 생각을... 그리고 어떻게 이런 걸 오픈소스로... 그리고 Anycubic은 이걸 이렇게 쉽게 조립할 수 있게 키트화 할 생각을... 등등으로 끝없는 감탄을 했던 게 얼마 전인 것 같은데 여기에 이제 WIFI모듈을 연결해서 무선으로 접속할 수 있도록 할 생각을 하고 있다니 다시 한번 감탄을 하게 됩니다.

이번 포스팅은 저렴한 ESP01 모듈에 ESP3D라는 솔루션을 사용하여 기존에 사용하고 있던 Anycubic Delta Kossel 프린터를 무선으로 접속해서 컨트롤할 수 있도록 업그레이드하는 과정을 다루고자 합니다.

준비물

먼저 필요한 준비물입니다. 당연히 가장 중요한 ESP01 모듈(1M 메모리짜리) 필요하고 그리고 ESP모듈에 펌웨어를 올릴 때 브릿지로 사용할 아두이노 우노 보드, 저항, 점프 케이블 그리고 나중에 최종적으로 프린터기에 설치할 최종 보드를 만들 만능 기판과 프린터의 5V 전원을 3.3V로 변환시켜줄 AMS1117 전원 모듈 등을 준비합니다.

ESP01 모듈은 ESP8266 칩을 사용하는 모듈들 중에 가장 단순하고 저렴한 모델이죠. 그리고 EPS01 모듈은 플래시 메모리의 크기가 512kb인 것과 1Mb인 것 두 가지를 볼 수 있는데 여기서는 1Mb인 것을 사용합니다. ESP3D 구형 버전은 사용이 가능하지만 최근 버전들은 다양한 기능이 추가되면서 용량이 커졌기 때문에 512kb는 너무 부족합니다. 1Mb도 충분하지는 않아서 기능을 포기해야 하는 부분이 있을 수 있습니다. 그래서 그 이상 스펙의 ESP12와 같은 모듈이 있다면 그걸 사용하시는 게 좋을 것 같습니다.

ESP3D

먼저 가장 중요한 ESP3D라는 프로젝트에 대해서 간단히 설명하고 시작하겠습니다. ESP3D는 저렴한 와이파이 모듈을 3D프린터의 시리얼 브릿지로 사용할 수 있도록 해주는 솔루션입니다. 그리고 단순히 와이파이로 프린터를 연결해주는 게 다가 아니라 프린터를 컨트롤하고 모니터링할 수 있는 웹 기반의 인터페이스까지 제공하는 완벽한 솔루션입니다. ESP8266 칩 기반의 와이파이 모듈에 올릴 펌웨어부터 시작해서 웹 인터페이스까지 모두 포함하고 있어서 이거 하나만 있으면 그냥 바로 3D프린터를 와이파이로 접속할 수 있습니다.

펌웨어에 필요한 파일은 여기서 받을 수 있습니다.

 

luc-github/ESP3D

FW for ESP8266/ESP8285/ESP32 used with 3D printer. Contribute to luc-github/ESP3D development by creating an account on GitHub.

github.com

Github에서 리포지토리 전체를 다운로드하셔도 되고 아니면 저처럼 리포지토리를 포킹 해서 컴퓨터 하드에 클론을 하셔도 되고 편하신 대로 프로젝트 전체 파일을 다운로드합니다. 글을 작성하는 시점 기준으로 최신 버전은 2.1이고 3.0알파버전까지 공개되어 있습니다.

필요한 파일을 준비하셨다면 이제 이 펌웨어를 컴파일해서 ESP01 모듈에 업로드시켜야 하는데요. 펌웨어를 업로드하는 데는 다양한 방법이 있지만 저는 VS Code의 PlatformIO 익스텐션을 사용하는 걸 추천드립니다. 원래는 VS에서 VMicro라는 익스텐션을 사용하는 걸로 설명을 했을 테지만 VMicro가 최근 유료로 전환되었고, 무료인 PlatformIO보다 속도도 느려서 앞으로 계속 써야 하나 심각하게 고민을 하고 있는 중이거든요.

PlatformIO IDE가 처음이시라면 기본적인 개념을 잡으실 수 있게 다음 포스팅을 먼저 참고하시길 바랍니다.

 

Visual Studio Code로 만드는 파이썬 개발 환경

개인적으로 지금까지 파이썬 공부를 즐기지 못한 이유 중에는 IDE가 썩 맘에 들지 않았다는 점이 있는데요. 원래 저는 Visual Studio(VS) 신봉자라서 VS에서 C++과 아두이노 그리고 파이썬까지 모두 사�

kwonkyo.tistory.com

VSCode와 PlatformIO가 모두 준비되었으면 계속 진행해 보겠습니다.

앞에서 다운로드하였던 ESP3D를 VS Code의 Workspace로 가져옵니다. 이미 프로젝트 파일에는 PlatformIO.ini파일이 포함되어 있고 ini파일에는 ESP8266 보드의 설정까지 작성되어 있습니다. 바로 컴파일 한번 시도해봅니다.

컴파일까지 아무 문제없이 일사천리로 잘 되네요. 

만약 ESP01 모듈이 아니라 난 좀 더 럭셔리하게 ESP12급 모듈을 사용하신다면 다운로드하신 코드 그대로 수정할 필요 없이 업로드까지 하시면 되겠습니다. 하지만 전 요건 좀 아까워서 ESP01 모듈을 사용하기 위해서 몇 가지 손을 좀 더 보고 업로드하겠습니다.

럭셔리한 ESP12E

ESP01 모듈에 ESP3D 펌웨어 및 웹UI 업로드

펌웨어를 업로드로 들어가기 전에 준비해야 할 것이 하나 더 있습니다. ESP01 모듈을 컴퓨터와 연결시켜줄 USB 브릿지를 만들어야 합니다. 얼마 전에 아래 사진처럼 아두이노 우노의 쉴드 처럼 만들어둔 부품을 사용했습니다.

USB 브릿지에 대한 상세한 내용 이전 포스팅에서 자세히 다루었으니 다음 두 개의 이전 글 참고해 주세요.

https://kwonkyo.tistory.com/354
https://kwonkyo.tistory.com/367

 

자 이제 ESP01 모듈이 컴퓨터와 연결이 완료되었다고 생각하고 계속 진행해 보겠습니다.

PlatformIO IED로 돌아와서 다운로드한 파일들 중에서 PlatformIO.ini파일을 열어줍니다. 그리고 ESP-01 모듈의 기본정보를 바탕으로 아래 소스와 같이 PlatformIO.ini 파일에 ESP-01 섹션을 추가해 줍니다. 기존에 있는 [env:esp8266] 섹션을 복사해서 필요한 부분만 수정한 것입니다.

[env:esp01]
;esp8266 core 2.5.2
platform = espressif8266@2.2.0
board = esp01_1m
framework = arduino
monitor_speed = 115200
; set frequency to 80MHz
board_build.f_cpu = 80000000L
; set frequency to 40MHz
board_build.f_flash = 40000000L
board_build.flash_mode = dio
upload_resetmethod = nodemcu
build_flags = 
    -Wl,-Teagle.flash.1m512.ld
    -D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
    -DNONOSDK221=1
    -DNDEBUG
    -DVTABLES_IN_FLASH
upload_speed = 115200
lib_ignore = 
    AsyncTCP
    ESP32NetBIOS
    ESP32SSPD

내용을 살짝 보고 가자면, 먼저 ESP-01 모듈에 맞도록 보드의 기본정보에 따라 설정을 수정했습니다. 아래 링크에서 board ID, CPU frequency, flash frequency 등을 찾을 수 있습니다.

https://docs.platformio.org/en/latest/boards/espressif8266/esp01_1m.html

그리고 ESP3D는 ESP01 모듈에 모듈 구동을 위한 펌웨어도 올라가지만 인터넷으로 ESP01 모듈에 직접 접속해서 모듈과 프린터를 컨트롤하고 설정을 변경할 수 있도록 해주는 웹서버의 기능을 하는 파일들도 있는데요. SPIFFS을 이용해서 ESP01 모듈에 있는 1Mb 플래시 메모리의 일부를 웹서버용으로 할당을 합니다. 그래서 이 부분에 대한 설정도 수정해 주어야 합니다. 위에 있는 코드에서 14행에 해당하는 부분이며 관련된 설명은 아래 링크에서 찾아볼 수 있습니다.

https://dokk.org/documentation/platformio/v3.6.0/platforms/espressif8266/#flash-size

그리고 여기서 사용하는 것처럼 ESP모듈을 아두이노와 같은 중간 브릿지를 이용해서 업로드하는 경우 "upload_resetmethod"옵션도 수정을 해 주어야 합니다. 원래는 "ck"옵션으로 되어 있었는데 ESP12e모듈과 같이 USB 포트가 있는 모듈을 사용하는 경우 사용할 수 있는 옵션인 것 같습니다. 옵션에 대한 설명은 아래 링크 참고하시면 되겠습니다.

https://docs.platformio.org/en/latest/platforms/espressif8266.html#reset-method

 

PlatformIO 메뉴에서 새로 만든 섹션 [env:esp01]의 메뉴를 찾아서 빌드와 업로드를 진행합니다. 

출력 창에서 결과를 확인할 수 있는데 빌드 결과 플래시 메모리에 파일 시스템을 위한 512kb를 제외한 나머지 512kb가 99.1%로 꽉 찬 것을 볼 수 있습니다. 이렇게 메모리를 빈틈없이 사용하는 게 어떤 문제를 일으킬지는 잘 모르겠습니다. 나중에 문제가 발견된다면 기능을 제외시켜야 하지 않을까 싶은데 일단 그냥 넘어갑니다. ^^;

펌웨어가 잘 올라갔는지 확인해야겠죠?

ESP01 모듈의 회로에서 GPIO0에 연결되어 있는 GND 선을 제거하고 모듈을 리셋합니다. 그리고 스마트폰을 이용해서 와이파이를 검색해서 방금 업로드한 펌웨어가 실행되는지 확인합니다. 펌웨어가 정상적으로 동작을 하고 있다면 ESP3D라는 이름의 SSID가 검색이 될 건데요. 초기 비밀번호 "12345678"로 연결을 한 뒤 "192.168.0.1"주소로 접속을 해보면 아래 오른쪽 그림과 같이 ESP01 모듈에서 구동되는 서버로 접속할 수 있습니다. 지금은 웹서버 파일을 업로드하지 않은 상태라서 index.html 파일이 없다는 메시지가 나오고 있습니다. 

여기에 들어갈 파일들은 맨 처음 다운로드하였던 ESP3D파일중에서 ESP3D > data라는 폴더 안에 위치한 3개의 파일이 들어가야 하는데요. 

위에 접속한 페이지에서 업로드 버튼을 눌러서 필요한 파일을 바로 업로드해줄 수도 있고 아니면 PlatformIO로 돌아가서 메뉴 중 "Upload File System image"라는 메뉴를 선택해 줍니다. 이 메뉴는 미리 할당한 파일 시스템 메모리에 "data"라는 폴더에 있는 파일을 업로드해주는 역할을 한다고 합니다. 이때는 당연히 ESP01은 다운로드 모드로 컴퓨터에 연결되어 있어야겠죠.

정상적으로 파일 시스템 파일까지 업로드가 완료되었습니다.

ESP3D 초기 설정

이제 ESP3D 설정을 해보겠습니다. 먼저 핸드폰이나 기타 와이파이가 되는 디바이스로 와이파이를 검색해서 ESP3D로 접속을 합니다. 이번에는 조금 다른 화면을 볼 수 있습니다.

위에 있는 사진의 왼쪽 첫 번째 화면을 만날 수 있는데 윗부분에 있는 "Goto ESP3D interface"버튼을 눌러줍니다. 그러면 기본 설정을 도와주는 마법사 화면이 시작되는데 왼쪽부터 차례대로 진행을 해줍니다. 먼저 사용하는 언어를 설정합니다. 아직 한글은 안보이니 영어로 설정하고 다음 페이지로 넘어갑니다. ESP3D 설정 화면에서는 먼저 사용하는 프린터의 펌웨어 종류를 골라줍니다. 저는 Marlin으로 선택을 해주고 프린터의 baudrate를 설정해 줍니다. 그리고 ESP01 모듈의 대표 이름을 설정하고 다음 페이지로 넘어갑니다. WiFi 설정 화면에서는 role부분을 "Client Station"으로 변경해줍니다. ESP3D가 클라이언트로서 공유기에 접속하는 구조를 말합니다. 아래에서 접속하고자 하는 네트워크의 SSID와 비밀번호를 입력해주면 모든 설정이 완료됩니다. 설정 화면을 닫고 ESP01 모듈을 리셋하고 조금 기다려줍니다.

지금까지 문제없이 진행되었다면 ESP01 모듈은 부팅을 하면서 클라이언트 모드로 설정한 기존의 네트워크를 찾아서 접속을 했을 텐데요. 사용하고 있는 무선 공유기에 접속해서 어떤 주소로 연결이 되었는지 확인해 보겠습니다.

저는 ipTime공유기를 사용하고 있는데요. "내부 네트워크 설정"이라는 메뉴에 들어가면 접속되어 있는 클라이언트들을 확인할 수 있는데요. 앞에서 설정한 "Hobeom3D"가 "10.11.85.27" 주소를 할당받아서 접속되어 있는 것을 볼 수 있습니다.

크롬을 열어서 접속해보면 아래와 같이 프린터기를 컨트롤할 수 있는 화면을 볼 수 있습니다. 인터페이스가 평소에 사용하던 "pronterface"와 매우 유사하네요.

와이파이 모듈 설치

UART3 연결 실패

이제 와이파이 모듈의 준비가 끝났으니 프린터기에 연결하는 일만 남았네요. 가장 어려운 일만 남았네요.

Anycubic Delta Kossel프린터는 Trigorilla보드를 사용하고 있는데요. 이 보드는 아두이노 메가 기반의 보드로 알고 있는데요. USB로 연결해서 사용하는 기본 시리얼 포트 외에 보드를 살펴보면 UART3라는 마킹으로 시리얼 통신용 단자가 마련되어 있습니다. 익숙한 배열인 5V, GND, Tx, Rx 4개 핀입니다. 그런데 결론적으로는 이 포트를 사용하는 건 포기했습니다.

Marlin 펌웨어에 보면 메인 시리얼 포트 외에 추가로 보조 시리얼 포트를 활성화할 수 있는 코드가 있습니다. 보조 시리얼을 3번으로 할당해서 수정 펌웨어를 업로드하고 앞에서 준비한 와이파이 모듈을 연결해 봤지만 전혀 작동을 하지 않았습니다.

인터넷을 좀 찾아보니 아래와 같은 문제가 있었습니다. 아래 그림은 Trigolila보드의 핀 배열인데요. UART3번의 Tx, Rx 핀으로 사용되는 D15, D14번이 리미트 스위치 연결용 단자로 사용되고 있는 걸 볼 수 있습니다. 그래서 이미 사용하고 있는 리미트 스위치를 다른 핀으로 옮기고 D14, 15번 핀을 어디에서도 사용하지 않도록 Marlin코드를 수정해 주어야 UART3번을 사용할 수 있는 거죠. Marlin은 워낙 복잡한 프로그램이라서 해볼 엄두가 나지 않아서 이 방법은 포기하기로 했습니다.

UART0 해킹

모처럼 만들어본 와이파이 모듈을 사용도 못하게 되었나 했지만 다행히 방법이 없지는 않았습니다. 원래 USB로 연결해서 사용하고 있는 Serial 1번 포트를 ESP3D와 공유하는 방법인데 ESP3D Wiki페이지에 시리얼 포트를 해킹 해킹(?) 하는 방법이 설명된 페이지가 있었습니다.

 

luc-github/ESP3D

FW for ESP8266/ESP8285/ESP32 used with 3D printer. Contribute to luc-github/ESP3D development by creating an account on GitHub.

github.com

Trigolila 보드에서 보드 전원 입력 방법을 선택하는 점프 스위치가 있는 위치 근처에 4개의 저항이 나란히 배치되어 있는 부분이 있는데요. 바로 이 중 2개가 1번 Serial의 Tx, Rx 핀이라고 합니다. 

사진상에 추가로 연결한 파란색 와이어는 Tx, 녹색 와이어는 Rx입니다. 이게 납땜할 크기가 너무 작아서 납땜 초보인 저는 거의 30분 이상을 낑낑거리면서 겨우 연결에 성공했습니다.

그리고 그 외 회로 구성은 아래 그림처럼 꾸며봤습니다.

 

일단 Trigolila보드에서 오는 Tx신호의 전압이 5V이기 때문에 1kΩ, 2.2kΩ저항을 이용해서 전압을 다운시킨 신호가 ESP01 모듈로 들어가도록 했고, ESP01 모듈용 전원은 앞에서 찾았던 UART3 포트에서 5V와 GND단자를 이용했습니다. 그런데 마찬가지로 전원 5V를 ESP01 모듈이 이용할 수 있도록 3.3V로 강하시켜주기 위해서 AMS1117-3.3V모듈을 사용했습니다. AMS1117 모듈이 가격도 저렴하고 사용하기도 편리했고 또 마침 3.3V출력용 모듈을 판매하고 있어서 사용해 봤습니다.

테스트를 하기 위해서 회로를 연결한 모습입니다. 

자 두근두근, ESP서버로 접속을 해봅시다. ESP3D 메뉴에서 두 번째 "Printer"메뉴로 이동을 해서 화면 가운데 새로고침 버튼을 눌러주면 프린터와 와이파이 모듈이 잘 연결되어서 정상적으로 인식이 되면 아래 그림처럼 프린터 설정을 할 수 있는 옵션들이 화면에 나타나게 됩니다. 드디어 와이파이 3D프린터를 사용할 수 있게 되었습니다. ^^

 

와이파이 보드(모듈) 제작

빵판 위에 지저분한 회로를 정리해서 프린터기에 설치할 수 있도록 모듈 형태로 만들었습니다.

만능 기판은 적당한 사이즈가 없어서 잘라서 만들었는데 이쁘게 잘리지가 않았네요. 나중에 좀 다듬어 봐야겠어요

이제 아이패드로도 프린터기를 컨트롤할 수 있게 되었습니다. 언제나 짤막한 아두이노용 USB 케이블 때문에 등치 큰 프린터기가 컴퓨터 옆에서 자리를 차지하고 있었는데 이제 USB 케이블 걱정할 필요가 없어져서 프린터기 위치를 선정하는데 자유로워졌습니다. 그리고 와이파이 공유기를 통하면 외부에서도 프린터기 동작 상태를 확인할 수도 있고 여러모로 활용성이 좋아졌습니다.

신기한 게 Marlin 펌웨어에서는 ESP3D사용을 위해서 수정한 것이 하나도 없는데 와이파이 모듈을 설치하고 전원을 켜니 프린터기 화면에 접속된 아이피 주소가 표시가 됩니다. 제가 사용 중인 Marlin 버전은 2.0.5.4인데 와이파이 기능을 사용하기 위한 자체 기능이 포함되어 있습니다. 하지만 와이파이와 관련된 기능은 전혀 손대지도 않고 비활성화된 그대로의 펌웨어를 사용 중인데 신기하게도 와이파이 모듈이 프린터기와 잘 연동이 되고 있는 것처럼 보이고 있네요. 앞으로 사용을 좀 해보면서 어떤 식으로 활용하면 좋을지 추가 포스팅으로 다루어봐도 좋을 것 같네요.

이상 ESP01 모듈을 사용한 Delta Kossel 프린터 WiFi 업그레이드를 마치겠습니다.

 

끝!

반응형

댓글