본문 바로가기

IT/python

시계One 제작 완료 feat.라즈베리파이피코

반응형

시계제작! 에 뜻을 두기로 하고, 시계제작을 시작했습니다.

어떤 플랫폼으로 만들겠다는 정의는 하진 않고 그냥 시작~~

첫번째는 집에서 굴러다니는 라즈베리파이피코를 이용한 시계입니다. 와이파이 연결을 지원하는 녀석이니,

버스 알람도 같이 넣어 봤습니다.

 

소스 첨부!

 

lcd_api.py
0.01MB
main.py
0.00MB
pico_i2c_lcd.py
0.00MB
picodebug.py
0.00MB

lcd_api.py

pico_i2c_lcd.py

는 인터넷에 공개되어 있는 소스입니다. 흔히 쓰는 i2c lcd 를 다룰수 있는 라이브러리로 보시면 됩니다. 

핵심은 main.py!

main.py로 만들어서 피코에 넣어두면 기동시 자동으로 실행되는 점도 있습니다.

 

작업 순서는 이렇습니다.

1. 라즈베리파이피코 에서 마이크로파이썬을 이용할 수 있도록 셋팅한다.

https://www.raspberrypi.com/documentation/microcontrollers/micropython.html

 

Raspberry Pi Documentation - MicroPython

The official documentation for Raspberry Pi computers and microcontrollers

www.raspberrypi.com

2. 개발툴 Thonny 설치

https://thonny.org/

 

Thonny, Python IDE for beginners

Thonny 4 is dedicated to Ukraine fighting the Russian invasion. 🇺🇦 Please support Ukraine! 🇺🇦 Download version 4.1.2 for  •   •  Thonny Python IDE for beginners Features Easy to get started. Thonny comes with Python 3.10 built in, so ju

thonny.org

3. 위 소스들을 넣고 실행! 입니다.

 

!!핵심소스 설명

def connectWifi():
    wlan.active(True)
    if not wlan.isconnected():
        wlan.connect(ssid, password)
        counter = 0
        while not wlan.isconnected() and wlan.status() >= 0 :
            counter = counter + 1
            picodebug.logPrint(f"Wating to connect to Wifi: {counter}")
            sleep(1)
            if( counter > 10 ):
                picodebug.logPrint("Connection Failed..")
                return
    ip = wlan.ifconfig()[0]
    picodebug.logPrint(f"Connection Success IP:{ip}")

와이파이 연결할때, 끝도 없이 연결시도를 하는건 아니고 10번 이상이면 적당히 끊습니다.

picodebug는 로그기록용 모듈입니다. ( 소스참고 ) 실제 운영할때는 로그를 파일로 남기기 위해 옵션값을 통해 콘솔출력 <-> 파일출력 바꿀수 있도록 되어 있습니다.

 

def getTime():
    try:
        res=urequests.get(url=timeURL) #JSON형태로 시간리턴!
        jsonObject = json.loads(res.text)
        res.close()
        year = jsonObject['year']
        month = jsonObject['month']
        day = jsonObject['day']
        hours = jsonObject['hour']
        minutes = jsonObject['minute']
        seconds = jsonObject['seconds']

        #시간설정!
        rtc.datetime((year, month, day, 0, hours,minutes, seconds, 0))
    except OSError as e:
        picodebug.logPrint("OSError code in getTime()..." + e.errno)
    except NameError as e:
        picodebug.logPrint("Error..."+e)
        picodebug.logPrint("Error code..."+e.errno)

시간을 가져오는 소스입니다~ 기동시 한번만 가져오고, rtc 모듈로 셋팅하고 시간 표시는 이걸 이용해서 표기합니다.

웹호출시 urequets, json 파싱에 json 을 이용합니다. 우리가 쓰는게 micropython 이니, python 모듈이 그대로 되는것도 있지만, 안되는것 도 있다는거~!

참고: rtc == Real Time Clock 

 

잘됩니다~! 훗

전원은 베터리를 쓰고 싶었지만, 전원 직접연결로 하였네요~!

반응형