라즈베리파이 피코 예제 - lajeubelipai piko yeje

라즈베리파이 피코 예제 - lajeubelipai piko yeje

이번에는 라즈베리파이 피코를 이용해서 PC와 시리얼 통신을 하는 여러가지 상황을 다뤄보려한다.
(해당 글은 Thonny 프로그램을 이용하여 라즈베리파이와 통신하므로
시리얼통신에 있어서 다른 프로그램과 차이가 있을 수 있다.)

1. 키보드 입력 받기
가장 기본이 되는 키보드 입력을 받아서 작동을 하는 코드이다.

user_name = input("로그인 이름을 입력하세요 : ")
while user_name != "DIYver":
    print("등록된 이름이 없습니다. 다시 입력해주세요.")
    user_name = input("로그인 이름을 입력하세요 : ")
print("DIYver님 안녕하세요 ~")

피코에 올려서 테스트를 해도 되고,
파이썬 자체에서 실행해도 될 정도니, 편한대로 하면 되겠다.
파이썬의 기초 코드이다.

라즈베리파이 피코 예제 - lajeubelipai piko yeje

input() 함수를 이용해서 키보드값을 받아올 수 있고,
조건문에서 대소문자를 구별해서 일치 불일치를 판단할 수 있다.

위의 예제를 통해서 다양하게 테스트를 해보면 되겠다.
참고로 파이썬이 처음이라면 기초를 배워서 하는 것이 좋아보인다.
파이썬은 C언어와 다르게 줄 끝에 ; 세미콜론이 붙지 않고
들여쓰기로 구분하기때문에 들여쓰기에 신경을 많이 써야한다.

2. 키보드에서 숫자 입력 받아서 내장 LED 깜빡거리게 하기
위에서 다뤘던 내용에 피코 내장 LED를 제어하는 코드를 다뤄보도록 하자.

import machine
import utime

led_onboard = machine.Pin(25, machine.Pin.OUT)
led_onboard.value(0)
led_count = int(input("LED 몇 번 깜빡일까요? "))

for i in range(led_count):
    print(i+1,"번째 깜빡임\n")
    led_onboard.toggle()
    utime.sleep(0.6)
    led_onboard.toggle()
    utime.sleep(0.6)

print("END")

위의 코드는 아래 작동 영상으로 확인하면 되겠다.

https://youtu.be/q6cealCXqGg

LED 제어 관련 설명은 저번시간에 다뤘었으므로,
LED 제어 내용이 이해가 안 된다면, 아래 글을 읽고 오도록 하자.
https://diyver.tistory.com/189

라즈베리파이 피코(Raspberry pi PICO) 개발환경 세팅하기 micropython

라즈베리파이 피코는 아두이노처럼 각종 센서를 읽고 구동기를 작동시키는 마이크로컨트롤러이다. 코딩은 micropython 과 C/C++ 로 할 수 있다고 한다. 공식 홈페이지에 방문해서 알아보자. https://www

diyver.tistory.com

라즈베리파이 피코 예제 - lajeubelipai piko yeje

코드를 보면 1번과 좀 다른 것을 알 수 있는데
input( ) 함수 쪽이 다른  것을 알 수 있다.

라즈베리파이 피코 예제 - lajeubelipai piko yeje

앞에 int(   ) 로 묶어주는 장면이 있는데,
input( ) 은 String 이므로 숫자가 아니라 문자이기에
그 밑에 나오는 for 반복문에서 in range 에 적합한 변수 자료형이 아니게 된다.
따라서 강제로 형변환을 해줘야 하는 것이다.

그 밑으로는 파이썬 기본 코드이므로 이해하기 어렵지 않을 것이다.

위의 작동 영상을 보면 키보드 입력한 대로 모스부호로 LED 출력이 되는 것을 볼 수 있다.

코드는 정답이 없기 때문에 전체 공개는 하지 않기로 하고,
위의 영상에 나온 일부분만 보더라도 큰 힌트가 될 것이라 생각한다.

따라하다가 잘 안되는 경우 댓글로 문의를 남겨주면 코드를 보고 잘못된 부분을 알려주는 방향으로 하려한다.

3번 까지 완벽하게 따라했다면,
어지간한 시리얼 통신을 통한 문자 분리는 다 가능한 것이므로, 
앞으로 프로젝트 개발에 있어서 큰 문제가 없을 것이다.

안녕하세요 항상 날로먹는 구차니 입니다.

raspberry pi pico(이하 pico)는 이름은 라즈베리 인데 실제로는 아두이노에 가까운 제품입니다.

