T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (4)

 T-PICOC3(MICROPYTHON)으로 온습도(SHT30) 테스트. (4)


이전 포스트 에선 machine 라이브러리의 LED 출력 및 I2C 관련 기본 정보 및 온습도계인 SHT30에 대해 조금 알아 보았다.

그리고 간단히 내 장치랑 연결되 있는 온습도계의 I2C 어드레스까지 스캔을 했다.

이번엔 데이터를 진짜 가져와 보자.

일단 machine 라이브러리에 I2C 와 SoftI2C 가 존재 하는것 같다. 일반적인 I2C 는 기본 I2C 라인을 이용하여 사용하여 효율적이고 빠르지만 핀에 제약이 있고, 소프트웨어I2C 는 모든핀에 사용하지만 효율적이지는 않다고 한다.

일단 난 기본 I2C 를 사용해서 테스트 해봐야겠다.

import random
import utime
import st7789
import tft_config
import vga1_bold_16x32 as font1
import machine
from machine import UART,Pin,Timer,ADC,I2C,PWM

tft = tft_config.config(1,0,0)
led = Pin(25,Pin.OUT)
i2c = I2C(0,scl=Pin(13), sda=Pin(12), freq=400000)
print(i2c.scan())

def tick(timer):
    global buf           
    led.toggle()

def sht30_1():
    global i2c
    i2c.writeto(0x44,b'\x2C\x06')    
    data=i2c.readfrom(0x44,6)        
    print(str(data))

def main():
    
    led.value(0)    
    tim = Timer()
    tim.init(mode=Timer.PERIODIC,period=1000, callback=tick)
   
    while(1):
        
        sht30_1()          
        utime.sleep(1)
   
   
main()

일단 기본 테스트 코드는 이렇다.

함수를 하나 만들고 위에 i2c 변수를 글로벌로 선언하여 사용, i2c.writeto( 주소, 쓸 데이터) 이렇게 사용 하는데, 주소값은 0x44 이고, 데이터는 바이트 형식으로 0x2c , 0x06 을 줘야 해서 위와 같이 되었다.

그리고 높은 반복률 일때 측정시간이 최대 15ms 인데, 타임아웃이 기본 50ms 로 적용 되는건지 clock stretching 부분일때 오류가 따로 발생되진 않는다. 이건 나중에 로직 아날라이저 (알리발) 로 한번 찍어봐야겠다.

여튼 위의 소스로 실행을 했을때, 아래처럼 데이터 들이 1초 마다 나온다.



위의 쉘 창에 나오는 데이터들은 바이트 형식으로 읽어 오는 값들이고, 이걸 이제 수식에 적용해야 한다.

SHT30 데이터 시트에 수식은 이렇게 나온다.

sht30 계산

읽었을때 나오는 데이터는 총 6바이트 [ 온도 msb , 온도 lsb , crc , 습도 msb, 습도 lsb , crc ]이다. crc는 일단 무시하고 온도와 습도 데이터만 가져와서 위의 수식을 적용해 보자

일단 온도는 섭씨로 -45 + (175 * (temp / 65535))

습도는 100 * (humi / 65536) 이다.

이걸 소스로 풀면

def sht30_1():
    global i2c
    i2c.writeto(0x44,b'\x2C\x06')    
    data=i2c.readfrom(0x44,6)    
    c_temp = -45 + (175 * ((int(data[0]) * 256 + int(data[1])) / 65535.0))
    c_temp = "%.2f" % c_temp
    hum = 100 * ((int(data[3]) * 256 + int(data[4])) / 65535.0)
    hum = "%.2f" % hum
    print(str(c_temp)+' '+str(hum))

이렇게 함수로 만들어서 실행 시키면.

sht30 test

손으로 만져보며 온 습도가 변하는것을 확인했다.

이렇게 끝나면 또 재미가 없어서, 나의 T-PicoC3 는 디스플레이를 가지고 있지 않은가 ! 온습도 데이터를 디스플레이에 계속 뿌려줘 보자.

