کیت رزبری پیکو ®ProMake
کیت رزبری پیکو ®ProMake
معرفی
کیت رزبری پیکو راهکار فشرده، مقرون به صرفه و منعطف برای ماژولهای میکروکنترلر پیکو و سایر محصولات مشابه می باشد.. دارای 3 اسلات ماژول ®ProMake می باشد و قابل استفاده در رنج وسیعی از کاربردهای متفاوت می باشد.
رزبری پیکو برپایه میکروکنترلر قدرتمند دو هسته ای آرم Cortex MO+ RP2024 می باشد، با فرکانس کلاک بالا که تا 133 مگاهرتز مه چندین مرتبه از از میکروکنترلرهای با معماری مشابه بیشتر است. در سیستمهای امبد کوچک قابل استفاده و بهینه است.همچنین امکان ایجاد پروژه های برپایه زبان برنامه نویسی C/C++ و میکرو پایتون را ارائه می دهد.
قابلیت ها
- نصب آسان ماژولهای ®Promake
- پشتیبانی از 3 ماژول ®ProMake، که به سادگی و بدون هیچ لحیم کاری بر روی کیت قرار می گیرند
- ارتباطات SPI,Serial و I2C و سه GPIO برای ماژول اول
- ارتباطات SPI,I2C و یک GPIO برای ماژول دوم
- ارتباطات I2C,Serial و 4 GPIO برای ماژول سوم
- دارای چیپ ساعت(RTC) با باتری پشتیبان
- یک عدد بازر
- دارای دو عدد RGB LED
- یک عدد IR LED گیرنده
- دو عدد کلید فشاری
- کانکتورهای توسعه ای SparkFun QWIIC و Seeed Studio Grove
- کانکتور هدر برای نمایشگر I2C OL
مشخصات فنی
- ابعاد برد: 90cm x 72cm
- حالتهای منبع تغذیه :
- کانکتور روی برد USB Type-C :5v
- کانکتور پاور بیرونی : Vin(7-23v)
- پورت USB ماژول پیکو
- دمای کاری : -40℃ ~85℃
نکات مهم - المان LDO ولتاژ 3.3 روی کیت قادر به تامین حداکثر 600 میلی آمپر جریان می باشد
منابع
شماتیک برد
نرم افزار
نمایشگرهای RGB LEDs به حالت رنگین کمان
با استفاده از امکان کلاک GPIO می توان RGB LED ها را درایو کرد. دو عدد LED روی برد به هم متصل هستند و بشادگی می توان رنگ و میزان روشنایی را تعیین نمود.
# Example using PIO to drive a set of WS2812 LEDs.
import array, time
from machine import Pin
import rp2
# Configure the number of WS2812 LEDs.
NUM_LEDS = 2
PIN_NUM = 14
brightness = 0.2
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
# Create the StateMachine with the ws2812 program, outputting on pin
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
##########################################################################
def pixels_show():
dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for i,c in enumerate(ar):
r = int(((c >> 8) & 0xFF) * brightness)
g = int(((c >> 16) & 0xFF) * brightness)
b = int((c & 0xFF) * brightness)
dimmer_ar[i] = (g<<16) + (r<<8) + b
sm.put(dimmer_ar, 8)
time.sleep_ms(10)
def pixels_set(i, color):
ar[i] = (color[1]<<16) + (color[0]<<8) + color[2]
def pixels_fill(color):
for i in range(len(ar)):
pixels_set(i, color)
def color_chase(color, wait):
for i in range(NUM_LEDS):
pixels_set(i, color)
time.sleep(wait)
pixels_show()
time.sleep(0.2)
def wheel(pos):
# Input a value 0 to 255 to get a color value.
# The colours are a transition r - g - b - back to r.
if pos < 0 or pos > 255:
return (0, 0, 0)
if pos < 85:
return (255 - pos * 3, pos * 3, 0)
if pos < 170:
pos -= 85
return (0, 255 - pos * 3, pos * 3)
pos -= 170
return (pos * 3, 0, 255 - pos * 3)
def rainbow_cycle(wait):
for j in range(255):
for i in range(NUM_LEDS):
rc_index = (i * 256 // NUM_LEDS) + j
pixels_set(i, wheel(rc_index & 255))
pixels_show()
time.sleep(wait)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)
print("fills")
for color in COLORS:
pixels_fill(color)
pixels_show()
time.sleep(0.2)
print("chases")
for color in COLORS:
color_chase(color, 0.01)
while(True):
print("rainbow")
rainbow_cycle(0)
ساعت کلاک RTC(DS1307)
کیت پیکو دارای قطعه RTC برای مشخص نمودن ساعت دقیق و استفاده در پروژه های مختلف می باشد. بسادگی طبق شماتیک و از طریق ارتباط I2C تامکان خوانش دقیق کلاک ساعت وجود دارد. این قطعه مجهز به باتری پشتیبان برای نگهاداری مقدار زمان در حالتهای قطع تغذیه هست.
در این پروژه از نمایشگر OLED 1306 برای نمایش مقدار زمان و تاریخ استفاده می شود.
import machine
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf,sys
import ds1307
#############################################################
i2c_dev = I2C(0,scl=Pin(17),sda=Pin(16),freq=200000) # start I2C on I2C1 (GPIO 16/17)
print('Scan i2c bus...')
devices = i2c_dev.scan()
if len(devices) == 0:
print("No i2c device !")
else:
print('i2c devices found:',len(devices))
for device in devices:
print("Decimal address: ",device," | Hexa address: ",hex(device))
#############################################################
ds = ds1307.DS1307(i2c_dev)
print(ds.datetime())
#now = (2022, 2, 4, 6, 13, 52, 00, 0)
#ds.datetime(now)
print(ds.datetime())
real_time = ds.datetime()
#print(type(real_time))
Year = real_time[0]
Month = real_time[1]
Day = real_time[2]
Hour = real_time[4]
Minute = real_time[5]
Second = real_time[6]
#print(Year)
########################################################################
pix_res_x = 128 # SSD1306 horizontal resolution
pix_res_y = 32 # SSD1306 vertical resolution
oled = SSD1306_I2C(pix_res_x, pix_res_y, i2c_dev) # oled controller
oled.fill(0) # clear the OLED
start_x = 0 # start point for text in x-dir
start_y = 2 # start point for text in y-dir
lineskip = 20 # space between text in y-dir
while(True):
real_time = ds.datetime()
#print(type(real_time))
#Year = real_time[0]
#Month = real_time[1],Day = real_time[2]
#Hour = real_time[4],Minute = real_time[5],Second = real_time[6]
txt_array = [str(real_time[0])+str(real_time[1])+''+str(real_time[2])+' '+
str(real_time[4])+':'+str(real_time[5])+':'+str(real_time[6]),'DS1307 RTC Test PICO'] # text array
for iter_ii,txt in enumerate(txt_array):
oled.text(txt,start_x,start_y+(iter_ii*lineskip)) # add text at (start_x,start_y)
oled.show() # show the new text and image
# other functions
# oled.poweron() # power on the OLED
# oled.poweroff() # power off the OLED (save power)
oled.invert(0) # invert the colors from dark -> light, and light -> dark
oled.fill(0) # clear the OLED
# oled.contrast(1) # lower brightness
oled.contrast(255) # increase brightness
#ds.datetime(now)