전반적으로 MicroPython 자료는 아무래도 STM32보단 ESP32 분야가 더 많고 많이 공개되어 있다.
또한 STM32는 기능은 다 구현되어 있는데 공개가 많이 안 되어 있다.
검색을 구체적으로 많이해야 자료를 얻을 수 있다.
py Board 1 = STM32F405RG(or APM32) microcontroller 임
본 LED Class 생성 자체는 범용성이 떨어지고 Py Board 전용에 국한된다.
다만 하드웨어 신호를 py Board와 같이 설계하면 사용할 수 있으나, LED 생성 Class는 범용성은 떨어진다.
led 객체는 py Board 자체에 내장된 4개 자체 LED에 한해서 동작한다.
여기서 말하는 4개의 자체 LED는 다음과 같다.
색상 : 적색, 황색, 녹색, 청색 이다.
GPIO PORT Pin : PA5, PA4, PA3, PA2 이다.
이는 1,2,3,4로 정의되어 있다.
그러나 유저가 설계시 하드웨어 핀을 즉 상기 핀을 LED 구동에 활당하면 Pybord 와 같이 LED 구동에 활당하면
LED Class생성을 그대로 사용할 수 있다.
참고로 Pyb의 Key SW는 PB3이다.
동작 및 개발 코딩방법 은 총 3가지가 있다. = 제 경험치
1. PC에서 개발할 경우 == 초보적인 수준의 개발시 적용
- 이 경우는 속도도 빠르고 마음대로 수정도 편하지만 다음 2가지 단점이 있다.
1). 모듈이나 팩키지는 못 불러온다. = 그러나 일반 파이썬 모드에서는 아무런 에러없이 잘 동작한다.
라이브러리 모듈이나 팩키지는 반드시 STM32 MCU 칩 안의 /flash/lib 폴더안에 있었야 한다.
그렇지 않으면 절대로 동작하지 않는다.... == 본인이 직접 삽질하면서 터득한 것임 = 인터넷에서도 안 나옴
이 경우 오직 하나의 파일안에 모든걸 다 넣어야 한다. 하나의 파일로 하면 된다. 모듈화 하지말고...
근데 이렇게하면 소스 코드가 길어지고, 개발 흐름상, 기능분리 모듈화 등을 할 수 없다.
2) . 개발 완료하고 양산시에는 STM32 Flash 내부안의 Main.py로 소스코드를옴겨서 재 빌드 후 실행해야 한다.
이 부분은 단점은 아니다...
2. 소스코드는 PC에서 개발하고 라이브러리; 모듈이나 팩키지는 STM32 내부 Flash/Lib 폴더에 저장하면서
개발하는 방법 인데.... 라이브러리 모듈이나 팩키지를 사용할시에는 100% 이 방식으로만 개발해야 된다.
즉 라이브러리 팩키지나 모듈은 STM32 내부 Flash/Lib 폴더에 파일이 위치되어야 하며, 이때 소스 코드만은
PC 개발용 폴더에 위치하면서 개발하는방법으로 수준있는 개발자는 개발시에 이 방법을 택할 겁니다.
그러나 이 방법은 소스코드 수정은 자유로우나 라이브러리 팩키지나, 모듈 파일 수정시에는 좀 번거롭다.
이 점은 감수해야 될듯 = 수정 후 저장시 시간이 걸린다.
3. 모든 작업을 STM32 Flash 메모리에서 진행할 경우
- 이 경우는 주로 개발이 완료되고 나서 양산시에 적용하면 좋을 거같다.
처음부터 이 방법으로하면 소스코드 수정이 번거롭고 특히 저장할때 속도가 느리고,
소스코드 수정하고 빌드시 매번 자동으로 저장 후 빌드하므로 저장할때 시간이 걸려 결국은 빌드할때
시간이 좀 걸린다. = 그리고 반도체 특성상 라이트를 많이하면 반도체 칩 수명이 감소되어 칩이 파손되는
최악의 상황까지 올 수도 있다.
@@@ 최종 양신은 STM32 Flash 안에 잇는 main.py 에 개발한 소스코드를 복사하여 넣어야만 잔원 온 후에도
자동으로 계속 실행한다. 그렇지 않으면 전원 온 후에도 아무것도 실행되지 않는다
그러나 boot.py안에서 실행파일을 따로 지정하여 전원 온 후에 자동으로 실행되게 할 수도 있다.
이 경우 따로 지정하지 않으면 기본으로 main.py가 전원 온 후에 자동으로 실행된다.
LED Class
1. 생성자
class pyb.LED(id)
id = 1-4 == 4개의 LED
My 코드 예 : led_1 = pyb.LED(1) # id 값에 다른거 낳으면 에러처리 함
이유는 STM32L152에서는 오직 1번 PA5 핀만 제공하고 나머진 제공하지 않는다.
만약 제공하지 않는 하드웨어 자원을 사용할경우 프로그램이 중단되며 ERROR 처리한다.
이는 제공되는 pins.CSV 파일을 보면 알수 있다. 즉 STM32L152에서는 나머지는 지원을 안 한다.
그래서 LED 클레스는 거의 필요가 없다.
D:\song\2024\Micro_Pytnon\micropython-1.22.2\micropython-1.22.2\ports\stm32\boards\NUCLEO_L152RE
이 경로에 pins.csv파일이 있다. 엑셀로 열어볼수 있다.
2. 메소드
LED.off() : Turn the LED off.
LED.on() : Turn the LED on, to maximum intensity.
LED.toggle() : Toggle the LED between on (maximum intensity) and off. If the LED is at non-zero intensity then it is considered “on” and toggle will turn it off.
LED를 켜짐(최대 강도)과 꺼짐 사이에서 전환합니다. LED의 강도가 0이 아닌 경우 "켜짐"으로
간주되며 토글을 사용하면 꺼집니다.
LED.intensity([value]) : LED pwm 제어, 0- 255 까지 법위 , 최소 0 = 커짐, 최대 255 = 최대발기
LED 3, LED 4만 적용된다. = 타이머 PWM 사용
LED 3 : 타이머 2 사용, = pwm 최대값 = 255
LED 4 : 타이머 3 사용 = pwm 최대값 = 255
https://docs.micropython.org/en/latest/library/pyb.LED.html