본문 바로가기
IT/Platform

[아두이노] ESP-01: BTT SKR V1.4 연결

by 블랙오닉스 2024. 6. 15.

2024.06.15

오늘 SKR V1.4가 도착해서 이리저리 보다가 WiFi 연결단자 확인.

ESP-01 연결하도록 되어 있다.

3.3V, GND, RX, TX

연결하고 USB 꽂으니 아무런 반응이 없다. -> 보드 중앙에 USB/VCC 선택 점퍼가 있어 USB로 변경

-> 전원은 들어오나 LED 변화가 없다.


LPC1768 의 Serial Port 를 이용해서 ESP-01과 연결시도

1. Arduino IDE를 열어서 확인 했으나 보드나 칩이 없다

 -> NXP LPC1768은 지원안함

 

2. PlatformIO에서 platformio.ini를 수정하면 자동으로 nxplpc 관련 라이브러리가 추가된다.

[platformio]
[env:lpc1768]
platform         = nxplpc
board            = lpc1768
upload_protocol = mbed

 

Copilot 을 통해서 multiple serial 코드 작성

#include "mbed.h"

// Define UART pins (TXD0 and RXD0)
Serial uart_usb(USBTX, USBRX);  // USB serial for debugging
Serial uart_sw(P4_28, P4_29);   // UART0 (pins P0.2 and P0.3)

int main() {
    uart_usb.baud(115200);  // Set baud rate for USB serial
    uart_sw.baud(115200);    // Set baud rate for UART0

    while (1) {
        // Read data from UART0 and send it via USB serial
        if (uart_sw.readable()) {
            char data = uart_sw.getc();
            uart_usb.putc(data);
        }

        // Read data from USB serial and send it via UART0
        if (uart_usb.readable()) {
            char data = uart_usb.getc();
            uart_sw.putc(data);
        }
    }
}

 

문제는 mbed.h가 없다고 나온다 -> mbedos = ARM용 IOT OS

mbed.h를 다운받았으나 파일 하나로 안된다.

전체 라이브러리를 받았으나 엄청크로 include하기 힘들다.

검색후 framework를 추가 했더니 mbed관련 라이브러리가 자동 설치된다.

[platformio]
[env:lpc1768]
platform         = nxplpc
framework = mbed
board            = lpc1768
upload_protocol = mbed

 

그러나 Serial 타입이 없다고 에러


mbed 안쓰는 환경 코드 추천 받음

#include <LPC17xx.h>

// Define software serial pins (P4_28 and P4_29)
#define SW_SERIAL_TX P4_28
#define SW_SERIAL_RX P4_29

void initSoftwareSerial() {
    // Initialize GPIO pins for software serial
    LPC_PINCON->PINSEL9 &= ~(0xF << 24);  // Clear bits for P4_28
    LPC_PINCON->PINSEL9 &= ~(0xF << 28);  // Clear bits for P4_29
    LPC_PINCON->PINSEL9 |= (0x1 << 24);   // Set P4_28 as GPIO
    LPC_PINCON->PINSEL9 |= (0x1 << 28);   // Set P4_29 as GPIO

    // Set pins as outputs (TX) and inputs (RX)
    LPC_GPIO4->FIODIR |= (1 << 28);  // TX (output)
    LPC_GPIO4->FIODIR &= ~(1 << 29); // RX (input)
}

void sendViaSoftwareSerial(char data) {
    // Send data via software serial (bit-banging)
    for (int i = 0; i < 8; ++i) {
        // Set TX pin high or low based on data bit
        if (data & (1 << i)) {
            LPC_GPIO4->FIOSET = (1 << 28); // Set TX high
        } else {
            LPC_GPIO4->FIOCLR = (1 << 28); // Set TX low
        }

        // Delay (adjust as needed)
        for (volatile int j = 0; j < 1000; ++j) {
            // Wait
        }
    }
}

char receiveViaSoftwareSerial() {
    // Receive data via software serial
    char receivedData = 0;
    for (int i = 0; i < 8; ++i) {
        // Sample RX pin (adjust timing as needed)
        if (LPC_GPIO4->FIOPIN & (1 << 29)) {
            receivedData |= (1 << i); // Set corresponding data bit
        }

        // Delay (adjust as needed for baud rate)
        for (volatile int j = 0; j < 1000; ++j) {
            // Wait
        }
    }
    return receivedData;
}


