Avietės knopkių programavimas

Posted: 2013-05-27 in Darbeliai
Žymos:, ,

Kaip jau minėjau, savo avietinį serverį patobulinau keliais raudonais mygtukais. Bet mygtukai mygtukais, o juos reikia dar ir prijungti bei padaryti, kad kompiuteris į jų paspaudimus reaguotų. Trumpai tariant, reikia truputuką paprogramuoti.

Mygtukus aš prijungiau per modifikuotą IDE kabelį prie Raspberry Pi GPIO elektrodų krūvelės. GPIO reiškia „bendros paskirties įvestis/išvestis“. Na, žodžiu, tokie elektrodai, kuriuos galima naudoti bet kam, kam tik norisi. Panašiai, kaip ir mikrokontrolerių, šie elektrodai turi po kelias paskirtis kiekvienas. Tarkim, yra I²C ir SCL (čia tokie protokolai mikroschemoms bitukais keistis) magistralių elektrodai, tačiau juos galima panaudoti ir kaip paprastus loginius įvesties/išvesties elektrodus.

Štai tie elektrodai kairiajame kampe. Arčiausiai esantis elektrodas yra numeris vienas:

Išpakuotas Raspberry Pi

Jų išdėstymas ir aprašymas yra štai toks:

Raspberry Pi GPIO elektrodų aprašymo „žemėlapis“

Kaip matote, tikrų, panaudojamų elektrodų ne tiek ir daug. Kartojasi 3,3 V, 5 V maitinimas, „žemė“, o kiti elektrodai turi tam tikrą paskirtį. Aišku, jei trūksta elektrodų, o paskirtis nelabai svarbi, beveik visus, išskyrus maitinimo, galima naudoti pagal GPIO paskirtį.

Mano įrenginyje GPIO 18 jau panaudotas infraraudonojo valdymo davikliui. Kad nereikėtų nieko perkonfigūruot, ten jį ir paliksiu. O mygtukams panaudosiu GPIO 22, 23 ir 24 elektrodus.

Pirmasis punktas, dėl kurio reikėjo apsispręsti, kaip į elektrodą nusiųsti signalą. Tarkim, kad nustatom elektrodo kryptį „IN“, t.y. kad jis lauktų signalo. Jeigu tuo metu patikrinsim jo reikšmę, ji bus lygi nuliui. Jeigu į elektrodą įjungsim teigiamą įtampą, jo reikšmė taps lygi vienetui.

Antrasis punktas. Raspberry Pi logika veikia 3,3 V lygmenyje. Ir nesvarbu, kad yra 5 V elektrodai kokiai nors įrangai prijungti ar netgi maitinti patį Raspberry Pi (ir taip galima, pasirodo). Jei koks iš GPIO elektrodų gaus 5 V, jam šakės nesugrįžtamai. Tiesiai, beje, 3,3 V irgi jungti negalima, nes elektrodai gali „suvalgyti“ tik tam tikrą kiekį srovės — iki 50 mA. Reiškia, loginį vienetą galima padaryti prijungus 3,3 V įtampą per rezistorių.

Trečias punktas — trys mygtukai ir trys rezistoriai… Na, detalių nedaug, bet vis tiek papildomas terliojimasis. Su Arduino (arba, tiksliau, su ATMega procesoriumi) galima iškirsti tokį fintą: nustatyti elektrodo kryptį „IN“ ir įrašyti į jį loginį vienetą. Kas bus? Ogi jei nuskaitysim tą elektrodą, jo reikšmė ir bus vienetas. O va jei jį užtrumpinsim į „žemę“, jo reikšmė taps lygi nuliui. Taigi, galima prie elektrodo jungi mygtuką, kuris jį trumpintų į „žemę“. Papildomo rezistoriaus nereikia. Šitas fintas vadinamas „pullup rezistoriaus įjungimu“. Nežinau, kaip „pullup“ lietuviškai. Esmė, kad tas rezistorius palaiko loginio vieneto lygį.

Ketvirtas punktas. Pavyko rasti, kad Raspberry Pi elektrodai turi vidinius pullup ir pulldown rezistorius. Dabar tik išsiaiškinti, kaip juos valdyti.

Penktas punktas. Radau pavyzdinį shell skriptuką, kuris turėtų padėti.

