본문 바로가기
라즈베리파이_피코_피코 W/circuitPython

11. Circuit 파이썬 라즈베리파 피코 W 블루투스/ SDCARD

by 커피하는조이 2023. 3. 20.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 블루투스/ SD CARD제어를 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

 

반응형

 (1) 동작 설명

온습도 데이터를 블루투스를 통하여 전송하고 SD CARD에 데이터 저장 하기

라이브러리 추가하기

라이브러리는 아래 사이트에서 받을 수 있습니다.

https://circuitpython.org/libraries

 

CircuitPython - Libraries

The easiest way to program microcontrollers

circuitpython.org

번들 항목에 보면 버전별로 소스와 예제 등 다운 받을 수있습니다.

현재 버전은 boot_out.txt 파일을 열어보면 확인이 됩니다

최신 버전은 8.0.3 으로 8.x 버전의 번들을 다운받아 압축을 풀면 여러 라이브러리가 나오는데 필요한 라이브러리를 lib 폴더에 넣어주면 됩니다.

SMALL

 (2) 소스코드

code.py

import board
import busio
import digitalio
import analogio
import sdcardio
import storage
import time
import adafruit_dht
import adafruit_sdcard

# Pin Assignments
LED1 = digitalio.DigitalInOut(board.GP2)
LED1.direction = digitalio.Direction.OUTPUT

LED2 = digitalio.DigitalInOut(board.GP3)
LED2.direction = digitalio.Direction.OUTPUT

CDS_ADC = analogio.AnalogIn(board.GP27)

VR_ADC = analogio.AnalogIn(board.GP26)

DHT_SENSOR = adafruit_dht.DHT11(board.GP7)

# UART Initialization
uart0 = busio.UART(board.GP16, board.GP17, baudrate=115200)
uart0.write(bytearray('pico sensorBoard Test\n', 'utf-8'))

# SD Card Initialization
spi = busio.SPI(board.GP10, MOSI=board.GP11, MISO=board.GP8)
cs = digitalio.DigitalInOut(board.GP9)
sdcard = adafruit_sdcard.SDCard(spi, cs)
vfs = storage.VfsFat(sdcard)
storage.mount(vfs, '/sd')

temp = 0
humi = 0

def read_temperature_humidity():
    global temp, humi
    try:
        temp = DHT_SENSOR.temperature
        humi = DHT_SENSOR.humidity
    except RuntimeError:
        print("Failed to read DHT sensor data")
        return

def read_adc_input(ch):
    if ch == 0: #VR
        VRData = VR_ADC.value
        VRDataV = (3.3 / 65535) * VRData
        VRDataV = round(VRDataV, 1)
        return VRDataV
    elif ch == 1: #CdS
        CdSData = CDS_ADC.value
        CdSDataV = (3.3 / 65535) * CdSData
        CdSDataV = round(CdSDataV, 1)
        return CdSDataV

def write_to_sdcard():
    LED2.value = True
    with open("/sd/sample1.txt","a") as f:
        f.write("Temperature: {:.0f}C, Humidity: {:.0f}%, VRVolt: {:.2f}V, CdSVolt: {:.2f}V\r\n".format(temp, humi, read_adc_input(0), read_adc_input(1)))
    LED2.value = False

while True:
    read_temperature_humidity()
    print('Temperature = {:.1f}C, Humidity = {:.1f}%'.format(temp, humi))
    print('CdS Volt    = {:.1f}V, VR Volt  = {:.1f}V'.format(read_adc_input(1), read_adc_input(0)))
    
    vrInput = read_adc_input(0)
    cdsInput = read_adc_input(1)
    uart0.write(("temp: " + str(temp) + 'C' + "   Humi: " + str(humi) + '%' +
                 "   CdSV: " + str(cdsInput) + 'V' + "   VR_V: " + str(vrInput) + 'V' + '\n').encode())

    write_to_sdcard()
    
    time.sleep(0.5)

(3) 동작 결과

 

 

728x90
반응형
LIST

댓글