Raspberry Pi Pico&Pico W

Raspberry Pi Pico C 프로그래밍 - I2C LCD 예제

webnautes 2023. 10. 19. 21:47
반응형

Raspberry Pi Pico에서 I2C LCD에 문자열을 출력하는 예제입니다. Raspberry Pi Pic W에서도 동일하게 동작합니다. 



2023. 01. 07 - 최초작성



진행하기 전에 다음 포스트를 먼저 진행해야 합니다. 

 

Windows에 Raspberry Pi Pico C 개발 환경 만들기

https://webnautes.tistory.com/2092



0. I2C LCD와 Raspberry Pi Pico를 다음처럼 연결합니다. 

 

Raspberry Pi Pico  GPIO 4 (pin 6)-> I2C LCD SDA

Raspberry Pi Pico  GPIO 5 (pin 7)-> I2C LCD SCL

Raspberry Pi Pico  3.3V (pin 36) -> I2C LCD VCC

Raspberry Pi Pico  GND (pin 38)  -> I2C LCD GND

 

 

I2C LCD는 I2C LCD 3.3V 16x2 또는 I2C LCD 3.3V 1602로 검색하여 구입하시면 됩니다. 5V가 아닌 3.3V 용을 사야하는 점에 유의하세요.



1.다음 파일을 다운로드하여 앞에서 진행한 pico 폴더의 다음 위치에 압축을 풀어둡니다.

폴더 이름을 hello_lcd라고 이름을 바꾸었습니다.

https://github.com/webnautes/nudapeu/blob/master/project1.zip 



2. 다음 위치에 있는 lcd_1602_i2c.c를 복사하여 

 

다음 위치에 붙여넣기합니다.



3. CMakeLists.txt 파일을 다음 내용으로 대체합니다.

 

cmake_minimum_required(VERSION 3.12)
include(pico_sdk_import.cmake)

set(projname "hello_lcd")

project(${projname} C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

#include(example_auto_set_url.cmake)

add_executable(${projname}
        lcd_1602_i2c.c
        )

target_link_libraries(${projname} pico_stdlib hardware_i2c)

pico_add_extra_outputs(${projname})



4. 윈도우 키를 누른 후, “ Developer Command”을 입력하여 Developer Command Prompt for VS 2022를 실행합니다. 



5. hello_lcd 폴더에 있는 build 폴더로 이동합니다. 

 

D:\>cd work\pico\hello_lcd\build

 

D:\work\pico\hello_lcd\build>




6. 다음 두 명령을 차례로  실행합니다.

 

cmake -G "NMake Makefiles" ..  

 

nmake 



7. 윈도우 탐색기로  hello_lcd  아래에 있는 build 폴더로 이동하면  hello_lcd.uf2 파일을 찾을 수 있습니다.  



pico의 BOOTSEL 버튼을 누른 채 PC에 연결합니다.

hello_lcd.uf2를 pico를 연결해 추가된 외장 저장공간으로 복사합니다. 



8. 잠시 후, LCD에 특정 문자열들이 반복적으로 보이는 것을 볼 수 있습니다. 



만약 보이지 않는다면 I2C LCD 뒤에 있는 가변 저항을 조정해보세요.



9. lcd_1602_i2c.c를 잠시 살펴보면 배열 message에 저장되어 있는 문자열 2개씩 묶어서  LCD에 두줄로 출력해줍니다.

lcd_set_cursor에서 지정한 위치에 lcd_string를 사용하여 문자열을 출력합니다. 

 

    static char *message[] =
            {
                    "RP2040 by", "Raspberry Pi",
                    "A brand new", "microcontroller",
                    "Twin core M0", "Full C SDK",
                    "More power in", "your product",
                    "More beans", "than Heinz!"
            };

    while (1) {
        for (int m = 0; m < sizeof(message) / sizeof(message[0]); m += MAX_LINES) {
            for (int line = 0; line < MAX_LINES; line++) {
                lcd_set_cursor(line, (MAX_CHARS / 2) - strlen(message[m + line]) / 2);
                lcd_string(message[m + line]);
            }
            sleep_ms(2000);
            lcd_clear();
        }
    }




반응형