0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaProgramiranjeRaspberry Pi in Python za začetnike (7)

    Raspberry Pi in Python za začetnike (7)

    Že sedmi članek serije o Rasbperry Pi-ju. Kako hitro se je obrnilo 7 številk revije Svet elektronike. In ravno tako hitro se je poglobilo naše znanje o še eni elektronski komponenti. V tem članku bomo nadaljevali pisanje o delu z UART protokolom, ter kako ga uporabljamo v programih napisanih v programskem jeziku Python. Zagotovo ste na RPi-ju opazili tudi priključke, ki služijo komunikaciji SPI (ang. Serial Peripheral Interface Bus) in bilo bi zelo nepošteno, da vas pustimo brez znanja o tovrstnem sporazumevanju s perifernimi napravami. Torej bomo tudi o tem spregovorili v tem članku, ko zaključimo poglavje o UART-u. Sedaj pa veselo na delo!

    UART – nadaljevanje

    Slike ni
    KLIK

    Najprej pripravimo naš RPi tako, da bomo lahko UART uporabljali kot vhod-izhod v naših Python3.2 programih. Verjetno nam je vsem jasno, da bomo morali do našega RPi-ja dostopati na drug način in ne preko UART konzole, če bomo UART priključka uporabljali v programih. Torej izključiti moramo možnost prijave v konzolo preko UART-a. To naredimo tako, da v datoteki „/etc/inittab“ zakomentiramo vrstico (na začetek postavimo #), katero smo prej popravili. Torej vrstica mora biti sedaj taka:

    #T0:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100

    Če smo sistem namestili preko podatkovne slike sistema, snetega iz spletne strani RPi, lahko, če želimo, izključimo tudi izpis ob zagonu. To naredimo tako, da v vsebino datoteke „/boot/cmdline.txt“ popravimo iz glej program 1, na: glej program 2.

    Še enkrat opozarjamo, da v primeru namestitve operacijskega sistema preko «BerryBoot-a“ te datoteke nimate v Linux-u. Če jo boste iskali, vaš trud ne bo poplačan. Do uveljavitve sprememb pride šele po ponovnem zagonu sistema:

    $ sudo shutdown –r now
    Slike ni
    KLIK

    Če imamo še priključen naš USB vmesnik in odprto «putty“ sejo, lahko ob ponovnem zagonu že preizkusimo delovanje UART-a iz „LXTerminal-a“ s preprostimi ukazi. Najprej nastavimo hitrost prenosa:

    $ stty –F /dev/ttyAMA0 9600

    Sedaj pa našemu osebnemu računalniku pošljimo sporočilo:

    $ echo „Hello PC“ > /dev/ttyAMA0

    Ja. Tako preprosto je. Kot bi pisali v datoteko. Kaj pa branje? Temu podobno:

    $ cat /dev/ttyAMA0

    In že lahko v „putty-ju“ vnašamo podatke, ki se bodo na zaslonu RPi-ja izpisali po pritisku tipke enter. Zelo smo zadovoljni. UART deluje tudi tu. Pa v Python3.2? Poglejmo si kaj nas loči od tovrstne komunikacije. Namestiti moramo „Python3 serial“ modul, ki nam bo omogočal komunikacijo preko serijskega vodila in sicer z ukazom:

    $ sudo apt-get install python3-serial

    Module se namešča, bodite potrpežljivi, saj ga RPi namešča za vas. Sedaj zaženemo Python3 okolje z ukazom:

    $ sudo idle-python3.2 &

    Odpremo novo datoteko in vanjo najprej uvozimo module, ki smo ga pred kratkim namestili:

    import serial

    sedaj naredimo nov objekt, ki mu bo ime „ser“ in bo skrbel za komunikacijo z UART vmesnikom:

    ser = serial.Serial(„/dev/ttyAMA0“)

    Trenutno stanje objekta in s tem vmesnika lahko vedno preverimo z izpisom objekta:

    ser

    Privzeta hitrost prenosa je 9600. Seveda to hitrost, čas do izteka (ang. timeout) in podobne atribute lahko spreminjamo, pa prikažimo le ta dva primera:

    ser.baudrate = 9600

    ser.timeout = 1

    Hitrost smo nastavili na 9600 Baud-ov oziroma bitov na sekundo, čas do izteka (koliko časa nek ukaz čaka) pa na eno sekundo. To skorajda nujno potrebujemo pri branju podatkov iz vodila. Pa si poglejmo primer:

    ser.read(10)

    Ta ukaz bi iz UART medpomnilnika rad prebral 10 Bajt-ov. Kaj pa če jih ni toliko? Potem bo po poteku časa „timeout“ vrnil toliko Bajtov, kolikor jih je bilo. Time out se uporablja tudi pri branju vrstice:

    ser.readline()

    Če po času «timeout“ ni znaka za novo vrstico, se izvajanje funkcije vseeno konča. Ravno tako velja za ostale funkcije:

    ser.read() #prebere 1 Bajt

    Torej če atributa „timeout“ ne bomo nastavili, bo funkcija čakala, dokler ne bo izpolnjen pogoj za izhod, pa naj bo to znak za novo vrstico, bodisi en Bajt, ali pa določeno število le teh. Branje smo obdelali. Sedaj pa moramo obdelati še pisanje. Enostavno lahko pišemo kot Byte – dve šestnajstiški števili, če želimo na primer poslati zaporedoma šestnajstiški vrednosti ‚AB‘ in ‚CD‘:

    ser.write(b“xABxCD“)

    Malo bolj pa se zakomplicira pri standardnih nizih. In sicer pretvoriti moramo najprej iz standardnega niza v „ascii“ niz, nato pa še naprej v Byte. Koda je takega videza:

    ser.write(byte(„Hello PCnr“.encode(„ascii“))

    Tu smo uporabili tudi dve tako imenovani ubežni sekvenci. To sta ‚n‘ (za novo vrsto, ang. „newline“) in ‚r‘ (za vrnitev na začetek vrste, ang. „return“, tudi „carriage return“). Več o tem boste zagotovo našli na spletu pod iskalnim nizom „ubežne sekvence“ (ang. escape sequences).

    Priročnik Raspberry Pi in Python za začetnike 

    Barvni LCD za RPi

    Raspberry Pi in Python za začetnike (7)

    2014_SE224_54