void initUSBSerial() {
    // Initialize USB serial (Virtual COM Port)
    // No specific pins needed for USB serial

    // Configure USB serial settings (baud rate, etc.)
    LPC_UART0->LCR = 0x83;  // 8-bit data, 1 stop bit, no parity
    LPC_UART0->DLL = 9;     // Set baud rate (115200 bps for PCLK = 25 MHz)
    LPC_UART0->DLM = 0;

    // Enable USB serial
    LPC_UART0->LCR &= ~(1 << 7);  // Clear DLAB to enable UART
}

void sendViaUSBSerial(char data) {
    while (!(LPC_UART0->LSR & (1 << 5)));  // Wait until TX buffer empty
    LPC_UART0->THR = data;                // Send data via USB serial
}


int main() {
    initSoftwareSerial();
    initUSBSerial();

    while (1) {
        // Read data from UART0 and send it via UART1
        if (LPC_UART0->LSR & 1) {
            char data = LPC_UART0->RBR;  // Read received data from UART0
            LPC_UART1->THR = data;       // Send data via UART1
        }

        // Read data from UART1 and send it via UART0
        if (LPC_UART1->LSR & 1) {
            char data = LPC_UART1->RBR;  // Read received data from UART1
            LPC_UART0->THR = data;       // Send data via UART0
        }
    }
}


#endif

UART0는 HW고 UART1은 SW 인데 엉망이 코드가 되버렸다.


BTT SKR V1.4 회로도를 다시 확인하니 WiFi용 Serial이 RXD3/TXD3로 HW UART다.

#include <LPC17xx.h>

void initUART0() {
    // Initialize UART0 pins (P0.2 as TXD0, P0.3 as RXD0)
    // Set pin modes and functions (consult the datasheet)

    // Configure UART0 settings (baud rate, etc.)
    LPC_UART0->LCR = 0x83;  // 8-bit data, 1 stop bit, no parity
    LPC_UART0->DLL = 9;   // Set baud rate (115200 bps for PCLK = 25 MHz)
    LPC_UART0->DLM = 0;

    // Enable UART0
    LPC_UART0->LCR &= ~(1 << 7);  // Clear DLAB to enable UART
}

void initUART3() {
    // Initialize UART3 pins (P4.28 as TXD3, P4.29 as RXD3)
    // Set pin modes and functions (consult the datasheet)

    // Configure UART3 settings (baud rate, etc.)
    LPC_UART3->LCR = 0x83;  // 8-bit data, 1 stop bit, no parity
    LPC_UART3->DLL = 9;   // Set baud rate (115200 bps for PCLK = 25 MHz)
    LPC_UART3->DLM = 0;

    // Enable UART3
    LPC_UART3->LCR &= ~(1 << 7);  // Clear DLAB to enable UART
}

int main() {
    initUART0();
    initUART3();

    while (1) {
        // Read data from UART0 and send it via UART3
        if (LPC_UART0->LSR & 1) {
            char data = LPC_UART0->RBR;  // Read received data from UART0
            LPC_UART3->THR = data;       // Send data via UART3
        }

        // Read data from UART3 and send it via UART0
        if (LPC_UART3->LSR & 1) {
            char data = LPC_UART3->RBR;  // Read received data from UART3
            LPC_UART0->THR = data;       // Send data via UART0
        }
    }
}

 

src 디렉토리에 LPC17xx.h 와 platform = mbed로 해야 컴파일 에러가 안난다.

LPC1768


빌드가 되어 업로드 하려고 하니 Port 에러 발생

오토를 COM3로 했는데 이제는 *.bin이 없다고 나온다.

업로드 포트 관련 검색하니 이렇게 나온다

https://doitnow-man.tistory.com/entry/3D-printer-firmware-%EA%B0%81%EC%A2%85-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0

 

[3D printer]- firmware 설정 각종 문제 해결

[Anet A8 기준 입니다] 1. platformio run --upload-port 에러 윈도우 : LPC1768 1) platformio.ini 에 upload_port 추가 [env:LPC1768] platform = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/master.zip framework = arduino board = nxp_lpc

doitnow-man.tistory.com

framework을 아두이노로 하고 뭔가를 많이 설정.

 

'IT > Platform' 카테고리의 다른 글

[아두이노] ESP-01: 원격제어  (0) 2024.06.17
[RPi] Pico & ESP-01 연결 도전  (0) 2024.06.16
[아두이노] ESP-01 + Nano & Pro Micro  (0) 2024.06.14
[아두이노] ESP32 & ili9488 출력 성공  (0) 2024.06.13
[Arduino] GRBL @ESP32  (0) 2024.05.29