8.8 TOTAL SCORE

Adafruit Feather RP2040

Razvojni sistem

Dobro izvedena integracija RP2040 u Adafruit Feather sistem, uz par poboljšanja i višu cenu.


Kvalitet izrade 9
Implementirana tehnologija 9
Lakoća korišćenja 9
Odnos cena/performanse 8
PROS
  • LiPoly Battery konektor
  • STEMMA QT konektor
  • Implementirana 4 DAC
  • Mnoštvo FeatherWing dodataka
CONS
  • Viša cena
  • Manji broj pinova zbog Feather formata

 

Uvek je interesantan spoj dve velike ideje. Adafruit je spojio svoj Feather ekosistem sa Pico RP2040 SoC. Nešto slično smo već videli u BPI pico W gde du se susreli ESP32 mikrokontroler i RPi Pico format.

Adafruit Feather RP2040

Ono što o ovom spoju treba reći je da je integracija RP2040 u Feather ekosistem veoma dobro osmišljena. Dodat je StemmaQT I2C port za povezivanje sa mnoštvom StemmaQT periferija. Tu je i 3.7/4.2V LiPoly Battery USB punjenje, koje omogućava nezavisnost projekta od mrežnog napajanja. Oblik ploče je u Feather standardnu, što omogućava direktno povezivanje svih FeatherWing dodataka, ali u isto vreme onemogućava direktno plug-in povezivanje u proizvode namenjene za RPi Pico ploče. Posledica ove geometrije je i smanjen broj pinova u odnosu na pravi RPi Pico RP2040, ali se to nije pokazalo kao bitan problem u ovom slučaju.

FeatherWing OLED sh1107

Postoji odlična podrška za CircuitPython i Arduino, kao i korektna podrška za MicroPython, sa tim da u nekim slučajevima nema namenski napisanih drajvera za FeatherWing ploče.

FeatherWing OLED sh1107

U primeru koji smo mi uradili u MicroPython-u. da bi demonstrirali sam Feather RP2040, mali problem je bila sh1107.py biblioteka ( preuzmite sa: https://github.com/nemart69/sh1107-micropython) za ispis na FeatherWing OLED sh1107 monohromatski ekran rezolucije 128×64 pixela. Komunikacija sa ekranom je I2C. Posebno se pokazala problematična GFX.py biblioteka, koju Adafruit održava samo za CircuitPython, dok je namensku MicroPython verziju ostavio u stanju od pre par godina. Naša preporuka je da se u Adafruit ekosistemu ipak koristi CicuitPython verzija Pythona za koju Adafruit brine o svim potrebnim bibliotekama.

Projekat u radu

Za demonstraciju koju smo opisali upotrebili smo i generički daljinski upravljač, koji je preko GPIO 13 pina bio povezan sa Feather RP2040.

Button OK

Zaključak je da je ovo veoma dobro prilagođeno rešenje, koje u Feather ekosistem pored standradnih Espressif i Atmel mikrokontrolera, donosi i RP2040.

from machine import I2C, Pin, PWM
import utime
import sh1107

keydict = {
  69 : "Button: 1",
  70 : "Button: 2",
  71 : "Button: 3",
  68 : "Button: 4",
  64 : "Button: 5",
  67 : "Button: 6",
  7 : "Button: 7",
  21 : "Button: 8",
  9 : "Button: 9",
  22 : "Button: *",
  25 : "Button: 0",
  13 : "Button: #",
  24 : "Button: UP",
  8 : "Button: LEFT",
  28 : "Button: OK",
  90 : "Button: RIGHT",
  82: "Button: DOWN"
}


PIN = Pin(13, Pin.IN, Pin.PULL_UP)
i2c = I2C(1, sda=Pin(2), scl=Pin(3), freq=400000)
display = sh1107.SH1107_I2C(128, 64, i2c, 0x3c)

display.fill(1)
display.text('www.magazin', 0, 45, 0)
display.text('mehatronika.com', 5, 55, 0)
display.line(0, 43, 128, 43, 0)
display.show()

for i in range (0, 4):
    display.text("Wait: {}".format(4-i), 30, 18, 1)
    display.text("Wait: {}".format(3-i), 30, 18, 0)
    display.show()
    utime.sleep(1)

display.text("Wait: {}".format(3-i), 30, 18, 1)
display.text("Press key", 30, 18, 0)
display.show()

N=0

while True:
    if PIN.value() == 0:
        count = 0
        while PIN.value() == 0 and count < 200:
            count += 1
            utime.sleep_us(60)
        count = 0
        while PIN.value() == 1 and count < 80:
            count += 1
            utime.sleep_us(60)
        idx = 0
        cnt = 0
        data = [0,0,0,0]
        for i in range(0,32):
            count = 0
            while PIN.value() == 0 and count < 15:
                count += 1
                utime.sleep_us(60)
            count = 0
            while PIN.value() == 1 and count < 40:
                count += 1
                utime.sleep_us(60)
            if count > 8:
                data[idx] |= 1<<cnt
            if cnt == 7:
                cnt = 0
                idx += 1
            else:
                cnt += 1
        if data[0]+data[1] == 0xFF and data[2]+data[3] == 0xFF:
            
            N=data[2]
            display.fill(0)
            display.text(keydict[N], 0, 10, 1)
            display.text("Key Value: {}".format(N), 0, 26, 1)
            display.text('www.magazin', 0, 45, 1)
            display.text('mehatronika.com', 5, 55, 1)
            display.line(0, 43, 128, 43, 1)
            display.show()