2021/03/21

STM32 펌웨어 - 02. GUI를 만들어 보자 - with Python Kivy

언어는 파이썬, 그래픽 라이브러리는 kivy를 사용한다.

  • Python : 3.6.4 32-bit
  • Kivy : v1.11.1


Phase 1. 첫번째 GUI 😆

kivy를 사용하는 기본 형태는 이런식이다.

from kivy.app import App
from kivy.uix.label import Label

class MQTTtest_GUIv001(App):
    def build(self):
        return Label(text = "MQTT-test GUI v001")

MQTTtest_GUIv001().run()

















 

 

Phase 2. 두번째 GUI

KV Language를 사용하여 GUI 디자인을 할 수 있다. Phase 1과 출력은 동일함.

이 후 소스는 MQTTtest_GUIv001.py와 MQTTtest_GUIv001.kv 파일 두개로 작성된다.


MQTTtest_GUIv001.py

###################################################
###################################################
#    MQTT-test GUI
#    -> ver 0.0.1
#    by JBE
#
#    since 2021-03-21
###################################################
###################################################

from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder

Builder.load_file('MQTTtest_GUIv001.kv')

class MQTTtest_GUIv001(App):
    def build(self):
        pass

MQTTtest_GUIv001().run()

 

MQTTtest_GUIv001.kv

Label:
    text : "MQTT-test GUI v001"


Phase 3. 세번째 GUI <- 가장 기본적인 구조

현재 연결된 com 포트를 검색해서 선택할 수 있다.

kv 파일에서 클래스 함수나 변수에 접근하는 방식, 초기자 사용법, kivy 버전 제한 등등...

기본적인 내용들이 포함되어 있다.


MQTTtest_GUIv001.py

###################################################
###################################################
#    MQTT-test GUI
#    -> ver 0.0.1
#    by JBE
#
#    since 2021-03-21
###################################################
###################################################
import kivy
kivy.require('1.11.1')

from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.uix.spinner import Spinner
from kivy.uix.floatlayout import FloatLayout

import serial
import serial.tools.list_ports

from kivy.config import Config
Config.set('graphics', 'width', '800')
Config.set('graphics', 'height', '600')
Config.set('graphics', 'resizable', 0)
Config.set('kivy', 'keyboard_mode', 'system')
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
Config.write()

#Builder.load_file('MQTTtest_GUIv001.kv')

class MQTTtest_GUIv001(FloatLayout):
    available_port = []

    ser = serial.Serial()
    ser.baudrate = 115200
    ser.timeout = 1
    ser_con = False

    def __init__(self, **kwargs):
        super(MQTTtest_GUIv001, self).__init__(**kwargs)
        self.updateSerial_select()

    def updateSerial_select(self):
        self.available_port = []
        ports = list(serial.tools.list_ports.comports())
        for p in ports:
            self.available_port.append(p[0])

        self.ids.Serial_select.values = self.available_port

class MQTTtest_GUIv001App(App):
    def build(self):
        test = MQTTtest_GUIv001()
        return test

if __name__ == '__main__':
    MQTTtest_GUIv001App().run()


MQTTtest_GUIv001.kv

<MQTTtest_GUIv001>:
    FloatLayout:
        Spinner:
            id : Serial_select
            text_autoupdate : True
            sync_height : True
            values : root.available_port
            size_hint : None, None
            size : 60, 30
            pos : 5, 520
            on_press : root.updateSerial_select()  


실행하면 활성화된 com 포트를 검색해서 보여준다.











이제 host와 보드간의 통신 프로토콜을 정해야 할 타이밍이다.

그리고 파이썬 매우 재밌는듯 ㅋㅋㅋ

댓글 없음:

댓글 쓰기