Cum putem utiliza placa Raspberry Pi ca platformă de blog

Publicarea de materiale proprii în rețeaua Internet este foarte simplă prin intermediul platformelor de tip blog. Fie că este vorba de poezii, rețete culinare sau proiecte de robotică, prin intermediul unui blog personal puteți face toate lucrările personale să devină accesibile oricui de oriunde. În general o pagină blog este găzduită de un server Internet dar nu este nevoie întotdeauna de o mașină de calcul scumpă și cu capacitate de procesare mare pentru acest lucru. Dacă nu există un număr mare de utilizatori simultani și nu găzduim mai multe pagini blog pe același sistem de calcul performanțele sistemului pot fi modeste, ca cele oferite de o placă Raspberry Pi 3. În cadrul materialului de față vom explora instalarea și funcționarea unei platforme blog utilizând placa Raspberry Pi. În felul acesta vom putea să obținem o platformă blog pe care o putem duce cu noi în buzunar…

1

O platformă blog necesită un server web, un limbaj de programare specific web, un sistem de baze de date și o aplicație blog. Cea mai cunoscută aplicație blog este WordPress. Pentru a putea instala aplicația WordPress trebuie să avem deja instalate aplicațiile server web, sistemul de baze de date și limbajul web specific. Pentru a instala aceste funcționalități vom utiliza Apache ca server web, MySQL ca sistem de baze de date și PHP ca limbaj web (combinația de aplicații este regăsită și sub denumirea de AMP – Apache Mysql Php, sau LAMP – Linux Apache Mysql Php). Toate cele trei aplicații sunt disponibile ca pachete sub sistemul de operare Raspbian (pentru teste a fost utilizat sistemul de operare Raspbian 8 Jessie kernel 4.9.28-v7+).

Combinația AMP nu este singura soluție disponibilă pentru instalarea aplicației WordPress, se pot folosi alte aplicații de tip server web și bază de date – limbajul PHP este obligatoriu deoarece aplicația WordPress este scrisă în PHP, dar este combinația pe care o vom utiliza în prezentarea ce urmează.. Există chiar o distribuție de sistem de operare dedicată pentru aplicația WordPress pe Raspberry Pi: PressPi. Pentru mai multe informații se pot parcurge și materialele: (*), (*), (*), (*).

 

Instalarea serverului web Apache și a limbajului PHP

Instalarea serverului web Apache se face cu ajutorul comenzii (în Terminal):

sudo apt-get install apache2

După instalare se poate verifica foarte ușor funcționarea serviciului web accesând adresa IP a plăcii Raspberry Pi cu ajutorul unui client web (browser).

3

Fișierele pe care se bazează serviciul web se găsesc în directorul /var/www/html. Se pot efectua teste modificând fișierul index.html (fișierul implicit servit de serverul web).

Instalarea limbajului PHP și a extensiei de legătură cu serverul Apache se face cu ajutorul comenzii (în Terminal):

sudo apt-get install php5 libapache2-mod-php5

După instalare se va reporni serviciul Apache și se pot face primele teste (se va înlocui fișierul index.html cu un fișier PHP – index.php).

sudo /etc/init.d/apache2 restart

sudo rm /var/www/html/index.html

sudo nano /var/www/html/index.php

Fișierul index.php de test poate conține de exemplu:

<?php phpinfo(); ?>

Ce va avea ca efect:

4

 

Instalarea serverului de baze de date MySQL

Instalarea serverului MySQL se face cu ajutorul comenzii (în Terminal):

sudo apt-get install mysql-server php5-mysql

La finalul instalării va trebui să stabiliți o parolă pentru utilizatorul administrator (root) al serverului de baze de date (păstrați această parolă deoarece fără ea nu se va putea lucra în viitor cu serverul MySQL) :

5

După finalizarea instalării serverul Apache trebuie repornit:

sudo /etc/init.d/apache2 restart

 

Instalarea și configurarea platformei WordPress

Aplicația WordPress se va copia de pe Internet și se va dezarhiva în directorul serverului web (/var/www/html):

cd /var/www/html

sudo wget https://wordpress.org/latest.tar.gz

sudo tar xfz latest.tar.gz

sudo rm latest.tar.gz

sudo chown -R www-data: wordpress

Următorul pas este să creăm o bază de date goală (și un utilizator asociat) ce va fi utilizată pentru instalarea WordPress (pentru mai multe informații puteți vedea și „The MySQL Command-Line Tool”):

mysql -uroot -p

mysql> CREATE DATABASE wordpress;

mysql> CREATE USER ‘newuser’@’localhost’ IDENTIFIED BY ‘password’;

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO ‘newuser’@’localhost’;

mysql> FLUSH PRIVILEGES;

mysql> exit