Kai jau padariau tokį tiriamąjį darbelį, laikas paeksperimentuoti su elektrodais. Kol kas tiesiai iš komandinės eilutės, kad „apsitrinčiau“.

Kaip ir bet kas Linux’e (arba kitose Unix atmainose), GPIO galima valdyti per failų sistemą. Na, Unix sistemose viskas yra failai, net RAM atmintis. Tai labai smagu, nes su bet kokiu įrenginiu gali elgtis kaip su failu. Nori pasidaryti kokio nors kietojo disko kopiją — kopijuoji jo įrenginį atstovaujantį failą ir įsirašai į kitą kietąjį diską ir turi ano disko pilną atvaizdą. Paprasta, aišku ir efektyvu. Su GPIO tas pats.

Toliau visos pavyzdinės komandos iš root aplinkos.

Taigi, pirmiausia reikia Linux branduoliui pranešt, kad apskritai kažkokį elektrodą norim prisijungti ir kažką su juo daryti. Tas daroma įrašant elektrodo numeriuką į tam tikrą failą. Pradedu nuo 22-ojo elektrodo. Komanda štai tokia:

echo "22" > /sys/class/gpio/export

 

Po šios komandos /sys/class/gpio kataloge atsiranda katalogas gpio22, o jame — dar visa krūva failų. Mane domina tik direction ir value.

Jeigu visgi dirbsite iš kito vartotojo, ne root, aplinkos, galite šias komandas siuntinėti ir su sudo komanda. Tik pasakykit man, kaip jums atrodo, ar veiks tokia komanda:

sudo echo "22" > /sys/class/gpio/export

 

Jei truputuką pažįstate Linux sistemą, tai suprasite iš karto, kame čia bėda. sudo komanda šiuo atveju echo komandą vykdo, kaip root. Bet sudo komanda kaip root, vykdo tik pirmąją eilėje komandą. Tolimesnės yra vėl vykdomos to paties vartotojo, kuris paleido sudo. O štai srauto operatorius „>“ kažkuria prasme irgi komanda ir jis vykdomas… pradinio vartotojo. Taigi root teisėmis įvykdytos komandos echo rezultatas perimamas paprasto vartotojo ir bandomas nukreipti į root teisėmis apsaugotą failą… Aišku? Jei neaišku, tai rezultatas toks, kad taip neveikia 🙂 Teisingas būdas yra toks:

sudo sh -c 'echo "22" > /sys/class/gpio/export'

 

Vykdom shell komandą kaip root ir jai perduodam įvykdyti visą komandos eilutę. Tada viskas ir pavyksta sėkmingai.

Čia šiek tiek nukrypau į šalį. Grįžtam. Taigi turim jau sukurtą gpio22 elektrodą, kuriuo galima manipuliuoti. Manipuliuoju, nustatau, kad elektrodo kryptis būtų „IN“:

echo "in" > /sys/class/gpio/gpio22/direction

 

Dabar kažkaip reikia įjungti pullup rezistorių. Tame pačiame pavyzdyje tai daroma šitaip:

echo "high" > /sys/class/gpio/gpio22/direction

 

Pabandau. Nuskaitau reikšmę iš /sys/class/gpio22/value. Akurat, vienetukas. Gerai, spaudžiu mygtuką, trumpinu į „žemę“. Laikau nuspaudęs ir vėl nuskaitau failą. O ten vis tiek vienetukas. Hmm. Nuskaitau „direction“ failą dėl visa ko, o ten — apvalus „out“. O aš taigi „in“ nustačiau… Pasirodo, internete esančiais pavyzdžiais pasitikėt negalima. Netikiu, kad taip galėjo veikti. Perknisau dar biškį interneto, sako, kad gi „high“ į „direction“ failą vienu ypu perjungia elektrodą į išvesties režimą (t.y. „out“) ir nustato jame loginį vienetą… Visi kiti bandymai, kad ir įrašyti vienetuką į „value“ failą su kryptimi „in“, nepavyko.

Galų gale atsiverčiau rimtesnius pavyzdžius su tais pullup rezistoriais ir išsiaiškinau, kad per failų sistemą to padaryti negalima, galima tik tiesiogiai valdant atitinkamus atminties registrus. O tai jau truputį kitoks kodijimas, nei srautų siuntinėjimas į kelis failiukus… Bet čia nieko baisaus, radau kuklią programėlę, pavadintą gpio-admin, kuri parašyta visai gražia C kalba ir valdo visus GPIO aspektus. Man, tiesa, tereikėjo tik pullup kaip nors panaudoti. Taigi su gpio-admin ši užduotis pasidarė labai paprasta:

gpio-admin export 22 pullup

 

Va ir viskas, turiu „in“ kryptimi nustatytą elektrodą, faile value kabo loginis vienetukas, paspaudus mygtuką jame tuoj pat atsiranda nulis.

Kitas žingsnis — sukurti shell skriptuką, kuris kas kokią sekundę (dažniau nelabai reikia) patikrintų elektrodo reikšmę value faile ir jei ji tampa loginiu nuliu, ką nors įvykdytų. Pavyzdžiui, į failą įrašytų eilutę „Gavau nulį 22-am elektrode!!!“ ar perkrautų Raspberry Pi.

Pavyzdukas labai paprastas. Amžinas „while“ ciklas ir rašymas į failą (elektrodų konfigūravimo eilutės praleistos):

while [ true ]
do
    if [ "$(cat /sys/class/gpio/gpio22/value)" == '0' ]
    then
        echo "Gavau nulį 22-am elektrode!!!" >> $LOG_FILE
    fi
    sleep 1
done

Va ir viskas. Šį skriptuką paleidau pabandymui ir pamačiau, kad jis tikrai veikia. Viskas liuks. Tuoj pakartojau reikalą 23 ir 24 elektrodui. Na, o skriptuką patalpinau /etc/init.d kataloge, kur visokie „demoniukai“ guli. „Daemon“ Linux terminologijom yra foninė programa, kažką naudingo veikianti. Pavyzdžiui, tai gali būti SSH serveris, interneto serveris, torentų siuntimo serveris ir pan. Foninė programa, trumpai tariant.

Kad tas naujasis demoniukas būtų paleistas, įdėjau eilutę į /etc/rc.local skriptą, pačioje pabaigoje:

/etc/init.d/knopkes.sh &

 

Ampersandas gale, kaip galbūt žinote, reiškia, kad programa bus paleista fone ir pamiršta. Be ampersando rc.local skriptas lauktų, kol programėlė išsijungs, o juk ji neišsijungtų niekad… ir Raspberry Pi neužsikrautų, taip ir kabotų kažkur nežinomybėje.

Viskas gerai, mygtukų gaudymo demoniukas sukasi fone, veikia, kaip priklauso. Tik viena bėda: naudoja apie 1% Raspberry Pi procesoriaus resursų. Daugoka, kaip tokiam, beveik nieko neveikiančiam, daiktui. Ypač, kad kiti, daug galingesni, procesai naudoja dar mažiau. O juk to procesoriaus ir taip labai nedaug.

Išeitis vienintelė: perrašyti demoną su C++. shell skripto interpretavimui suvalgoma per daug resursų, kviečiamos viena po kitos kelios komandos, jų „laidymas“ labai neefektyvus. Todėl truputuką pramiklinęs pirštus prisiminau, kas yra ifstream ir ofstream ir perrašiau demoniuką su C++. Išorines komandas vykdau su system komanda, o pats demoniukas sukasi fone ir labai retai top sąraše apskritai pasirodo. O ir nuskaitinėja reikšmes kas pusę sekundės.

Tiems, kam įdomu, štai ir to demoniuko kodas. Jis labai primityvus, paprastas, elektrodų reikšmės nustatomos vis dar iš shell skripto, o ne iš pačios programėlės, bet visgi veikia. Kada nors vėliau patobulinsiu iki to, kad būtų naudojami atminties registrai, turėtų dar mažiau resursų naudot:

#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

using namespace std;
string gpio22 = "/sys/class/gpio/gpio22/value";
string gpio23 = "/sys/class/gpio/gpio23/value";
string gpio24 = "/sys/class/gpio/gpio24/value";

void readGPIO(string gpio, string &val) {
    ifstream get_gpio(gpio.c_str());
    if (get_gpio < 0) {
        cout << "Nepavyko atidaryti " << gpio << "\n";
        return;
    }
    get_gpio >> val;
    get_gpio.close();
}

