본문 바로가기

메이커 이야기/ESP32

ESP32 MicroPython 기초 문법 : Python편

반응형

지난 시간에 이어서 오늘은 Micropython을 사용하기 전에 알아 두면 좋을 만한 기초 문법들에 대해서 정리해보도록 하겠습니다. 파이썬을 사용해보신 분들은 참고 안하셔도 괜찮을 것 같아요! 간단히 변수, 자료형, 연산자, 제어문, 함수, 클래스, 모듈에 대해서 알아보도록 할 것입니다.

2023.03.16 - [메이커 이야기/ESP32] - ESP32 MicroPython 개발환경 구성하기 : Thonny

 

ESP32 MicroPython 개발환경 구성하기 : Thonny

이번에는 ESP32로 Micropython을 사용하기 위해서 개발환경을 구성해 보도록 하겠습니다. 개발환경은 여러가지가 있습니다만, 이번에 다뤄볼 개발환경은 라즈베리파이에서도 쉽게 찾아 보았던 Thonny

kgu0724.tistory.com

 


 

 

MicroPython을 사용하기 위해서 아주 간단히 MicroPython을 코딩하기 위한 기초 문법들에 대해서 알아보도록 하겠습니다.

3.1 변수와 자료형

MicroPython에서 변수는 데이터를 저장하는 메모리 공간을 의미합니다. 변수는 데이터를 읽거나 쓰는데 사용됩니다. 변수를 선언할 때에는, 변수 이름과 변수에 저장할 데이터의 자료형을 지정해야 합니다.

다음은 MicroPython에서 지원하는 기본 자료형입니다.

  • int: 정수형 데이터 타입입니다.
  • float: 실수형 데이터 타입입니다.
  • bool: 참/거짓을 저장하는 데이터 타입입니다.
  • str: 문자열 데이터 타입입니다.

예를 들어, 다음과 같이 변수를 선언할 수 있습니다.

a = 10 
b = 3.14 
c = True 
d = "Hello, World!"

위 코드에서, 변수 a는 int 자료형으로, 값은 10으로 초기화됩니다. 변수 b는 float 자료형으로, 값은 3.14로 초기화됩니다. 변수 c는 bool 자료형으로, 값은 True로 초기화됩니다. 변수 d는 str 자료형으로, 값은 "Hello, World!"로 초기화됩니다.

MicroPython에서는, 변수의 자료형을 변경할 수도 있습니다. 예를 들어, 다음과 같이 int 타입의 변수를 float 타입으로 변경할 수 있습니다.

a = 10 
b = float(a)

 

 위 코드에서, float(a)는 a 변수의 값을 실수형으로 변환하여 b 변수에 저장합니다.

또한, MicroPython에서는 자동 형 변환이 지원되기 때문에, 다음과 같이 서로 다른 자료형 간의 연산이 가능합니다.

a = 10 
b = 3.14 
c = a + b

위 코드에서, c 변수는 int와 float 타입의 변수인 a와 b를 더한 결과인 13.14로 초기화됩니다.

MicroPython에서는 다양한 연산자를 지원합니다. 대표적으로 다음과 같은 연산자들이 있습니다.

  • 산술 연산자: +, -, *, /, %, //
  • 비교 연산자: ==, !=, <, <=, >, >=
  • 논리 연산자: and, or, not

예를 들어, 다음과 같이 변수를 이용하여 연산을 수행할 수 있습니다.

a = 10 
b = 5 
c = a + b 
d = a > b 

위 코드에서, c 변수는 a와 b를 더한 값인 15로 초기화됩니다. d 변수는 a가 b보다 큰지를 판단한 후, True 또는 False로 초기화됩니다.

MicroPython에서는 다양한 자료형을 지원합니다. 이 중에서도 가장 많이 사용되는 자료형은 다음과 같습니다.

1. 숫자형 자료형

MicroPython에서는 정수형, 실수형 데이터 타입을 지원합니다.

# 정수형
자료형 a = 10
b = -20
# 실수형 자료형
c = 3.14
d = -1.5

 

2. 문자열 자료형

