MicroPython 사용법 - MicroPython sayongbeob

먼 곳에서의 상호작용은 마술처럼 느껴진다. 무선 상호 작용은 모두 물리학에 관한 것이다. 전파(전자기 방사선의 한 유형인 가시광선과 유사)는 정보가 인코딩 될 수 있는 방식으로 송신기에 의해 변조되는 일종의 속성(예. 진폭, 위상 또는 펄스 폭)을 갖는다. 전파가 전기 전도체(즉, 공중)와 마주칠 때, 교류는 파도의 정보가 추출되어 원래의 형태로 다시 변환 될 수 있는 교류를 일으키게 된다.

[준비물]

- micro:bit 2 set(1set는 마이크로비트 본체 1개, micro USB(5핀) to USB 선 1개로 구성)

- 악어 클립 전선 4개

- 이어폰 혹은 피에조 버저 2개

무선통신의 경우는 수신기와 송신기의 개념으로 접근해야 하기 때문에 혼자서 2개의 마이크로비트를 활용하여 활동하고자 한다. 짝꿍과 함께 각각 1개의 마이크로비트를 가지고 활동하여도 무방하다.

다음은 무선통신의 예제이다.

MicroPython 사용법 - MicroPython sayongbeob

from microbit import *

import music

import radio

radio.on()

while True:

    if button_a.was_pressed():

        radio.send(‘1’)

    incoming=radio.receive()

    if incoming==‘1’:

        music.play(music.WEDDING)

우선 마이크로파이선에 무선통신(radio)와 내부 멜로디 음악(music)을 입력시킨다.

그 위 무선통신 함수를 호출하여 켜기 위해 radio.on()을 입력한다.

그 뒤 1번 마이크로비트의 버튼 a를 눌렀을 때 무선통신을 통해 “1”이라는 문자가 2번 마이크로비트에게 보내지게 되고 2번 마이크로비트에서는 받은 문자 “1”이 같다면 음악을 부르게 된다.

한번 위의 예시를 작성하여 2대의 마이크로비트에 입력한 뒤 체험해 보기 바란다.

더 알아보기

무선통신을 보낼 때 문자(“ ”)를 보낼 수도 있지만 숫자를 보낼 수도 있다.

숫자를 보내는 방법은 다음과 같다.

문자: radio.send(“”)

숫자: radio.send_bytes()

활동예제

1

1번 마이크로비트의 a 버튼을 눌렀을 때 “반짝반짝 작은 별” 멜로디가 2번 마이크로비트에서 나올 수 있도록 해보자.

MicroPython 사용법 - MicroPython sayongbeob

[참고 자료] 반짝반짝 작은 별 코드


tune=["C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8"]

from microbit import *

import music

import radio

tune=["C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8"]

radio.on()

while True:

    if button_a.was_pressed():

        radio.send('1')

    incoming=radio.receive()

    if incoming=='1':

        music.play(tune)

라즈베리 파이 피코란

개발용 컴퓨터로 핀을 꽂을 수 있어서 LED, 로봇, 센서등을 제어하기에 적합하다

MicroPython 사용법 - MicroPython sayongbeob

다른 장점으로는 크기가 작고 3.3V만으로 동작 가능하며 가격이 싸다 (4달라!)

라즈베리 파이 피코 구입

라즈베리 파이 피코를 사용하려면 본품만 달랑 있어서는 아무것도 할 수 없다

집에 각종 전선과 센서, 납땜기구가 있으면 좋겠지만 그마저도 라즈베리 파이 피코에서 프로그래밍하기에 자료가 없다

가장 좋은 방법은 라즈베리 파이 피코와 호환 가능한 센서, 도구 묶음 키트를 사는 것이다

많은 회사들이 자기만의 키트를 구성해서 판매하는데 나는 그 중에서 UCTRONICS STARTER KIT가 맘에 들었다

여기서 살 수 있다

이렇게 본품 가격의 10배를 주고 필요한 물품을 한번에 구입했다. 역시 돈이 최고다

브레드보드 조립

MicroPython 사용법 - MicroPython sayongbeob

MicroPython 사용법 - MicroPython sayongbeob

브레드보드란 위처럼 생긴 판인데 핀을 꽂을 수 있다

위의 그림처럼 배선이 되어있으니 아래 이미지처럼 라즈베리 파이 피코를 집어넣는다

MicroPython 사용법 - MicroPython sayongbeob

개발 환경 설정

피코에 MicroPython 설치

피코를 만든 라즈베리파이 재단에서는 C++ 및 MicroPython 언어를 지원해준다

그 중에서도 사용하기 쉬운 MicroPython을 사용해보자

먼저 MicroPython을 사용하기 위해서는 MicroPython UF2 파일을 설치해야 한다

https://micropython.org/download/rp2-pico/ 에서 최신 MicroPython UF2 파일을 다운로드 후 피코를 컴퓨터에 연결한다

플래시 드라이브가 인식되면 거기에 파일을 옮기기만 하면 알아서 설치가 된다

플래시 드라이브가 인식이 안 될 경우 피코의 버튼을 누르면서 컴퓨터에 연결하자

IDE 설치 (Windows)

여러 IDE가 있지만 윈도우에서 쓸만한 Thonny를 설치한다

https://thonny.org/

MicroPython 사용법 - MicroPython sayongbeob

위 그림처럼 MicroPython으로 설정을 바꿔준다

예시

피코의 MicroPython 레퍼런스는 여기서 볼 수 있다. 하지만 어렵다...

하지만 우리는 구입한 키트회사에서 제공하는 예제도 같이 사용 가능하다

피코 LED 조작

피코의 Hello World!는 피코에 디스플레이가 없어서 불가능 하다

하지만 피코에는 LED가 1개 붙어있기 때문에 이걸로 동작하는지 알 수 있다

from machine import Pin
import time

led = Pin(25, Pin.OUT)

while True:
    led.high()
    time.sleep(1)
    led.low()
    time.sleep(1)

위와 같은 코드를 실행시키면 피코의 LED가 반짝인다

갑자기 25번핀을? 이라고 한다면

MicroPython 사용법 - MicroPython sayongbeob

여기 이미지 맨 위쪽에 피코내의 LED는 25번이라고 적혀있다

디스플레이에 글자 표시

키트에 포함된 디스플레이에 글자를 표기해보자

MicroPython 사용법 - MicroPython sayongbeob

위의 사진처럼 피코와 디스플레이를 연결해준다

피코랑 직접 연결하는게 아니라 브레드보드의 특성을 활용하자

https://raw.githubusercontent.com/UCTRONICS/KB0005/master/lcd/I2C_LCD_driver.py 여기에서 디스플레이 드라이버 파일을 다운로드 받는다 (다른 이름으로 저장)

그리고 Thonny에서 위에서 다운로드 받은 파일을 피코에 업로드 해준다

MicroPython 사용법 - MicroPython sayongbeob

아래와 같은 코드를 작성하고 실행시킨다

import I2C_LCD_driver
mylcd = I2C_LCD_driver.lcd()
mylcd.lcd_display_string("Hello Pico!", 1)

디스플레이에 글자가 표시된다

결론

기존에 이런걸 만드려면 아두이노와 같은 제품을 사용했지만 피코는 마이크로 파이썬 언어를 사용해서 접근성이 더 좋아졌다

또한 피코가 다른 제품에 비해서 성능이 월등하게 좋기 때문에 이러한 고급 언어를 사용해도 성능상 큰 문제는 없을 것 같다