Acum putem porni instalarea aplicației WordPress accesând adresa IP a sistemului Raspberry Pi urmată de /wordpress (http://ADRESAIP/wordpress). Primul lucru este să alegem limba care va fi utilizată de aplicația WordPress:

6

Trebuie să pregătim și să introducem în interfața web de instalare datele legate de baza de date și utilizatorul asociat – date stabilite la pasul de creare a bazei de date:

7

Trebuie stabilite titlul blogului și datele contului de administrare (Username și Password) și putem lansa efectiv instalarea (Install WordPress):

8

După finalizarea instalării putem accesa platforma blog utilizând adresa IP a plăcii Raspberry Pi urmată de /worpress, bineînțeles la acest moment pagina blog este dată de un șablon standard:

9.png

Pentru personalizarea paginii blog accesați interfața de administrare a platformei utilizând adresa IP a plăcii Raspberry Pi urmată de /wordpress/wp-admin :

10

Platforma WordPress pune la dispoziția utilizatorului funcționalități extrem de puternice permițând realizarea de website-uri de complexitate mare. Printre facilitățile puse la dispoziție de platformă se pot enumera :

  • Teme de stil predefinit

11

  • Pagini web ce se pot insera foarte ușor în site-ul web creat

12

  • Colecții de obiecte multimedia (poze, filme)

13

  • Componente suplimentare ce se pot instala pentru a diversifica funcționalitatea site-ului web

14

Pentru mai multe informații despre modul de personalizare a unui website bazat pe platforma WordPress se pot consulta și materialele (*), (*), (*), (*).

Cum putem utiliza placa Raspberry Pi 3 ca radio Internet

Chiar dacă radioul ca mijloc tradițional de informare este depășit din cauza noilor modalități de transmitere a informațiilor (prin intermediul canalelor TV și, mai ales, prin intermediul rețelei Internet) nu înseamnă că nu își are farmecul și utilitatea sa. Nimic nu se compară cu ascultarea postului de radio preferat când lucrăm sau când suntem la volan. Este adevărat că înlocuirea undelor radio cu streamingul prin Internet este o soluție mult mai stabilă și câștigă din ce în ce mai mult teren, radioul clasic fiind înlocuit cu aplicații multimedia specifice. În ciuda ușurinței de utilizare, utilizarea streamingului online al unui post de radio parcă este însoțită de o oarecare nostalgie după obiectul fizic radio. Din păcate dispozitivele radio ce permit recepționarea posturilor radio prin intermediul rețelei Internet au un cost destul de mare; din fericire putem transforma placa Raspberry Pi 3 într-un astfel de dispozitiv foarte ușor și fără a scrie nici o linie de program (toate aplicațiile sunt deja disponibile on-line).

Pentru a implementa un radio Internet cu ajutorul plăcii Raspberry Pi avem nevoie de următoarele componente:

Există mai multe variante de implementare a funcționalității de radio Internet pe placa Raspberry Pi (a se vedea proiectele: (*), (*), (*), (*)). Proiectul de față se bazează, atât ca schemă de interconectare a componentelor dar mai ales pentru partea de program, pe ghidul extrem de cuprinzător Raspberry PI Internet Radio realizat de Bob Rathbone.

Conectarea componentelor la placa Raspberry Pi 3

Schema de interconectare între componentele sistemului este:

2

Conectarea ecranului LCD se va face prin intermediul modului specific plăcii Raspberry Pi ce reduce numărul de pini necesari interconectării și oferă posibilitatea reglării contrastului cu ajutorul potențiometrului aflat pe placă. Ecranul se va alimenta la 5V (pinul 5V al modulului se va conecta la pinul 2 al plăcii, pinul GND al modulului se va conecta la pinul 6 al plăcii). Celelalte conexiuni sunt: pinul RS al modulului la pinul 26 (GPIO7) al plăcii, EN – pin 24 (GPIO8), DB4 – pin 29 (GPIO5), DB5 – pin 31 (GPIO6), DB6 – pin 32 (GPIO12) și DB7 – pin 33 (GPIO13).

Tastatura flexibilă este formată din 4 contacte (butoane) fără nici un fel de rezistențe de limitare a curentului (diagrama de pe pagina următoare) – se va conecta direct folosind rezistențele interne de pull-up/down ale pinilor GPIO de pe placa Raspberry Pi. Pinul tastaturii cel mai din stânga (pinul 5) se va conecta la pinul 1 al plăcii (3.3V) – apăsarea butoanelor va trage pinii GPIO în ”1” logic. Tasta 1 (pinul 4) se va conecta la pinul 7 (GPIO4) al plăcii și va avea funcționalitatea de Mute (oprirea sonorului), tasta 2 (pinul 3) de va conecta de pinul 11 (GPIO17) și va avea funcționalitatea de Meniu, tasta 3 (pinul 2) – pin 8 (GPIO14) funcționalitate DOWN și tasta 4 (pinul 1) – pin 10 (GPIO15) funcționalitate UP. Utilizarea celor patru taste va fi explicată în secțiunea următoare. Dacă asocierea între numărul tastei și funcționalitatea acesteia vi se pare greu de reținut se pot lipi pe taste mici bucățele de hârtie cu numele (funcționalitatea) butonului.

3

 

Instalarea și operarea sistemului radio Internet

Sistemul radio Internet are la bază programul mpd (Music Player Daemon) și utilitarul mpc. Instalarea sub sistemul de operare Raspbian a celor două programe se face cu ajutorul comenzii (testele au fost realizate sub versiunea Raspbian 8 Jessie, kernel 4.9.28-v7+):

sudo apt-get install mpd mpc python-mpd

Este recomandată setarea zonei de timp corectă pentru ca ceasul sistemului să indice ora zonei în care ne aflăm (ecranul sistemului va afișa ora și data pe prima linie). Acest lucru se poate face cu ajutorul utilitarului raspi-config (Localisation Options):

sudo raspi-config

4

Următoarea aplicație ce trebuie instalată este chiar aplicația de radio scrisă de Bob Rathbone. Pentru instalare se vor executa următoarele instrucțiuni:

wget http://www.bobrathbone.com/raspberrypi/packages/radiod_5.9_armhf.deb

sudo dpkg -i radiod_5.9_armhf.deb

Procesul de instalare va declanșa și suita de operații necesare configurării aplicației. Primul ecran va permite configurarea versiunii de placă Raspberry Pi utilizată – pentru Raspberry Pi 3 vom alege opțiunea 2 (40 pin version wiring).

5

În următorul ecran de configurare vom alege tot opțiunea 2 (Four line LCD with push buttons):

6

Pentru finalizarea instalării este necesar să repornim sistemul:

sudo reboot

După repornire sistemul radio va porni în mod automat iar pe ecranul LCD-ului va apărea: prima linie – ora și data, a doua linie – postul de radio, a treia linie – melodia sau programul ascultat, a patra linie – nivelul sonorului.

7

În cazul în care nu se aude nimic în boxe – nu avem sonor – se va apela la utilitarul select_audio.sh al aplicației pentru selectarea ieșirii audio corecte:

cd /usr/share/radio

./select_audio.sh

Se va selecta On-board audio output jack și se va reporni sistemul.

8

Butonul 1 (Mute) va permite oprirea / repornirea sonorului. Sistemul nu este prevăzut cu butoane de reglare a volumului deoarece acest lucru se va controla din potențiometrul boxelor active. Este recomandat ca volumul să fie setat la maxim din setările plăcii (utilitarul alsamixer):

alsamixer

9

Butonul Menu permite navigarea între patru ecrane de configurare a sistemului radio:

  • Ecranul de funcționare normală, prezentat anterior. În acest ecran butoanele Up și Down vor permite navigarea în lista de posturi de radio predefinite.
  • Ecranul de căutare. Butoanele Up și Down permit vizualizarea listei de posturi predefinite. Apăsarea butonului Menu va comuta pe postul afișat.

10

  • Ecranul de selectare a sursei. Aplicația mpd este capabilă să redea și fișiere obișnuite de muzică (mp3, wav) nu doar transmisii online. Cu alte cuvinte sistemul nostru are și funcționalitatea de player MP3 – dacă se introduce în sistem un USB stick cu melodii MP3 ele pot fi redate prin selectarea opțiunii Music Library în locul opțiunii Internet Radio (cu ajutorul butoanelor Up și Down).

11

  • Ultimul ecran de configurare permite activarea opțiunii de Random on – posturile de radio sau melodiile MP3 vor fi redate în ordine aleatorie.

12

Lista de posturi de radio predefinite se poate personaliza editând fișierul /var/lib/radiod/stationlist și respectând formatul specific [nume] URL:

[RTL] http://streaming.radio.rtl.fr/rtl-1-44-128.m3u

[RTL2] http://streaming.radio.rtl.fr/rtl2-1-44-128.m3u

[Music Box] http://www.musicboxtv.com:8000/live.m3u

Controlul de la distanță a sistemului radio

Chiar dacă sistemul asigură o funcționalitate completă pentru un dispozitiv radio (chiar și MP3 player) există și opțiuni suplimentare ce pot fi adăugate.

O opțiune interesantă este controlul dispozitivului radio de pe telefonul mobil – opțiune utilă în cazul în care sistemul este instalat într-o locație mai puțin accesibilă (conectat la sistemul de sonorizare al unei instituții de exemplu). Acest lucru se poate face instalând aplicația Android gratuită Droid MPD Client

13

și configurând în aplicație adresa IP a sistemului radio Raspberry Pi (în meniul Settings).

14

Cum să utilizăm placa Raspberry Pi 3 ca Media Center

Un dispozitiv Media Box sau Media Center este un sistem capabil să redea înregistrări multimedia (audio și video) stocate în diverse formate (mp3, wav, avi, mp4, divx) și aflate pe diverse suporturi de stocare (local, stick usb, HDD extern, în rețea). Un astfel de dispozitiv poate transforma un televizor obișnuit sau un simplu monitor într-un sistem multimedia cu facilități asemănătoarea ultimei generații de dispozitive de tip televizor inteligent (smart). Mai mult decât atât, un dispozitiv de tip Media Box este capabil să vă ajute să catalogați și să sortați colecția personală de fișiere audio și video completând chiar anumite detalii (nume album, nume piese, distribuție filme) cu informații extrase automat din mediul on-line.

Placa Raspberry Pi 3 poate implementa cu succes funcționalitatea unui dispozitiv Media Box datorită facilităților hardware de care dispune: ieșire audio-video HDMI, cele patru porturi USB ce permit conectarea de dispozitive de tip USB stick sau HDD-uri externe, conectivitate duală de rețea Ethernet și WiFi și, nu în ultimul rând, puterea de procesare oferită de procesorul cu patru nuclee ARMv8 pe 64 de biți ce rulează la 1.2GHz și nucleu grafic VideoCore IV 3D (putere de procesare mult superioară față de variantele anterioare ale plăcii).

Pentru a utiliza placa Raspberry Pi 3 ca Media Center avem nevoie ca televizorul sau monitorul pe care îl vom utiliza să aibă intrare HDMI (în caz contrar va fi necesară utilizarea unui convertor HDMI-VGA sau HDMI-DVI) și de următoarele componente (specifice utilizării plăcii, suplimentar față de placa Raspberry Pi 3 și de alimentatorul de rețea):

  • un cablu HDMI care să realizeze conexiunea între placă și televizor;
  • un card micro SD de 16GB pentru sistemul de operare, este recomandată utilizarea cardului micro SD oficial Noobs;
  • o carcasă (opțional dar recomandat);
  • cablu de rețea (dacă utilizăm rețeaua ethernet și nu conexiunea WiFi – conexiunea ethernet oferă viteze mai mari de comunicație în rețea);
  • tastatură și mouse dar, mai ales în cazul utilizării ca Media Center, este recomandată utilizarea unei tastaturi integrate fără fir.

 

Software-ul care va asigura funcționalitatea efectivă de Media Center se numește Kodi și este unul dintre cele mai cunoscute și mai utilizate aplicații open-source de acest tip nu numai pentru Raspberry Pi ci și pentru sisteme Linux și Windows de tip PC. Instalarea aplicației pe o placă Raspberry Pi se poate face pur și simplu pe un sistem ce rulează deja Raspbian cu ajutorul comenzii (utilizând Terminal):

sudo apt-get install kodi

2

După instalare aplicația va putea fi lansată din meniul interfeței grafice:

3

O altă variantă de utilizare este instalarea unei variante de sistem de operare dedicate aplicației Kodi – sistemul de operare va rula aplicația Kodi în mod preferențial – la pornirea unui astfel de sistem de operarea aplicația Kodi va porni în mod automat iar sistemul va fi un sistem dedicat de tip Media Center. Este o variantă indicată dacă placa Raspberry Pi va îndeplini doar funcția de Media Center. Optimizarea sistemului de operare pentru aplicația Kodi poate oferi o experiență mai bună ca sistem Media Center (viteză de răspuns, stabilitate, ușurință în utilizare). Cele mai cunoscute distribuții dedicate aplicației Kodi sunt LibreELEC și OSMC – nu există diferențe funcționale majore între cele două distribuții, doar elemente de design diferite ale interfeței utilizator – puteți să le testați pe ambele și să vedeți care vă place mai mult. Ambele distribuții pot fi instalate utilizând utilitarul NOOBS și ambele necesită conexiune Internet pentru a fi instalate. După instalare ambele distribuții vor porni automat aplicația Kodi.

4

Explicațiile următoare (capturile de imagini utilizate în explicațiile următoare) se bazează pe versiunea OSMC 2017.04-1 ce rulează Kodi 17.1 (Krypton). Se pot parcurge suplimentar și următoarele materiale: (*), (*), (*), (*), (*), (*).

 

Configurarea și utilizarea aplicației Kodi

Interfața utilizator Kodi pune la dispoziție mai multe meniuri. Funcționalitățile multimedia pot fi accesate prin intermediul meniurilor Videos, Music și Pictures – aceste meniuri permit regăsirea, organizare și redarea conținutului multimedia de tip video, audio și foto.

5

Înainte de a explora facilitățile multimedia oferite de aplicația Kodi este necesar să configurăm setările de rețea ale sistemului pentru a putea accesa conținut multimedia din rețea (rețea locală, Internet). Setările de rețea pot fi configurate din meniul My OSMCNetwork.

6

După configurarea setărilor de rețea (ethernet sau WiFi) putem accesa conținut multimedia atât din rețeaua locală (directoare partajate de pe alte sisteme de calcul) cât și din rețeaua Internet. Conținutul multimedia ce poate fi accesat de aplicația Kodi se poate afla local (pe un stick de memorie sau un HDD extern conectate prin USB la placa Raspberry Pi) sau în rețea. Dispozitivele de stocare conectate prin USB la placa Raspberry Pi vor apărea în mod automat în meniurile Videos, Music și Pictures nefiind necesară o configurare suplimentară. Fișierele accesate prin intermediul rețelei (sau fișierele locale care nu apar în mod automat în meniu) trebuie adăugate manual (Add videos… , Add music…, Add pictures…).

7

Adăugarea manuală permite definirea de  intrări în meniu pentru directoare locale (Home folder sau Root filesystem), directoare partajate de rețea (NFS sau SMB) și chiar dispozitive de streaming multimedia UPnP.

8

O altă facilitate oferită este posibilitate de streaming multimedia dinspre dispozitivele mobile către sistemul Media Center Kodi (dublarea ecranului telefonului mobil inteligent (mirroring) pe televizorul conectat la sistemul Media Center, de exemplu). Acest lucru poate fi realizat prin activarea protocolul AirPlay specific dispozitivelor Apple (iPad, iPhone) – meniul Settings, submeniul ServicesAirPlay. Cu ajutorul acestei setări puteți controla dispozitivul Media Center de pe orice dispozitiv mobil Apple.

9

O altă opțiune de control la distanță și de transmitere de conținut multimedia către sistemul Media Center Kodi este activarea protocolului DLNA compatibil cu o gamă mai largă de dispozitive, inclusiv cu dispozitivele mobile ce rulează Android – meniul Settings, submeniul ServicesUPnP/DLNA. Dacă dispozitivul Android nu deține deja o aplicație ce permite comunicația prin protocolul DLNA se poate instala aplicația gratuită AllConnect.

11

10

Dacă se dorește controlul la distanță a dispozitivului Media Center Kodi fără a utiliza o tastatură sau telecomandă fără fir se poate activa opțiunea de control prin intermediul unui dispozitiv mobil – meniul Settings, submeniul ServicesControl.

12

După activarea opțiunii de Allow remote control via HTTP pe dispozitivul mobil se va instala aplicația Kore ce implementează o interfață grafică de control completă pentru sistemul Kodi.

14

13

Activarea setării de control la distanță a sistemului Kodi permite controlul Media Center-ului atât de pe dispozitive mobile, prin intermediul aplicației Kore dar și de pe orice alt dispozitiv conectat în aceiași rețea locală cu sistemul Kodi. Controlul la distanță se poate face utilizând un client web (browser) accesând adresa IP a sistemului pe portul 8080.

15

 

Instalarea și utilizarea de componente suplimentarea (add-ons)

Pe lângă opțiunile / facilitățile implicite instalate odată cu aplicația Kodi se pot adăuga funcții suplimentare prin adăugarea de componente suplimentare denumire add-ons. Aceste componente se pot instala din meniul Settings, submeniul Add-on browser. Printre cele mai uzuale componente suplimentare se pot enumera adăugarea afișării stării vremii (Weather add-on), adăugarea posibilității de a urmări conținut de pe site-ul YouTube (YouTube add-on) dar și facilități de descărcare a automată a subtitrărilor pentru filme sau informații suplimentare (versuri, poza albumului) pentru fișiere de muzică.

1617

Pe lângă colecția oficială (repository) de add-ons a aplicației Kodi se pot instala și componente suplimentare din colecții diverse. Există o dinamică de dezvoltare foarte mare a componentelor suplimentare destinate platformei Kodi. Orice funcționalitate vă doriți, oricât de exotică ar fi, cu siguranță există o componentă care să o implementeze, trebuie doar să o căutați. Dacă sunteți în pană de idei puteți să consultați clasamentele on-line cu cele mai populare extensii pentru platforma Kodi, câteva exemple: (*), (*), (*), (*).

Utilizarea pinilor GPIO la Raspberry Pi 3

Configurația pinilor GPIO la placa Raspberry Pi 3

Pe lângă resursele de calcul specifice unui sistem de calcul de uz general (microprocesor, memorie, interfața Ethernet și WiFi, porturi USB) placa Raspberry Pi 3 dispune și de un conector de 40 de pini ce expune o serie de pini digitali de intrare / ieșire (General-Purpose Input / Output). Diagrama conectorului și semnificația pinilor este prezentată în diagrama următoare.

1

Din cei 40 de pini avem 2 pini de Power (alimentare) 3.3V – pinii 1 și 17, 2 pini de Power 5V – pinii 2 și 4, 8 pini de GND (masă) – pinii 6, 9, 14, 20, 25, 30, 34 și 39, 2 pini rezervați pentru identificarea plăcilor de extensie de tipul Pi HATS – pinii 27 și 28 și 24 de pini GPIO, unii dintre ei cu funcționalitate dublă, ca de exemplu:

  • Pinii 3 și 5 (GPIO2 – SDA și GPIO3 – SCL) sunt și magistrală I2C;
  • Pinii 8 și 10 (GPIO14 – UART_TX și GPIO15 – UART_RX) sunt și linii de comunicație serială UART;
  • Pinii 19, 21, 23, 24 și 26 (GPIO10 – SPI0_MOSI, GPIO9 – SPI0_MISO, GPIO11 – SPI0_CLK, GPIO8 – SPI_CE0 și GPIO7 – SPI_CE1) – pini magistrală 0 SPI cu două semnale de chip select;

Toți pinii GPIO la Raspberry Pi suportă maxim 3.3V – conectarea de periferice cu un nivel logic ”1” ce implică un nivel de tensiune mai mare de 3.3V va conduce la distrugerea definitivă a blocului GPIO al plăcii.

Pentru a ilustra utilizarea pinilor GPIO la placa Raspberry Pi 3 vom utiliza un kit de senzori pentru această placă conține atât elemente digitale (brick-uri led și un brick buton) cât și analogice (senzori de temperatură, umiditate, lumină și un shield de achiziție analogică).2

 

Utilizarea pinilor GPIO ca pini digitali

Utilizarea pinilor GPIO ca pini digitali (pini de intrare sau de ieșire cu valori logice ”1” sau ”0” – tensiune 3.3V sau 0V) se poate face din mai multe limbaje de programare. Vom exemplifica utilizarea pinilor GPIO utilizând două din cele mai utilizate limbaje de programare și anume: C și Python.

Vom utiliza o schemă electrică compusă din placa Raspberry Pi 3, un brick led (element de ieșire) și un brick buton (element de intrare):3

Brick-ul buton se va conecta la 3.3V (VCC), GND (GND) și pinul 11 (GPIO17). Brick-ul LED se va conecta la GND (GND) și la pinul 12 (GPIO18). Vom scrie, în ambele limbaje de programare, un program care va aprinde LED-ul când se va apăsa pe buton (se va activa o ieșire la activarea unei intrări).

Se va crea un fișier exemplu1.py (utilizând orice editor de text în linie de comandă, nano de exemplu, sau în interfața grafică) care va conține următorul cod în limbajul Python:

import RPi.GPIO as GPIO

ledPin = 18

butPin = 17

GPIO.setmode(GPIO.BCM)

GPIO.setup(ledPin, GPIO.OUT)

GPIO.setup(butPin, GPIO.IN)

GPIO.output(ledPin, GPIO.LOW)

print(“Press CTRL+C to exit”)

try:

    while 1:

        if GPIO.input(butPin):

            GPIO.output(ledPin, GPIO.HIGH)

        else:

            GPIO.output(ledPin, GPIO.LOW)

except KeyboardInterrupt:

   GPIO.cleanup()

După crearea fișierului sursă programul poate fi executat imediat (limbajul Python nu necesită compilare) cu ajutorul comenzii (în Terminal):

python exemplu1.py

Atâta timp cât programul rulează funcționalitatea descrisă anterior (LED-ul se va aprinde la apăsarea butonului) va merge. Pentru oprirea programului se va apăsa combinația de taste CTRL+C.

Elementele importante din program sunt importarea bibliotectii Python – RPi.GPIO – responsabilă cu funcțiile specifice accesului la pinii GPIO, funcțiile GPIO.setmode și GPIO.setup ce permit configurarea pinilor ca intrare sau ca ieșire și funcțiile GPIO.output și GPIO.input ce permit setarea și citirea pinilor de ieșire / intrare.

Codul echivalent în limbajul C este:

#include <stdio.h>   

#include <wiringPi.h>

const int ledPin = 18;

const int butPin = 17;

int main(void) {

    wiringPiSetupGpio();

    pinMode(ledPin, OUTPUT);    

    pinMode(butPin, INPUT);  

    printf(“Press CTRL+C to quit.\n”);

    while(1) {

        if (digitalRead(butPin))

        {   digitalWrite(ledPin, HIGH);   }

        else

        {   digitalWrite(ledPin, LOW); }

    }

     return 0;

}

Programul trebuie compilat înainte de execuție cu ajutorul comenzii:

gcc -o exemplu1 exemplu1.c -l wiringPi

După compilare poate fi executat cu ajutorul comenzii:

./exemplu1

Se poate observa ușor echivalența elementelor principale din programul scris în limbajul C și cel scris în Python. Biblioteca utilizată se numește wiringPi iar funcțiile utilizate sunt pinMode, digitalRead și digitalWrite (funcții similare se regăsesc și în mediul Arduino IDE).

 

Achiziția analogică și comunicația SPI

Placa Raspberry Pi nu dispune de un convertor analog-numeric, nu poate citi valori intermediare în intervalul 0 – 3.3V ci doar valori digitale de ”0” logic și ”1” logic. Din acest motiv dacă dorim să utilizăm senzori analogici trebuie să utilizăm un convertor extern. Shield-ul din kit-ul de senzori conține un astfel de convertor, mai exact un circuit MCP3008 cu opt canale de intrare (se pot conecta până la opt senzori analogici). Acest circuit va comunica cu placa Raspberry Pi prin intermediul interfeței SPI, cu alte cuvinte achiziția analogică se va realiza prin intermediul interfeței SPI. Înainte de conectarea shield-ului se va activa comunicația SPI cu ajutorul utilitarului raspi-config:

4

Pentru ilustrarea achiziției analogice vom utiliza următoarea schemă electrică (placă Raspberry Pi 3, un brick LED roșu, shield-ul de senzori și un brick senzor analogic de temperatură):

5

Conexiunile din schemă sunt următoarele:

  • Brick-ul LED este conectat ca și în schema precedentă: GND – GND (pin 6), IN – GPIO18 (pin 12);
  • Shield-ul de senzori se conectează la placa Raspberry Pi astfel: 3.3V – 3.3V (pin 17), CLK – SPI0_CLK (pin 23), MISO – SPI0_MISO (pin 21), MOSI – SPI0_MOSI (pin 19), CE – SPI0_CE0 (pin 24), GND – GND (pin 25);
  • Brick-ul senzor de temperatură se conectează GND – GND (pin 9), VCC – 5V (pin 2) și OUT (ieșirea analogică) se conectează la canalul 0 al shield-ului de senzori.

Scopul schemei este să citim valoarea măsurată de senzorul analogic de temperatură (senzor LM50) prin intermediul shield-uri de senzori SPI, să afișăm valoarea măsurată (valoarea tensiunii achiziționate și valoarea temperaturii echivalente) și, în cazul în care temperatura este mai mare de 30 de grade Celsius, să aprindem LED-ul – funcționalitate de alarmă termică vizuală. Codul utilizat este scris în limbajul Python:

import spidev

import time

import RPi.GPIO as GPIO

ledPin = 18

spi = spidev.SpiDev()

spi.open(0,0)

GPIO.setmode(GPIO.BCM)

GPIO.setup(ledPin, GPIO.OUT)

GPIO.output(ledPin, GPIO.LOW)

def readadc(adcnum):

    if ((adcnum > 7) or (adcnum < 0)):

        return -1

    r = spi.xfer2([1,(8+adcnum)<<4,0])

    adcout = ((r[1]&3) << 8) + r[2]

    return adcout

try:

  while True:

    value = readadc(0)

    voltage = value * 3.3

    voltage /= 1024.0

    tempCelsius = (voltage-0.5)*100

    if (tempCelsius>30):

         GPIO.output(ledPin, GPIO.HIGH)

    else:

         GPIO.output(ledPin, GPIO.LOW)

    print “—————————“

    print “Voltage: “, voltage

    print “—————————“

    print “Temp: “, tempCelsius

    time.sleep(1)

except KeyboardInterrupt:

   GPIO.cleanup()

Comanda LED-ului în program se face identic cu exemplul precedent. Pentru partea de compunicație SPI utilizăm biblioteca spidev (9) care, prin intermediul funcției readadc, ne permite citirea valorii achiziționate de la circuitul extern de conversie analog-numerică. Tensiunea măsurată de circuitul de conversie este convertită în temperatură (grade Celsius) conform documentației senzorului LM50 (8).

Ca și în cazul precedent programul se execută direct cu comanda (presupunem că am salvat programul în fișerul termometru.py):

python termometru.py

6

Execuția programului se oprește cu combinația de taste CTRL+C.

 

Comunicația I2C și comunicația serială UART

Alte două instrumente puse la dispoziție de pinii plăcii Raspberry Pi 3 sunt pinii de magitrală I2C și portul de comunicație serială UART. Ambele metode de comunicație pot permite conectarea la placa Raspberry Pi de diverse module electronice suplimentare: senzori digitali I2C, ecrane LCD / TFT I2C sau seriale, module GPS seriale etc. Vom exemplifica utilizarea celor două canale de comunicație utilizând un senzor digital de temperatură și umiditate I2C – Si7021 breakout – și un ecran LCD grafic serial 128×64. La fel ca și în cazul magistrale SPI, este necesară activarea comunicațiilor I2C și seriale utilizând utilitarul raspi-config.

Schema de interconectare între placa Raspberry Pi și cele două componente este următoarea:

7

Senzorul Si7021 se va conecta la cei doi pini I2C ai plăcii: DA senzor – pin SDA / GPIO2 placă, CL senzor – pin SCL / GPIO3 placă iar alimentarea la 3.3V: + senzor – pin 1 placă, – senzor – pin 9 placă.

Afișajul LCD serial se alimentează la 5V: Vin LCD – pin 2 placă, GND LCD – pin 6 placă iar comunicația se va realiza unidirecțional din motive de niveluri logice de funcționare (LCD-ul funcționează la 5V iar placa la 3.3V) și din cauză că nu este nevoie ca LCD-ul să trimită date către placa ci doar placa să trimită date către LCD: pinul RX al LCD-ului se va conecta la pinul 8 (UART_TX) al plăcii.

Programul necesar funcționării sistemului este scris tot în limbajul de programare Python și utilizează bibliotecile smbus (necesară comunicației I2C) și serial (necesară comunicației seriale).

import smbus

import time

import serial

Următoarea secțiune deschide și configurează portul serial și inițializează comunicația I2C:

port = serial.Serial(‘/dev/ttyS0’,115200,timeout=3.0)

bus = smbus.SMBus(1)

Comunicația cu senzorul Si7021 se realizează cu ajutorul comenzilor directe de citire a registrelor interne a acestuia. Pentru mai multe detalii puteți consulta și materialul Build a Hygrometer at Home Using Raspberry Pi and SI7021.

bus.write_byte(0x40, 0xF5)

time.sleep(0.3)

data0 = bus.read_byte(0x40)

data1 = bus.read_byte(0x40)

humidity = ((data0 * 256 + data1) * 125 / 65536.0) – 6

time.sleep(0.3)

bus.write_byte(0x40, 0xF3)

time.sleep(0.3)

data0 = bus.read_byte(0x40)

data1 = bus.read_byte(0x40)

cTemp = ((data0 * 256 + data1) * 175.72 / 65536.0) – 46.85

print “Relative Humidity is : %.2f %%” %humidity

print “Temperature in Celsius is : %.2f C” %cTemp

Programul va afișa și în consola de comenzi temperatura și umiditatea citită de la senzor:

8

Ultime secțiune a programului va realiza afișarea pe LCD. Comenzile de inițializare, ștergere a ecranului și poziționare a cursorului sunt specifice protocolului serial al LCD-ului. Pentru funcționalități suplimentare, inclusiv parte de afișare grafică, consultați manualul oficial.

port.write(b’\x7C\x00′)

port.write(b’\x7C\x18\x00′)

port.write(b’\x7C\x19\x00′)

time.sleep(1)

port.write(‘Temperatura: ‘)

port.write(‘%.2f’ % cTemp)

port.write(‘oC\r\n’)

time.sleep(1)

port.write(‘Umiditate: ‘)

port.write(‘%.2f’ % humidity)

port.write(‘%’)

port.close()

9

Programul se va executa ca și în cazurile precedente cu ajutorul comenzii (presupunând că programul a fost salvat sub denumirea termometru2.py):

python termometru2.py

Primii pași în utilizarea plăcii Raspberry Pi 3

Ce este Raspberry Pi?

Raspberry Pi este o placă de dezvoltare de tip SBC (Single Board Computer) –  un sistem de calcul nemodular implementat pe un singur cablaj electronic. Chiar dacă are dimensiuni reduse (85mm x 56mm), Raspberry Pi este un calculator complet permițând funcționalități obișnuite precum rularea unui sistem de operare (Linux sau Windows) și rularea de aplicații utilizator (jocuri, editoare de text, medii de programare, redarea de muzică și filme, aplicații de teleconferință, aplicații Internet). Diferențele între o placă Raspberry Pi și un calculator personal (PC) sau laptop constau atât în dimensiunea redusă a plăcii cât și în puterea mai mică de calcul a acesteia – nu are aceleași performanțe de calcul precum un PC desktop care are un cost și o dimensiune de câteva ori mai mari. Putem compara placa Raspberry Pi cu o tabletă sau cu un sistem de tip NetBook dar fără a dispune de ecran și tastatură. În plus, placa Raspberry Pi oferă posibilitatea de a conecta diverse componente electronice specifice sistemelor embedded: senzori, butoane, ecrane LCD sau pe 7 segmente, drivere de motoare, relee etc. Posibilitatea de a personaliza sistemele de programe (sistemul de operare, aplicațiile) și posibilitatea de interconectare cu alte componente electronice fac din placa Raspberry Pi un sistem de calcul ce poate sta la baza unor proiecte personale extrem de interesante și de puternice – un calculator ce poate fi integrat în sisteme electronice și mecanice proiectate și realizate de utilizator.

În ciuda dimensiunii reduse placa Raspberry Pi 3 dispune de periferice integrate numeroase acoperind complet funcționalitatea unui sistem de calcul (audio, video, porturi USB, conectivitate de rețea):

  • Procesor SoC pe 64 de biți din familia ARMv8-A, Broadcom BCM2837, ce lucrează la o frecvență de 1.2GHz și dispune de 4 nuclee de tip ARM Cortex-A53;
  • 1GB de memorie RAM (folosită și ca memorie video, partajată cu procesorul grafic);
  • Procesor grafic Broadcoam VideoCore IV 3D integrat pe aceeași pastilă de siliciu ca și procesorul principal;
  • Ieșire digitală video / audio HDMI;
  • Ieșire analogică video (composite video) / audio mixtă prin intermediul unei mufe jack 3.5mm;
  • Mufă de rețea RJ45 Ethernet 10/100 Mbit/s;
  • Conectivitate WiFi 802.11n;
  • Conectivitate Bluetooth 4.1 / BLE;
  • 4 porturi USB 2.0;
  • 40 de pini de intrare / ieșire (GPIO);
  • Slot card de memorie microSD (utilizat pentru instalarea sistemului de operare);
  • Conectori dedicați pentru cameră video (CSI) și afișaj (DSI);

1

Componente necesare utilizării plăcii Raspberry Pi 3

Pentru a pune în funcțiune placa Raspberry Pi 3 avem nevoie de următoarele componente suplimentare:

  • Cablu HDMI și un monitor / televizor cu intrare HDMI. În cazul în care nu dispunem de un monitor / televizor cu intrare HDMI putem utiliza un adaptor HDMI-DVI sau un adaptor HDMI-VGA, depinde de intrarea monitorului pe care îl utilizăm.
  • Alimentator de rețea cu ieșire de 5V, minim 2.5A și mufă microUSB. Este recomandată utilizarea alimentatorului oficial sau a unui alimentator de calitate care asigură o tensiune corectă și un curent suficient pentru alimentarea plăcii Raspberry Pi 3. În cazul în care utilizăm un alimentator ieftin putem distruge placa din cauza fluctuațiilor de tensiune sau putem întâmpina probleme în utilizare din cauza curentului insuficient debitat de sursa de tensiune.
  • Tastatură și mouse USB. Sunt necesare pentru instalarea și configurarea inițială a sistemului. Dacă, ulterior, se utilizează sistemul de la distanță, tastatura, mouse-ul și monitorul nu mai sunt necesare. O variantă mai simplă, și mai comodă, este utilizarea unui dispozitiv mixt tastură / touchpad fără fir.
  • Card de memorie microSD, capacitate minimă 8GB (16GB recomandat), clasă de viteză 10. Cardul de memorie va stoca sistemul de operare la fel ca și hard-disk-ul în cazul unui sistem de calcul de tip PC sau laptop. Este foarte importantă utilizarea unui card microSD de calitate și de viteză adecvată din cauză că utilizarea unui card de calitate îndoielnică poate conduce la probleme de funcționare extrem de neplăcute: blocări în funcționare, resetarea aleatorie a sistemului, pierderi de date etc. Dacă este posibil, se recomandă utilizarea cardului microSD oficial.
  • Dacă sistemul va fi utilizat într-o rețea locală pe cablu este necesar și un cablu de rețea UTP – patch-cord. Dacă se utilizează placa într-o rețea locală WiFi nu este necesar. Conectivitatea de rețea (conectivitatea Internet) nu este obligatorie pentru funcționarea plăcii dar este recomandată deoarece altfel nu se pot realiza actualizările de securitate ale sistemului de operare, nu se pot menține corect setările de dată și oră și, bineînțeles, se pierde o funcționalitate importantă a sistemului.
  • Opțional, dar recomandat, este utilizarea și a unei carcase pentru placa Raspberry Pi. Manipularea plăcii fără nici un fel de protecție poate conduce la deteriorarea acesteia datorită descărcărilor electrostatice (descărcarea sarcinii electrice statice a corpului uman în circuitul electronic prin atingerea componentelor conductoare a acestuia), a șocurilor mecanice și a murdăriei (praf, lichide, grăsimi).

 

Instalarea sistemului de operare

Următorul pas, necesar înainte de punerea în funcțiune a plăcii Raspberry Pi 3, este pregătirea cardului microSD pentru instalarea sistemului de operare. Placa Raspberry Pi 3 poate rula diverse distribuții ale sistemului de operare Linux și o versiune minimală a sistemului de operare Microsoft Windows 10 (prin versiune minimală înțelegem o variantă ce nu poate fi folosită ca platformă desktop ci doar ca platformă pentru aplicații – Windows 10 IoT Core). În continuare vom exemplifica instalarea distribuției Linux Raspbian, sistemul de operare oficial al plăcii Raspberry Pi, sistem de operare foarte ușor de utilizat și recomandat pentru începători. Alte sisteme de operare recomandate de fundația Raspberry Pi (producătorul plăcii Raspberry Pi) pot fi explorate în pagina de download a site-ului fundației.

În cazul în care utilizați cardul microSD oficial al plăcii Raspberry Pi instalarea sistemului de operare este foarte simplă deoarece cardul de memorie conține utilitarul NOOBS (New Out Of Box Software) ce facilitează instalarea diverselor sisteme de operare specifice plăcii Raspberry Pi. Pentru pornirea instalării sistemului de operare se inserează cardul în slotul microSD al plăcii și se pornește sistemul (trebuie să vă asigurați că aveți toate echipamentele conectate corect: tastatură, mouse, cablu HDMI). După inițializare utilitarul NOOBS vă permite alegerea sistemului de operare pe care doriți să-l instalați:

2

În cazul în care placa nu este conectată la Internet (prin cablu sau prin WiFi) singura opțiune de instalare va fi sistemul de operare Raspbian al cărui kit de instalare se află deja pe cardul de memorie. Toate celelalte sisteme de operare necesită conectivitate Internet pentru instalare. Conexiunea la Internet se poate realiza prin conectarea cu un cablu la o rețea ce oferă setări automate (DHCP) sau configurând accesul WiFi (opțiunea Wifi networks din partea de sus a ferestrei anterioare). După confirmarea sistemului de operat dorit, utilitarul NOOBS va instala automat sistemul de operare – acest proces durează câteva zeci de minute.

3

După finalizarea procesului de instalare sistemul va reporni și putem deja să lucrăm cu placa Raspberry Pi.

4

În cazul în care nu dispunem de un card microSD cu NOOBS preinstalat putem utiliza un card microSD de calitate pe care să copiem utilitarul NOOBS – se downloadează și se dezarhivează pe cardul microSD. Mai multe detalii puteți găsi și pe pagina utilitarului. După această operație instalarea decurge ca în cazul precedent. ATENȚIE!!! Cardurile de memorie ieftine produc o groază de bătăi de cap!

O alternativă la utilizarea programului NOOBS este copierea directă a sistemului de operare pe cardul microSD. Copierea nu se poate face direct, ca în cazul NOOBS, ci se realizează prin transferul unui fișier imagine cu ajutorului unui utilitar specializat, de exemplu: Etcher sau Win32DiskImager. Se downloadează imaginea de sistem de operare dorit (varianta LITE nu include interfața grafică) și se copiază pe cardul de memorie. După această operație cardul de memorie va conține sistemul de operare deja instalat, gata de utilizare. Cardul de memorie se poate introduce în slotul plăcii și se poarte porni sistemul.

56

 

Configurarea inițială a plăcii Raspberry Pi 3

Există două metode de configurare a plăcii Raspberry Pi: folosind utilitarele puse la dispoziție de interfața grafică a sistemului de operare Raspbian sau folosind utilitarele în linie de comandă (Terminal). Utilitarul principal de configurare se numește raspi-config  și poate fi accesat atât prin intermediul interfeței grafice cât și în linie de comandă.

7

8

În linie de comandă (se accează aplicația Terminal din bara de aplicații) se va introduce comanda:

sudo raspi-config

Comanda sudo permite execuția de utilitare sistem privilegiate (pot fi executate doar cu drepturi de administrare a sistemului). Chiar dacă contul de conectare inițial are drepturi depline asupra sistemului (dreptuti de administrator sau root), sistemul de operare nu permite execuția unor comenzi sau utilitare importante fără a fi precedate de comanda sudo pentru a preveni accidentele de configurare. Accesarea utilitarului în linie de comandă este utilă mai ales când sistemul este administrat de la distanță prin intermediul utilitarului ssh (a se vedea secțiunea următoare).

9

Prin intermediul utilitarului raspi-config se pot configura majoritatea setărilor de sistem ale plăcii Raspberry Pi dar vă recomandăm următoarele setări esențiale pentru a putea lucra mai departe:

  • Modificarea credențialelor implicite ale sistemului. Datele de conectare implicite ale sistemului Raspbian sunt: utilizator: pi / parolă: raspberry . Se recomandă modificarea parolei implicite pentru ca sistemul să nu fie accesat în mod neautorizat. Notați noua parolă, fără aceasta este posibil să nu mai puteți accesa sistemul și să trebuiască să reinstalați sistemul de operare.

 10

  • Realizați setările de rețea pentru ca placa să se poată conecta la Internet. Conexiunea la Internet este importantă pentru funcționarea corectă a plăcii. Cel mai simplu este să configurați conexiunea WiFi accesând icon-ul specific din bara de aplicații:

11

Dacă folosiți o conexiune pe cablu aceasta se configurează în mod automat dacă sistemul este introdus într-o rețea ce oferă DHCP.

  • Realizați instalarea update-urilor pentru pachetele software din distribuție pentru a vă bucura de ultimele facilități oferite de sistemul de operare Raspbian și pentru a beneficia de corecțiile de securitate. Pentru a face acest lucru se vor tasta în aplicația Terminal următoarele comenzi:

 

sudo apt-get update

sudo apt-get dist-upgrade

12

  • Activați serviciile de acces la distanță dacă doriți să utilizați placa fără periferice proprii (tastatură, mouse și monitor). Explicarea utilizării acestora se va face în următoarea secțiune. Cele mai cunoscute programe de acces la distanță sunt VNC (pentru accesul în mod grafic) și ssh (pentru accesul în linie de comandă). Ambele sunt instalate implicit în distribuția Raspbian și pot fi activate prin intermediul utilitarului raspi-config.

13

14

 

Utilizarea plăcii Raspberry Pi 3 de la distanță

De multe ori este mai comod sau pur și simplu natura proiectului impune accesul la distanță pentru utilizarea plăcii Raspberry Pi. Prin acces la distanță nu se înțelege neapărat faptul că placa se află la mare distanță ci că nu este accesată de la o tastatură și un monitor direct conectate. În acest fel putem utiliza placa fără a bloca un set de periferice dedicate.

Pentru a putea să ne conectăm la placa Raspberry Pi prin intermediul rețelei este necesar să cunoaștem adresa IP a acesteia. Dacă alocarea adreselor IP în rețeaua locală în care se utilizează placa se realizează în mod static este suficient să ne notăm adresa alocată după instalarea sistemului de operare utilizând comanda ifconfig în aplicația Terminal.

15

Dacă placa se conectează într-o rețea locală ce alocă dinamic adresele IP asta înseamnă că la fiecare repornire este posibil ca adresa IP să se modifice și nu avem altă posibilitate decât să ”scanăm” rețeaua pentru a descoperi ce adresă a fost alocată pentru placa Raspberry Pi. Scanarea se face cu aplicații specifice, de exemplu: Angry IP Scanner sau nmap.

După instalare, aplicația Angry IP Scanner permite verificarea întregii plaje de adrese dintr-o rețea locală și raportează ce adrese IP sunt active (sunt alocate) și ce servicii rulează sistemele de calcul respective:

16

Pentru accesul la distanță în linie de comandă se utilizează programul ssh ce permite deschiderea unei sesiuni de tip terminal de pe un alt sistem de calcul. Este necesară instalarea unui client ssh pe sistemul de pe care se va face accesul. Cel mai cunoscut client ssh pentru Windows este putty, sistemele Linux au clientul ssh instalat implicit:

17

Pentru accesul la distanță beneficiind de interfața grafică pusă la dispoziție de sistemul de operare vom utiliza programul VNC. La fel ca și în cazul ssh este necesară instalarea pe sistemul de pe care se face accesul a unui client specific. Unul dintre cei mai cunoscuți clienți VNC este RealVNC:

18

Cum putem securiza un sistem Raspberry Pi?

Suntem obișnuiți să considerăm placa Raspberry Pi un sistem de dezvoltare a cărui scop este unul strict funcțional la fel ca și în cazul unei plăci echipate cu un microcontroler. Uităm adesea că avem de a face cu o placă ce rulează un sistem de operare și care necesită un set de reguli de securitate asemănătoare unui sistem de calcul de uz general (desktop sau server). În momentul în care integrăm placa de dezvoltare într-un proiect real, mai ales într-un proiect cu conectivitate Internet, lipsa implementării unor măsuri de securitate compromite fără discuție scopul proiectului – degeaba funcțional sistemul se comportă corect atâta timp cât el poate fi afectat foarte ușor de incidente malițioase sau accidente de utilizare.

Există multe documentații ce dezbat acest subiect și parcurgerea lor poate să creioneze mai bine dimensiunea și seriozitatea problemei:

Securing Your Raspberry Pi: From Passwords to Firewalls

http://www.makeuseof.com/tag/securing-raspberry-pi-passwords-firewalls/

IoT Security: Tips to Protect your Device from Bad Hackers

https://www.hackster.io/charifmahmoudi/iot-security-tips-to-protect-your-device-from-bad-hackers-768093

Make your Raspberry Pi more secure

http://iot-projects.com/index.php?id=make-your-raspberry-pi-more-secure

Securing Your Raspberry Pi

https://www.madirish.net/566

How to set up a secure Raspberry Pi web server, mail server and Owncloud installation

https://www.pestmeester.nl/

Raspberry Pi Firewall and Intrusion Detection System

http://www.instructables.com/id/Raspberry-Pi-Firewall-and-Intrusion-Detection-Syst/

Setting up a (reasonably) secure home web-server with Raspberry Pi

https://mattwilcox.net/web-development/setting-up-a-secure-home-web-server-with-raspberry-pi

În cadrul proiectului de față vom structura regulile de securitate specifice unei plăci Raspberry Pi în trei categorii dictate de nivelul la care se aplică:

  • Securitate fizică
  • Reguli minimale de operare
  • Instrumente suplimentare de securitate

 

Securitatea fizică a unei plăci Raspberry Pi

Fără a avea intenția de a cădea în desuet trebuie subliniată importanța integrității fizice a sistemului de calcul. Degeaba asigurăm o securitate logică impecabilă dacă din punct de vedere fizic sistemul este amenințat de incidente de funcționare electrică sau mecanică. Unele dintre cele mai importante reguli ce trebuie respectate în utilizarea plăcii Raspberry Pi sunt:

  • Asigurarea unei surse de alimentare stabilizată și de putere electrică suficient de mare. Nu se recomandă utilizarea unor surse de tensiune ieftine. În cazul în care sistemul asigură o funcționalitate critică (controlul unei centrale termice sau a unui sistem de securitate) este recomandată utilizarea suplimentară a unui sistem UPS. Se recomandă utilizarea alimentatorului oficial al plăcii de dezvoltare:

2

https://www.robofun.ro/raspberry-pi-si-componente/alimentator-raspberry-pi-2.5-a

  • Utilizarea unei carcase este absolut necesară. Această are rolul de proteja placa de dezvoltare de praf și alte mizerii dar și de a preîntâmpina distrugrea acesteia din cauza unei descărcări electrostatice. Improvizarea unei învelitori de carton sau din alte materiale moi nu este recomandă. Se poate alege o variantă potrivită în funție de domeniul de utilizare a sistemului final:

3

https://www.robofun.ro/raspberry-pi-si-componente/raspberry-cutii

  • Utilizarea unui radiator sau / și a unui ventilator pentru microprocesorul plăcii de dezvoltare nu se face doar în cazul forțării frecvenței procesorului (overclocking). Menținerea unei temperaturi scăzute pentru procesor crește durata de funcționare a acestuia și crește fiabilitatea sistemului final.

4

https://www.robofun.ro/raspberry-pi-si-componente

  • Ignorată adesea, componenta ce stochează sistemul de operare al plăcii de dezvoltare – cardul de memorie – este un element extrem de important pentru buna funcționare a sistemului final. Carduri cu viteză mică de acces, uzate sau cu defecte de fabricație conduc la probleme ce pot fi anevoios de diagnosticat și crează multe bătăi de cap.

5

 

Reguli minimale de operare

Aceste reguli trebuie implementate indiferent de scopul sistemului (dezvoltare sau proiect operațional) fiind esențiale în operare eficientă a plăcii de dezvoltare Raspberry Pi și reprezentând un nucleu de bune practici aplicabil pentru sisteme de calcul diverse (de la routere WiFi până la servere):

  • Schimbarea datelor de conectare implicite. Minimal se recomandă schimbarea parolei utilizatorului pi cu ajutorul comenzii passwd dar mult mai bine este crearea unui cont utilizator nou și ștergerea contului pi. În acest fel sistemul nu poate fi accesat utilizând date de conectare bine cunoscute.
  • Utilizarea versiunii potrivite a sistemului de operare. Pentru placa de dezvoltare Raspberry Pi sunt disponibile mai multe variante (distribuții) ale sistemului de operare Linux. Fiecare dintre aceste variante are un anumit specific ce este potrivit unui anumit domeniu de utilizare. Chiar distribuția oficială a plăcii, distribuția Raspbian, are două versiuni: Raspbian Jessie with PIXEL și Raspbian Jessie Lite (cea din urmă nu include interfața grafică ci doar consolă de tip linie de comandă) – dacă sistemul final nu va include un ecran grafic este o risipă de resurse să se utilizeze versiunea completă (with PIXEL). În plus, un sistem de operare încărcat (cu multe pachete software instalate) prezintă mai multe riscuri de securitate.

6

(instalarea interfeței grafice doar pentru a controla sistemul de la distanță prin intermediul VNC este o opțiune extrem de infantilă, controlul cel mai bun al unui sistem Linux se realizează la nivel de linie de comandă – utilizați SSH)

  • Menținerea software-ului la zi. Instalarea ultimelor versiuni ale pachetelor software ce compun distribuția Linux nu este un moft ce ține de noi funcționalități introduse – apariția unor noi versiuni de programe este dictată de multe ori de rezolvarea unor probleme (bug-uri) de securitate.

!!! sudo apt-get update !!!

!!! sudo apt-get upgrade !!!

  • Dezinstalarea sau dezactivarea pachetelor software nefolosite. Fiecare pachet software este un posibil furnizor de probleme de securitate. Dezinstalarea pachetelor neutilizate este una dintre cele mai bune soluții. O completare a acestei reguli constă în dezactivarea serviciilor neutilizate (de exemplu, serviciul SSH reprezintă un risc ridicat de securitate, este recomandată oprirea acestui serviciu dacă nu îl utilizăm). O listă a serviciilor (a programelor ce pornesc odată cu sistemul de operare) se poate obține cu ajutorul comenzii:

sudo service –status-all | grep +

dezactivarea unui serviciu se va face cu ajutorul comenzii:

sudo systemctl disable nume_serviciu

  • Configurarea resurselor hardware în conformitate cu scopul sistemului. Chiar dacă în sine o resursă hardware, activată și neutilizată, nu implică o vulnerabilitate de securitate, este bine să avem activate doar resursele hardware utilizate (aici vorbim de porturile I/O, I2C, SPI, port serial etc.). Acest lucru se poate configura cu ajutorul comenzii:

sudo raspi-config

7

Un exemplu suplimentar îl reprezintă memoria plăcii de dezvoltare, este recomandată micșorare memoriei alocate procesorului grafic dacă nu utilizăm interfața grafică eliberând astfel mai multă memorie pentru CPU (se poate face acest lucru din Advanced -> Memory Split).

8

Instrumente suplimentare de securitate

În cele ce urmează vom prezenta o serie de programe care, utilizate corect, pot crește nivelul de securitate a unui sistem Raspberry Pi.

9

Firewall/iptables

este un mecanism intern al sistemului de operare ce permite filtrarea comunicațiilor de rețea. Filtrarea se realizează după reguli încadrate în trei mari categorii: INPUT – conexiuni de rețea de intrare, OUTPUT – conexiuni de rețea de ieșire, FORWARD – conexiuni de rețea ce traversează sistemul. Cu ajutorul acestui mecanism se poate decide ce conexiuni de rețea va accepta sistemul nostru, de la ce adrese, ce servicii (ce porturi) sunt accesate etc. De exemplu, următoarele două instrucțiuni:

sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j A

CCEPT

sudo iptables -A INPUT -j REJECT

vor avea ca efect acceptarea conexiunilor de la adresa IP xxx.xxx.xxx.xxx și rejectarea oricărei alte conexiuni – sistemul nostru va putea fi accesat doar de la adresa IP indicată. Aceasta este o practică foarte bună dacă adresele sistemelor cu care comunică sistemul nostru sunt fixe. Pentru a lista toate regulile de filtrare se poate folosi comanda:

sudo iptables -L

Fail2ban – este un utilitar ce permite blocarea comunicației de rețea cu o anumită adresă IP în urma activității malițioase generate de la acea adresă: mai multe încercări de conectare la distanță nereușite, scanarea de vulnerabilități de la distanță ș.a.m.d. Funcționarea acestuia se bazează pe scanarea fișierelor jurnal ale diverselor servicii sistem (SSH, web, mail) și, în cazul detectării unor activități rău intenționate, pe introducerea unei restricții temporare în sistemul iptables.

10

Pentru utilizare primul pas este instalarea pachetului software:

sudo apt-get install fail2ban

După care se va edita fișierul /etc/fali2ban/jail.local și se vor introduce reguli de supraveghere. Următorul bloc este un exemplu bun pentru serviciul SSH (orice adresă IP cu trei încercări nereușite de conectare va fi blocată timp de 15 minute, excepție făcând adresele locale din clasa 192.168.0.0/16):

[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]
logpath = /var/log/auth.log
maxretry = 3
bantime = 900
ignoreip = 192.168.0.0/16

Pentru ca modificările în fișierul de configurare să aibă efect vom reporni serviciul:

sudo /etc/init.d/fail2ban restart

Mai multe informații despre programul fail2ban puteți găsi la adresa:

http://www.fail2ban.org/wiki/index.php/Main_Page

11

rkhunter & chrootkit – sunt două programe menite să scaneze sistemul împotriva unor aplicații malițioase (rootkit-uri). Chiar dacă incidența infectării cu aplicații de tip virus este mică în cazul sistemelor Linux asta nu înseamnă că nu există amenințări la adresa sistemului de fișiere local. Rootkit-urile sunt programe, cel mai adesea rău intenționate, care modifică fișiere sistem ascunzând alte aplicații sau permițând accesul de la distanță unor persoane neautorizate. De cele mai multe ori deținătorul sistemului nici nu e conștient de infectarea acestuia. Cele două aplicații verifică integritatea fișierelor sistem și detectează aplicațiile de tip rootkit. Instalarea aplicațiilor se face cu ajutorul comenzii:

sudo apt-get install chkrootkit rkhunter libwww-perl

Rularea aplicației chkrootkit se face cu ajutorul comenzii:

sudo chkrootkit

12

Aplicația rkhunter se poate utiliza cu ajutorul comenzilor:

sudo rkhunter –update

sudo rkhunter –check

13

logwatch – este o aplicație de monitorizare și raportare pentru fișierele jurnal sistem (log-uri). Chiar dacă este un instrument pasiv (de monitorizare), utilizarea acestuia poate preveni foarte multe incidente de securitate prin alertarea timpurie a deținătorului sistemului. Instalarea acestui program se face cu ajutorul comenzii:

sudo apt-get install logwatch

14

După instalare aplicația logwatch va rula zilnic și va raporta prin email către administratorul sistemului (utilizatorul root) sumarul fișie

relor jurnal sistem. Ajustarea parametrilor de funcționare se poate face prin editarea fișierului /usr/share/logwatch/default.conf/logwatch.conf . Testarea aplicației se poate face cu ajutorul comenzii:

sudo logwatch –range=today

 

Instrumentele software prezentate nu reprezintă decât câteva exemple de aplicații ce pot ajuta utilizatorii să mențină un nivel de securitate adecvat pentru sistemele lor Raspberry Pi. Există și alte aplicații ce pot fi utilizate în funcție de scopul și domeniul de utilizare a sistemului. Vă recomandăm încă două aplicații interesant de explorat:

Snort – sistem de detecție și prevenție a intruziunilor (IDPS), foarte util în cazul sistemelor de tip gateway.

https://www.snort.org/

ClamAv – sistem open-source antivirus, necesar în cazul implementării unor servere de fișiere.

https://www.clamav.net/

Cum putem partaja fișiere în rețea utilizând o placă Raspberry Pi?

Partajarea de fișiere în rețea este necesară în mai multe situații: proiecte multi-sistem ce partajează același sistem de fișiere (calcul paralel, redundanță a serviciilor, acces concurent la o colecție de date), segregare funcțională în cadrul unui serviciu multi-sistem sau pur și simplu disponibilitatea unor fișiere către mai multe sisteme de calcul (server de fișiere). Există mai multe metode prin care o placă Raspberry Pi poate face disponibile fișiere locale prin intermediul rețelei. Lecția de față prezintă două dintre acestea: prin intermediul serverului SSH și prin intermediul serverului SAMBA.

Partajarea de fișiere prin intermediul serviciului Secure Server Shell

Serviciul SSH este gândit pentru a putea accesa de la distanță un sistem Linux la nivel de consolă (linie de comandă). Pe lângă conectarea la consola sistemului serviciul SSH permite și transferul de fișiere prin intermediul componentei SCP (Secure Copy Protocol) – componentă care se află în spatele posibilității de a partaja fișiere în rețea. Această modalitate de partajare este specifică sistemelor Linux, cu alte cuvinte putem partaja fișiere între mai multe plăci Raspberry Pi sau între o placă Raspberry Pi și alte sisteme ce rulează sistemul de operare Linux. Există diverse utilitare ce expun această facilitate altor sisteme de operare dar în cadrul acestei lecții ne vom limita la sistemul de operare Linux.

Pentru mai multe informații legate de funcționarea serviciului SSH se pot vedea și:

Raspberry Pi – Remote Access

https://www.raspberrypi.org/documentation/remote-access/

Adafruit’s Raspberry Pi Lesson 6. Using SSH

https://learn.adafruit.com/adafruits-raspberry-pi-lesson-6-using-ssh/

Sistemul care partajează fișierele în rețea (sistemul server) trebuie să aibă serverul de SSH pornit (pachetul software SSH este instalat implicit în distribuția Rasbpian dar nu pornește în mod automat din motive de securitate):

sudo /etc/init.d/ssh start

Pentru a configura pornirea automată a serviciului la restartarea sistemului putem utilitarul raspi-config sau putem utiliza comanda:

sudo systemctl enable ssh

Pe sistemul care va accesa fișierele în rețea (sistemul client) este nevoie să instalăm pachetul sshfs (SSH File System):

sudo apt-get install sshfs

Pentru a conecta un director la sisteme de fișiere local vom utiliza comenzile:

mkdir director_nou

sshfs user@xxx.xxx.xxx.xxx: director_nou

unde user este utilizatorul de pe sistemul server și xxx.xxx.xxx.xxx adresa de rețea a sistemului server. În directorul nou creat și conectat la sistemul server se va mapa (implicit) directorul home al utilizatorului user. Dacă dorim să mapăm un alt director se va completa comanda (după 🙂 cu calea către acel director dar, atenție, utilizatorul cu care ne conectăm trebuie să aibă drepturile adecvate asupra acelui director.

Pentru a deconecta legătura dintre sisteme se va utiliza comanda:

umount director_nou

În cele prezentate până acum am arătat o modalitate foarte simplă de partajare de fișiere între două sisteme Linux (oricare dintre ele, sau amândouă, putând fi plăci Raspberry Pi). Totuși, pentru a crea un server de fișiere într-o rețea locală, o soluție mult mai robustă este utilizarea serviciului SAMBA – serviciu ce permite partajarea de fișiere și de dispozitive de tip imprimantă cu sisteme ce rulează diverse sisteme de operare (în special Windows). Prin intermediul instalării serviciului SAMBA pe o placă Raspberry Pi putem partaja în rețea dispozitive de stocare de mare capacitate (hard-disk-uri USB de exemplu) obținând astfel dispozitive de stocare de rețea la un preț accesibil – dispozitivele hardware dedicate de acest tip au un cost destul de mare…

2

Pentu mai multe detalii legate de serviciul SAMBA puteți consulta și:

Samba – Wikipedia

https://en.wikipedia.org/wiki/Samba_(software)

What is Samba?

https://www.samba.org/samba/what_is_samba.html

 

Partajarea de fișiere prin intermediul serviciului SAMBA

Serverul SAMBA nu este instalat implicit și din acest motiv primul pas este instalarea pachetelor aferente:

sudo apt-get install samba

Dacă dorim să partajăm în rețea unități de stocare ce au fost formatate NTFS (sistem de fișiere specific ultimelor versiuni ale sistemului de operare Windows) este necesar să instalăm suportul pentru acest tip de sistem de fișiere pentru a putea conecta aceste unități la placa Raspberry Pi:

sudo apt-get install ntfs-3g

Pentru a defini partjarea dorită vom edita fișierul /etc/samba/smb.conf și vom adăuga la sfârșit:

[Share]

comment = share

path = /calea/catre/directorul/partajat

writeable = yes

only guest = yes

create mask = 0777

directory mask = 0777

browseable = yes

public = yes

unde share va fi numele sub care vom vedea partajarea și /calea/catre/directorul/partajat este calea completa a directorului ce urmează a fi partajat (poate fi calea către locul unde am montat drive-ul USB).  Salvăm și pornim serverul SAMBA:

sudo /etc/init.d/samba start

Dacă dorim pornirea automată a serverului la repornirea sistemului:

sudo systemctl enable samba

De pe un sistem de calcul ce rulează Windows, din aceiași rețea locală ca și sistemul Raspberry Pi, vom vedea imediat în Network sistemul Raspberry Pi și vom putea utiliza fișierele partajate. Configurația precedentă permite accesul la fișierele partajate fără nici un fel de autentificare (utilizator/parolă).

3

4

În cazul în care dorim să partajăm anumite directoare în mod restricționat trebuie să parcurgem următorii pași:

Creăm un grup de utilizatori smb:

sudo groupadd smb

Adăugăm un utilizator acestui grup (poate să fie utilizatorul implicit pi sau un alt utilizator):

sudo adduser pi smb

Stabilim o parolă pentru accesul în rețea:

sudo smbpasswd -a pi

Edităm fișierul /etc/samba/smb.conf și adăugăm la final:

[Share2]

comment = share2

path = /calea/catre/directorul/partajat

writeable = yes

only guest = no

create mask = 0777

directory mask = 0777

browseable = yes

public = no

Repornim serverul de SAMBA:

sudo /etc/init.d/samba restart

Acest nou director partajat va fi accesibil doar prin introducerea numelui de utilizator și a parolei stabilite.

5

Configurațiile precedente (prezentate pentru serviciile SSH și SAMBA) au fost testate pe plăci Raspberry Pi rulând Raspbian GNU/Linux 8 (jessie), kernel 4.4.45-v7+, sshfs 2.5-1 și samba 2:4.2.14+dfsg-0+deb8u2.

Pentru mai multe informații despre configurarea serviciului SAMBA pe o placă Raspberry Pi se pot parcurge și următoarele materiale:

Raspberry Pi Bit-Torrent/DLNA/SAMBA Server Part 2: Setting up Samba

http://joerpi.blogspot.ro/2013/06/raspberry-pi-bit-torrentdlnasamba.html

How to Turn a Raspberry Pi into a Low-Power Network Storage Device

http://www.howtogeek.com/139433/how-to-turn-a-raspberry-pi-into-a-low-power-network-storage-device/

How-To: Share a folder with a Windows computer from a Raspberry Pi

http://raspberrypihq.com/how-to-share-a-folder-with-a-windows-computer-from-a-raspberry-pi/