기존 Hello.py 예제를 조금 손봐서 테스트를 해봤다.

center 란 함수를 조금 손봐, 입력 되는 위치의 라인만 변경해서 쓸수 있게 하고, 좌측 정렬로 글씨가 써지게 만들었다.

그리고 폰트도 좀 작은걸로 바꿔서 테스트 해봤다.

당연 폰트를 바꿀땐 이전 포스트에서 말한 라이브러리 에서 폰트를 옮겨와야 한다.

그리고 import 시켜주고 사용 했다. 아래는 전체 소스다.


import random
import utime
import st7789
import tft_config
import vga1_bold_16x32 as font1
import vga2_8x16 as font2
import machine
from machine import UART,Pin,Timer,ADC,I2C,PWM

tft = tft_config.config(1,0,0)
led = Pin(25,Pin.OUT)
i2c = I2C(0,scl=Pin(13), sda=Pin(12), freq=400000)
print(i2c.scan())

def tick(timer):
    global buf           
    led.toggle()

def sht30_1():
    global i2c
    i2c.writeto(0x44,b'\x2C\x06')    
    data=i2c.readfrom(0x44,6)    
    c_temp = -45 + (175 * ((int(data[0]) * 256 + int(data[1])) / 65535.0))
    c_temp = "%.2f" % c_temp
    hum = 100 * ((int(data[3]) * 256 + int(data[4])) / 65535.0)
    hum = "%.2f" % hum
    #print(str(c_temp)+' '+str(hum))
    return c_temp, hum    

def text_write(text,line): 
    
    tft.text(
        font2,
        text,
        0,
        1+line*(font2.HEIGHT+1),
        st7789.WHITE,
        st7789.BLACK)

def main():
    
    led.value(0)    
    tim = Timer()
    tim.init(mode=Timer.PERIODIC,period=1000, callback=tick)
    
    tft.init()
    tft.fill(st7789.BLACK)
   
    while(1):
        
        C_temp, Hum = sht30_1()
        buffer_str = "Temp= "+str(C_temp)+", Hum= "+str(Hum)+" "
        text_write(buffer_str,0)
        utime.sleep(1)
   
   
main()

이렇게 해서 실행을 하니 LCD 에서 나의 온습도가 표현됬다~


핸드폰이 샤오미인데 가까운 동영상은 초점이 좀 별로다.

여기까지 온습도 테스트는 마치고... 다음 포스트 부턴 wifi 기능을 좀 사용해 볼까 한다. 

ESP32-C3 녀석이 달려있는데 안써먹으면 서운해 하지 않을까 싶다.

esp32-c3 블록다이어그램
위는 ESP32-C3 의 블록 다이어 그램.

특징으로는 WIFI IEEE 802.11b/g/n , 스테이션모드, 소프트AP 모드, 둘다 지원등. 

그리고 BLE: Bluetooth 5 , mesh 

CPU도 뭐 이차저차 쓸만 한가? 잘은 모르겠다.

wifi n 규격도 5ghz 가 지원이 되는것 같긴 한데. 이녀석은 안되나 부다, 2.4ghz 만 지원한다. 여튼 다음 테스트는 ESP32-C3를 사용해서 맨 처음 포스트의 T-PICOC3 의 팩토리 프로그램 처럼 wifi를 서치하고 연결해서 인터넷에서 데이터를 가져와보자~

온습도기능이 되니, 시계처럼 시간을 인터넷 연결해서 시간을 좀 맞추고. 가능하면 HTTP 메서드를 좀 사용해 볼 생각이다. 찾아보니 지원을 하는 것 같다.

여튼 온습도 테스트는 여기까지. 다음은 T-PICOC3 의 ESP32-C3 테스트다.

END

댓글

이 블로그의 인기 게시물

T-PICOC3(MICROPYTHON)으로 WIFI 를 연결해보자. (1)

Raspberry Pi pico W 로 시계 및 날씨 확인 제품을 만들어 보자. (1) 구상 단계

Raspberry Pi Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (4) ws2812 test 및 WIFI 시간 테스트