specification

  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
  • 264KB of SRAM, and 2MB of on-board Flash memory
  • Castellated module allows soldering direct to carrier boards
  • USB 1.1 with device and host support
  • Drag-and-drop programming using mass storage over USB
  • 26 × multi-function GPIO pins
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
  • Accurate clock and timer on-chip
  • Temperature sensor
  • Accelerated floating-point libraries on-chip
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

https://www.raspberrypi.org/documentation/rp2040/getting-started/#board-specifications

공식 홈페이지에서는 micropython을 쓰라고 하는데

https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-micropython

파일 업로드 하는 것이 불편해서 circuitpython을 이용하겠습니다.

https://circuitpython.org/board/raspberry_pi_pico/

USB HID 만들기

HID는 Human Interface Device의 약자로 마우스 키보드 등의 사람과 상호작용을 할 수 있는 장치를 의미합니다.

Step 0.

지릅니다! (한푼도 안 받고 내돈내산입니다.)

https://www.devicemart.co.kr/goods/view?no=13921792 << VAT 별도 5400

http://itempage3.auction.co.kr/DetailView.aspx?itemno=C362541750 << VAT 포함 5940 (결국은 동일가격)

http://itempage3.auction.co.kr/DetailView.aspx?itemno=C367078792 << 핀헤더 실장버전 9500

Step 1.

circuit python 6.3.0 (2021.07.02 기준)

을 업로드 하기 위해 uf2 확장자로 된 펌웨어를 다운로드 받습니다.

그리고 라이브러리를 다운로드 받습니다. circuit python 6.3.0으로 받으니 라이브러리는 Bundle Version 6.x로 받으면 됩니다.

https://circuitpython.org/board/raspberry_pi_pico/

https://circuitpython.org/libraries

Step 2.

한번도 사용하지 않은 pico 라면 usb micro 케이블을 이용하여 PC와 연결하면 외장 USB 메모리로 인식됩니다.

한번이라도 사용한 녀석이라면 BOOTSEL 버튼을 누른채로 usb micro 케이블을 이용하여 PC와 연결합니다.

Step 3.

uf2 펌웨어를 외장 메모리로 끌어다 떨어트립니다.

Step 4.

재시작이 되면 좋고, 아니면 선을 뽑았다 다시 꼽습니다.

lib 디렉토리와 code.py를 발견할 수 있습니다.

라즈베리파이 피코 예제 - lajeubelipai piko yeje

Step 5.

lib 디렉토리에 Step 1. 에서 받은 라이브러리의 압축을 풀어

그중 adafruit_hid 디렉토리를 lib/adafruit_hid 으로 복사합니다.

(전체 다 복사하려면 용량 부족해서 복사할 수 없습니다)

Step 6.

메모장이나 python 수정 가능한 텍스트 에디터를 이용하여 code.py 수정합니다.

keys_pressed = [Keycode.A, "Hello, World!", "https://cytron.io/p-maker-pi-pico\n"]

해당 라인이 버튼 누를 때 마다 작동할 행동이며

Keycode.A는 GP20번에 연결된 스위치를 누를 때 A 키를 누르게 하며 (다만 코드 상에 SHIFT를 누르게 되어있으니 소문자 a가 나올 것으로 예상됩니다)

"Hello World!" 는 GP21번에 연결된 스위치를 누를 때 문장을 입력하게 하고

"https://cytron.io/p-maker-pi-pico\n"는 GP22번에 연결된 스위치를 누를 때 문장을 입력하고 마지막에 엔터를 치게 합니다.

아래처럼 코드를 수정하면 Ctrl-x, Ctrl-c, ctrl-v를 하는 전용 키보드를 만드실 수 있습니다.

keys_pressed = [Keycode.X, Keycode.C, Keycode.V]

control_key = Keycode.CONTROL

https://tutorial.cytron.io/2021/02/16/keyboard-emulator-using-raspberry-pi-pico-maker-pi-pico-and-circuitpython/

Step 7.

곱게(?) 우클릭을 하여 USB 메모리를 제거하고 USB선을 뽑고 배선 작업을 합니다.

준비물은 스위치와 선입니다.

라즈베리파이 피코 예제 - lajeubelipai piko yeje

심화작업 Step 8.

컨트롤 키와 알트키 등이 동시에 눌리게 하려면 아래와 같이 수정하면 됩니다.

kbd.press(Keycode.CONTROL, Keycode.X)

kbd.press(Keycode.CONTROL, ,Keycode.SHIFT, Keycode.X)

https://circuitpython.readthedocs.io/projects/hid/en/latest/api.html

딸 다섯 아들 하나 아빠 (큰 딸, 작은 딸, 왕큰 딸, 앵무새, 암 뭉뭉이, 수 뭉뭉이) - minimonk.net