MicroPython에서 문자열은 따옴표(' 또는 " )로 감싸서 표현합니다.

a = "Hello, World!"
b = 'Python Programming'

 

3. 리스트 자료형

MicroPython에서 리스트는 대괄호([])로 감싸서 표현합니다. 리스트는 순서가 있는 값들의 집합이며, 값들은 쉼표(,)로 구분됩니다.

a = [1, 2, 3, 4, 5]
b = ["apple", "banana", "cherry"]

 

4. 튜플 자료형

MicroPython에서 튜플은 괄호(())로 감싸서 표현합니다. 튜플은 리스트와 유사하지만, 값들의 순서를 변경하거나 삭제할 수 없습니다.

a = (1, 2, 3, 4, 5)
b = ("apple", "banana", "cherry")

 

5. 딕셔너리 자료형

MicroPython에서 딕셔너리는 중괄호({})로 감싸서 표현합니다. 딕셔너리는 키와 값의 쌍으로 이루어진 데이터 타입입니다.

a = {"name": "John", "age": 30, "city": "New York"}
b = {"apple": 10, "banana": 5, "cherry": 3}

 

MicroPython에서는 데이터 타입 변환이 가능합니다. 

예를 들어, 다음과 같이 int 타입의 변수를 str 타입으로 변환할 수 있습니다.

a = 10
b = str(a)

위 코드에서, str(a)는 a 변수의 값을 문자열로 변환하여 b 변수에 저장합니다.

이처럼 MicroPython에서는 데이터 타입 변환이 자유롭기 때문에, 다양한 자료형 간의 연산이 가능합니다. 하지만, 이를 남용하면 코드의 가독성이 떨어지고 오류가 발생할 수 있기 때문에, 적절한 자료형을 선택하여 사용해야 합니다.


3.2 연산자와 제어문

MicroPython에서는 다양한 연산자와 제어문을 지원합니다. 이를 이용하여 프로그램의 흐름을 제어하고, 계산을 수행할 수 있습니다.

  1. 산술 연산자

MicroPython에서는 다양한 산술 연산자를 지원합니다. 대표적인 산술 연산자는 다음과 같습니다.

  • 더하기(+)
  • 빼기(-)
  • 곱하기(*)
  • 나누기(/)
  • 나머지(%)
  • 몫(//)
  • 지수(**)

예를 들어, 다음과 같이 더하기, 곱하기 연산을 수행할 수 있습니다.

a = 10
b = 20
c = a + b
d = a * b

위 코드에서, c 변수는 a와 b를 더한 결과인 30으로 초기화됩니다. d 변수는 a와 b를 곱한 결과인 200으로 초기화됩니다.

1. 비교 연산자

MicroPython에서는 다양한 비교 연산자를 지원합니다. 대표적인 비교 연산자는 다음과 같습니다.

  • 같음(==)
  • 다름(!=)
  • 작음(<)
  • 작거나 같음(<=)
  • 큼(>)
  • 크거나 같음(>=)

예를 들어, 다음과 같이 ==, < 연산을 수행할 수 있습니다.

a = 10
b = 20
c = a == b
d = a < b

위 코드에서, c 변수는 a와 b가 같은지를 판단한 후, True 또는 False로 초기화됩니다. d 변수는 a가 b보다 작은지를 판단한 후, True 또는 False로 초기화됩니다.

2. 논리 연산자

MicroPython에서는 다양한 논리 연산자를 지원합니다. 대표적인 논리 연산자는 다음과 같습니다.

  • and
  • or
  • not

예를 들어, 다음과 같이 and, or, not 연산을 수행할 수 있습니다.

a = 10
b = 20
c = a < 15 and b > 25
d = a < 15 or b > 25 

위 코드에서, c 변수는 a가 15보다 작고, b가 25보다 큰지를 판단한 후, True 또는 False로 초기화됩니다. d 변수는 a가 15보다 작거나, b가 25보다 큰지를 판단한 후, True 또는 False로 초기화됩니다.

변수와 논리 연산자, 비교 연산자 등을 이용하여, 조건문과 반복문을 만들 수 있습니다.

3. 조건문

MicroPython에서는 if, elif, else 키워드를 이용하여 조건문을 만들 수 있습니다. 조건문을 이용하여, 특정 조건을 만족하는 경우에만 코드를 실행할 수 있습니다.

a = 10
if a > 0:
    print("a is positive")
elif a == 0:
    print("a is zero")
else:
    print("a is negative")

위 코드에서, if 문의 조건식인 a > 0이 참이므로, print("a is positive")가 실행됩니다.

4. 반복문

MicroPython에서는 for, while 키워드를 이용하여 반복문을 만들 수 있습니다. 반복문을 이용하여, 동일한 코드를 여러 번 실행할 수 있습니다.

# for 문 예시
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# while 문 예시
i = 0
while i < 5:
    print(i)
    i += 1

위 코드에서, for 문은 fruits 리스트에 있는 모든 과일을 하나씩 출력합니다. while 문은 i가 5보다 작은 동안, i 값을 출력한 후, i를 1씩 증가시킵니다.

3.3 함수와 클래스

MicroPython에서는 함수와 클래스를 이용하여, 코드를 모듈화하고 재사용성을 높일 수 있습니다.

1. 함수

MicroPython에서 함수는 def 키워드를 이용하여 정의합니다. 함수를 이용하여, 특정 기능을 수행하는 코드를 모듈화할 수 있습니다. 함수는 인자를 전달받을 수 있으며, 결과값을 반환할 수도 있습니다.

def sum(a, b):
    return a + b

result = sum(10, 20)
print(result)  # 30

위 코드에서, sum 함수는 a와 b 인자를 전달받아, 덧셈을 수행한 후, 결과값을 반환합니다. sum(10, 20)의 결과는 30이며, 이를 result 변수에 저장한 후 출력합니다.

2. 클래스

MicroPython에서 클래스는 class 키워드를 이용하여 정의합니다. 클래스를 이용하여, 객체를 생성하고, 객체의 속성과 메서드를 정의할 수 있습니다.

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height
rect = Rectangle(10, 20)
print(rect.area())  # 200

위 코드에서, Rectangle 클래스는 __init__ 메서드와 area 메서드를 정의합니다. __init__ 메서드는 객체를 생성할 때 호출되며, width와 height 속성을 초기화합니다. area 메서드는 객체의 너비와 높이를 곱한 값을 반환합니다. rect 객체는 Rectangle 클래스의 인스턴스로 생성되며, area 메서드를 호출하여 사각형의 면적을 계산합니다.

3. 람다 함수

MicroPython에서는 람다 함수를 이용하여, 간단한 함수를 간략하게 정의할 수 있습니다. 람다 함수는 lambda 키워드를 이용하여 정의하며, 이름이 없는 함수입니다.

sum = lambda a, b: a + b
result = sum(10, 20)
print(result)  # 30

위 코드에서, lambda 키워드를 이용하여 람다 함수를 정의하고, sum 변수에 할당합니다. 이후, sum(10, 20)을 호출하여 람다 함수를 실행하고, 30을 출력합니다.

4. 상속

MicroPython에서는 클래스를 이용하여 상속을 구현할 수 있습니다. 상속을 이용하여, 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def speak(self):
        return "Meow"

class Dog(Animal):
    def speak(self):
        return "Woof"

 위 코드에서, Animal 클래스는 name 속성과 speak 메서드를 정의합니다. speak 메서드는 추상 메서드로, 서브클래스에서 반드시 구현되어야 합니다. Cat 클래스와 Dog 클래스는 Animal 클래스를 상속받습니다. Cat 클래스는 speak 메서드를 구현하여 "Meow"를 반환하고, Dog 클래스는 speak 메서드를 구현하여 "Woof"를 반환합니다.

5. 모듈

MicroPython에서 모듈은 .py 확장자를 가진 파일로, 변수, 함수, 클래스 등의 코드를 모아서 저장한 파일입니다. 모듈을 이용하여, 코드를 구조화하고, 재사용성을 높일 수 있습니다. 모듈은 import 키워드를 이용하여 불러올 수 있습니다.

# mymodule.py
def greet(name):
    print("Hello, " + name)

# main.py
import mymodule
mymodule.greet("John"# Hello, John

 위 코드에서, mymodule.py 파일은 greet 함수를 정의한 모듈입니다. main.py 파일에서 import mymodule을 이용하여 모듈을 불러온 후, mymodule.greet("John")을 호출하여 greet 함수를 실행합니다. 이를 통해, "Hello, John"이 출력됩니다.

3.4 모듈과 패키지

MicroPython에서 모듈은 .py 확장자를 가진 파일로, 변수, 함수, 클래스 등의 코드를 모아서 저장한 파일입니다. 모듈을 이용하여, 코드를 구조화하고, 재사용성을 높일 수 있습니다. 모듈은 import 키워드를 이용하여 불러올 수 있습니다.

# mymodule.py
def greet(name):
    print("Hello, " + name)

# main.py
import mymodule
mymodule.greet("John"# Hello, John

위 코드에서, mymodule.py 파일은 greet 함수를 정의한 모듈입니다. main.py 파일에서 import mymodule을 이용하여 모듈을 불러온 후, mymodule.greet("John")을 호출하여 greet 함수를 실행합니다. 이를 통해, "Hello, John"이 출력됩니다

1. 패키지

패키지는 모듈의 계층적인 구조를 나타내는 방법입니다. 패키지는 하나 이상의 모듈을 포함하는 디렉토리입니다. 패키지를 이용하여, 코드를 구조화하고, 관련된 모듈을 함께 묶을 수 있습니다.

예를 들어, 다음과 같은 구조의 패키지를 만들어 볼 수 있습니다.

mypackage/
    __init__.py
    module1.py
    module2.py

mypackage 디렉토리는 패키지를 나타내며, __init__.py 파일은 패키지를 초기화하는 파일입니다. module1.py와 module2.py 파일은 각각 모듈을 나타내며, 패키지 내에서 관련된 코드를 구성합니다.

# module1.py
def hello():
    print("Hello from module1")

# module2.py
def world():
    print("World from module2")

위 코드에서, module1.py 파일은 hello 함수를 정의하고, module2.py 파일은 world 함수를 정의합니다.

# __init__.py
from .module1 import hello
from .module2 import world

__all__ = ['hello', 'world']

__init__.py 파일에서는 module1.py와 module2.py 파일의 함수를 불러온 후, __all__ 변수를 이용하여 외부에 공개할 모듈의 이름을 정의합니다. 이를 통해, 외부에서 패키지의 모듈과 함수를 불러올 수 있습니다.

# main.py
from mypackage import hello, world

hello()  # Hello from module1
world()  # World from module2

위 코드에서, main.py 파일에서 mypackage 패키지의 hello 함수와 world 함수를 불러온 후, 호출합니다.

글이 조금 길어지긴 했는데요.

눈으로 한번 확인만 해봐주시면 될 것 같습니다 ^^

 

반응형