int main() {
    string val;
    while(1) {
        readGPIO(gpio22, val);
        if (val == "0") {
            system("halt");
        }
        readGPIO(gpio23, val);
        if (val == "0") {
            system("sudo -u pi /home/pi/bin/startxbmc.sh");
        }
        readGPIO(gpio24, val);
        if (val == "0") {
            system("sudo -u pi /home/pi/bin/startx.sh");
        }
        usleep(500000);
    }
    return 0;
}

Kol kas tiek. O kadangi man nepatinka, kaip kaista mano avietė, tai dabar eisiu projektuoti jai kokios nors aušinimo sistemos.

Komentarai
  1. Ignas parašė:

    Gal galetum tokių ‘Lietuviškų’ gidų daugiau parašyti? man tokiam dundukui butu labai idomu paskaityti dar:) Gavau dovanų šita faina aparačiuka tai patiko žiauriai, bet žiuriu, kad nevelnio neišnaudoju galimybių. Budamas tokių ‘mėgeju’ temoku kažkiek tik puslapius lipdyti. Tai teko išmokti kas tas linux labiau, biski suprast kaip kas veikia, dar pirma syki kažka maklevot su python pradejau, tai kolkas geriausias pasiekimas mano tai uždekti pora šviesos diodukų per paprasta php puslapį. Gaila, kad fizika primiršes esu ganėtinai, neisivaizduoju dabar kaip rele reiku pasijunkti. ot fainai butu nors kambaryje šviesa junginet is lauko:)

    • Darau, Blė parašė:

      Manau, kad galėčiau ir su laiku jų bus. Bet aš rašau tiesiog apie tai, ką ir kai darau. Šiuo metu avietė truputuką užleista, mano paties planai su ja įgyvendinti, tam kartui nieko netobulinu.

      Dėl relės valdymo tai čia tektų truputuką pasiterlioti. Raspberry Pi logika yra 3,3 V, o galia vieno elektrodo ganėtinai maža. Abejoju, ar pavyktų panašę relę rasti. Tad paprasčiausia būtų relę junginėti per MOSFET tranzistorių, kurio užtūra būtų prijungta prie kažkurio elektrodo. Arba per paprastą NPN tranzistorių su prie ten prijungta baze. O relė savo ruožtu galėtų junginėti ir tinklo (220 V) įtampą. Pabandysiu kokią nedidelę schemutę nupiešti.

  2. Ignas parašė:

    Vasara be technikos gavosi, o dabar jau ir paskutiniai mokslai užgriuvo ir nebebuvo progos daugiau prisesti prie neaiškaus ‘hobio’. Dabar dar pasiėmes vėl pastebejau, kad sd kortelė mano sugriuvo kažkaip tai kol kita prisiversiu nusipirkti pradėjau vėl skaitinėtis apie relių pajungima nuo avietes ir prisižiurėjas tokių schemučių labai gundytis pradejau tiesiog užsisakyti 8kanalų relių muduli koki iš kiniečių(ebejui pilna jų po ~20lt, nors lemonoj nemačiau dar). Tai irgi geras, su mano ribotom žiniom dasiskaičiau, kad aš kaip ir 2-4 tegaliu pasijunkti jeigu jungčiau tiesiai, nes kitaip viršytu tuos varganus 50mA. Nu, ne tamsus miškas, bet miglotas. Lituokli turių, relių irgi turiu kažkur namuose, bet bijau vistiek savęs. Ar man tos relės išvis kiek laikytu? jeigu ten 3w lempute pasijungti tai manau nieko tokio, o jeigu jau tarp kavos aparato(šeip tai labai butu gerai junginėti katilinės rozete(,nes griozdas neapsisprendžia kada, NEŠILDYTI)) statyti tai kyla man klausimas ar gali ji ten stovėti, neperkais, nenusproks jeigu stovėtu visa diena?

    • Darau, Blė parašė:

      Užsisakant 8 kanalų modulį reikia žiūrėti, su kiek išvadų jis yra valdomas. Relių blokai, kiek mačiau, paprastai pardavinėjami su krūva relių (8 arba 16) ir viena ar dviem mikroschemom. Tos mikroschemos paprastai yra ULN2803 ar panašūs „stiprintuvai“, Darlingtono struktūros tranzistorynas su diodais. Į šios mikroschemos įvadą padavus mažos galios signalą jis paverčiamas galingesniu, kuris jau pajėgus „vežti“ relę. Taigi Avietei jokių problemų, išskyrus tai, kad 8 relių bloko valdymui bus sunaudoti 8 išvadai. Norint pridėti dar daugiau relių nebeliks pakankamai išvadų.

      Išvadų problema sprendžiama naudojant multiplekserius, pavyzdžiui I²C magistralės „šakotuvus“: taip iš dviejų laidukų padaromi 8, 16, 24 ar netgi 48 išvadai: tiek galima valdyti ir relių. Problema tame, kad gatavų relių blokų su integruotu I²C valdymu aš ebay ar kažkur kitur nemačiau. Todėl šitą dalyką reikėtų „dasiklijuoti“. Mano daromas valdiklis kaip tik taip ir dirba: prie procesoriaus stovi PCF8574 „šakotuvas“, ULN2803 tranzistorių mikroschema ir toliau aštuonios relės.

      Kad neviršytumėt varganų 50 mA, relių blokas turėtų būti maitinamas atskiru maitinimo blokeliu ar bent jau individualia jo atšaka. Jokiu būdu negalima jo jungti prie Raspberry Pi įtampos išvadų. Su Raspberry reikia tik bendros „žemės“ ir išvadų jungties — aštuonių arba dviejų laidelių, priklausomai nuo įgyvendinimo (t.y. tiesiai valdomo tranzistoryno, ar per I²C šakotuvą).

      Populiariausios relės laiko po 10 amperų. Tai maždaug du kilovatai energijos. Relės pačios dėvisi tik persijungimo metu, nes tarp kontaktų šoka kibirkštis. O elektromagnetinis mechanizmas praktiškai nesidėvi, pirmiau visada išdega kontaktai.

      Yra ir 16 amperų relių, jei galvosim apie 5 voltų blokus. O va jei reikia daugiau iš vienos relės, tai tada jau prasideda 12 ar 24 voltų relės… Kodėl taip yra, nežinau. Gal dėl kontaktų svorio 🙂 Taigi jei relės maksimali srovė nėra viršijama, gali ji ir metų metais stovėti įjungta, by tik jai maitinti elektros būtų…

      Tiesa, galima dar galvoti ir apie elektronines reles, valdomas optronais ir semistoriais. Semistoriai brangūs, bet yra ir 24 amperų galingumo. Na, tik tokiam daiktui radiatoriaus reikia. Bet dėvėjimąsi galima pamiršti… Žinoma, semistorių kainos su relėmis tai net nepalyginsi, jie, bjaurybės, brangūs, ypač galingesni.

      Tikiuosi, kad bus aiškiau.

      • Ignas parašė:

        Aiškiau tai iškarto pasidarė:) Kiek pastebėjau tai berods tie ULN2803 yra kabinami ten kur jau daugiau nei 8 kanalai, bet užtat kyla durnų klausimų vėl. Nors ir kai ebejuj žiuriu, kad ant tų 8 kanalų relių rašo, kad kiekvienam kontaktui reikia po ~20-16mA tai mane tas ir glumino – kaip žmonės atsipūte jungia tuos 8 gpio kontaktus tiesiai į tą modulį: 8 • 20 = 160mA kai avietes limitas 50mA?? Visokiuose forumuose irgi tokių kaip aš atsiranda su tokiu klausimu, tai atsako, kad tas optronas tereikalauja 2mA, kas jau man logikos atneša: 8 • 2 = 16mA. Tada jau lyg ir atrodo pakankamai kaip man jeigu jau nieko daugiau nejunksiu. Tada dar lieka kausimukas kaip tuos Vcc ir JD-Vcc reiktų pasijunkti. Į JD-Vcc tai kaip suprantu reikia tu 5V ir viskas tai tuos galima pajunkti nuo avietės P1-02 ar P1-04 išvadų, nes jie lygigrečiai ateina nuo micro-usb kur jau sočiai stiprio bus. O koks skirtumas ar kai Vcc bus sujunktas kartu su JD-Vcc ir nuo tu pačiu 5V bus jau man vėl neaišku. Gaila, kad pats bandau mokytis taip ‘biškutį’ beviltiškai ir žiūriu visiokias pamokėles kaip,kad čia: https://www.youtube.com/watch?v=b6ZagKRnRdM
        Tad tamstai labai ačiū, kad informatyvių atsakymų sulaukiu net puse 4 ryto(pagal man rodoma data) 😀 Dažnai tai internete tik kur parašysi, kas visiškai neaišku tai pasiūs tave į 8klase vėl arba iškarto ant trijų raidžių.

        • Darau, Blė parašė:

          Na, tame filmukyje tai su relės valdymu perspausta… tranzistorius optronui įžiebti, tranzistorius nuo optrono… tą pirmą tranzistorių su optronu galima visai išmesti, nes laisvai galima antrąjį tranzistorių tiesiai į GPIO jungti. Na, pagalvokim, juk čia vienos relės įjungimui net septynios detalės! Taigi košmaras būtų plokštę susiprojektuot su aštuoniom relėm.

          Valdymui reikia labai mažai srovės. Va, tame filmukyje pirmasis tranzistorius prie GPIO jungiamas per 10 kΩ rezistorių. GPIO yra 3.3 V. Jei įsivaizduotume, kad tranzistoriaus bazės-emiterio dalis neturi varžos ir ant jos nekrenta įtampa (o yra kaip tik priešingai), tai maksimali srovė iš GPIO būtų 0.33 mA. Taip taip, miliampero dalys. O realybėje ji būtų dar mažesnė. Panašiai ir su ULN2803, ten įvadui, kad įsijungtų relė, užtenka irgi miliampero dalių. Beje, ULN2803 tam ir naudojamas, kad nereikėtų krūvos detalių: viskas, išskyrus optronus, yra viduje.

          Apie VCC. VCC yra pirmosios, valdančiosios, bloko dalies maitinimo įtampa. Pagal filmuką tai yra pirmasis tranzistorius ir optrono šviesos diodas. JD-VCC yra relių (antrosios pusės) maitinimo įtampa. Na, atseit, pirma ir antra pusė yra viena nuo kitos izoliuotos (tai vadinama „galvaniniu atrišimu“, kai tarp dviejų schemos dalių nėra bendrų elektros takų). Deja, toje schemoje yra viena nesąmonė: labai stengiamasi propaguoti optroną, o pirmas ir antras tranzistorius sujungti… į bendrą „žemę“. Tai kam tas optronas, jei vis tiek yra vienas bendras elektros takas? Nebent ten atskiros „žemės“ būtų, kokia nors GND1 ir GND2… Nes optronai paprastai naudojami ten, kur yra visiškai atskirti, be bendros žemės, maitinimo šaltiniai. Na, nebent bandoma nuo triukšmų iš relių pusės izoliuoti. Kai kurie mikrovaldikliai junginėdami reles užstringa, nes jos yra induktyvūs komponentai ir gali kelti grandinėse gan galingus triukšmus.

          Relių blokuose paprastai netgi būna trumpikliai, leidžiantys sujungti VCC su JD-VCC, t.y. naudoti vieną maitinimo šaltinį. O va dėl avietės P1-02 tai aš susilaikyčiau. Skaičiuoti reikia. 5 V iš P1-0x išvadų gali duoti ne daugiau, nei 300 mA ir tai, jei Avietė maitinama ne mažesnio pajėgumo, kaip 1 A, maitinimo šaltiniu. O aštuonios relės po 60 mA sunaudos jau 480 mA. Tad jas geriau visgi maitinti atskiru blokeliu. Juk reikia numatyti ribinį atvejį, kai jos visos bus vienu metu įjungtos 🙂

          Jo, aš mėgstu savaitgaliais anksčiau atsikelti. Bet ne pusę keturių, dabar pas mane laikrodis 5:55 rodo.

  3. Ignas parašė:

    Na tai jau manau galima sakyti, kad jeigu relių maitinima norim pasijunkti is P1-02 tai tų relių išviso turi būti arba 4 arba tik 4 ijungtos. Kitu atvėju galima pasičiupti nokios pakrovėja kaip atskira maitinimą moduliui.
    Manau kai galėsiu dabar tai ir užsisakysiu koki nors modulį jau:) Dar noriu palaukti kol nauja klavietūra atvyks, nes pasirodo PS/2 į USB keitiklis ne ka pigesnis negu nauja net iliuminuota klavietūra 😀 Kitas planelis saraše bus bluetooth galsiakalbiai 🙂

    Tikiuos tokie žmogeliai kaip aš ras šitą blogą!

Palikti atsakymą: Ignas Atšaukti atsakymą

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.