Adafruit Feather RP2040
Dobro izvedena integracija RP2040 u Adafruit Feather sistem, uz par poboljšanja i višu cenu.
Pros
- Li-Poly Battery konektor
- STEMMA QT konektor
- Implementirana 4 DAC
- Mnoštvo FeatherWing dodataka
Cons
- Manji broj pinova zbog Feather formata
- Viša cena
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.

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.

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.

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.

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

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()

