Join IoT Fest Bucharest and awaken the potential of the Internet of Things in Romania!

The IoT Fest Bucharest, which will be on 13 May 2017 in NOD makerspace, is a one-day event organized by the community of IoT creators supported by hub:raum Kraków and Telekom Romania. It brings together IoT companies and startups, universities and students, hardware geeks and every IoT creator to share knowledge, experience and visions about technological and business opportunities of the Internet of Things in Romania.

VISIT EVENT WEBSITE AND REGISTER NOW!

IoT Fest Bucharest consists of 3 streams:

PRESENTATIONS
The main part of the IoT Fest are presentations provided by startups and experts in the field of the Internet of Things. The lectures answer the hard questions that IoT businesses ask every day. The speakers say about difficulties, problems, challenges, successes and failuers in their IoT business and how they dealt with them.

IOT SHOWROOM
It is a great chance for startups, students and hackerspaces to show their IoT projects and prototypes to wider audience.

IOT WORKSHOPS
Workshops give the possibility to gain some practical knowlegde in the field of the Internet of Things. Turn your visions into reality under the watchful eyes of our specialists!

For Whom?

  • For IoT startups on different stages of business and product development.
  • For those who would like to learn more, verify their ideas on their projects, share thoughts and experience, and to meet people who have common interests.
  • For scientific circles and students of technical studies who would like to verify their knowledge and ideas or to show their projects to wider audience on fairs.
  • For IoT companies looking for new business opportunities and contacts.
  • For hardware geeks and everyone who just wants to learn more about the Internet of Things and connectivity.

Clear your calendars, save the date and join IoT Fest in Bucharest. IoT creators and hub:raum Kraków invite all IoT enthusiasts, startups, companies and students to celebrate this important day together!

VISIT EVENT WEBSITE AND REGISTER NOW!

See what happened at the previous IoT Fest in Kraków:

See you soon!

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

NASA hackathon in Bucuresti, Cluj si Timisoara

un articol de Alin Mechenici

In 2014 cand am luat pentru prima oara contact cu hackathonul NASA nu am stiut ca este cel mai mare din lume. Doi ani mai tarziu am organizat editia din Suedia, iar atunci am ca este si in Romania, organizata de un prieten cu care nu mai tinusem legatura. Anul acesta, 29-30 aprilie, Clujulul este la a doua editie iar Bucuresti si Timisoara au aparut pe harta #SpaceApps, alaturi de alte 175 de locatii in lume.

SPACEAPPS_ROv2
Pe 20 și 21 aprilie vor avea loc pre-evenimente, ale căror scop este de a-i familiariza pe participanți cu noțiunea de hackathon, cu seturile de date și unelte NASA, cu conceptele și abilitățile de rezolvare a problemelor dar și de a le oferi posibilitatea să interacționeze și să se cunoască mai bine.

Invitatul special al pre-evenimentului din București este dl. Dorin Dumitru Prunariu, primul și singurul cosmonaut român care a zburat vreodată în spațiul cosmic.

Competiția se adresează unui public cu nivel de experiență variat și din diverse domenii: elevi, studenți, programatori, oameni de știință, profesori, tehnologi, artiști, designeri, ingineri, storytellers, studenți sau antreprenori.

Iată experiența unuia dintre participanții editiei 2016 din Suedia, într-un scurt video:

Temele competiției din acest an, trasate de NASA, sunt cinci la număr, centrate în jurul planetei noastre: The Earth and Us, Planetary Blues, Warning! Danger Ahead!, Our Ecological Neighborhood, Ideate and Create! Provocările din fiecare categorie, în număr total de 25, se regăsesc pe site-ul competiției.

Participanții își pot alege de aici o problemă pe care doresc să o rezolve în funcție de domeniu, gradul de dificultate și interese. De asemenea, participanții selectează locația unde vor să participe la hackathon iar înscrierea este gratuită.

• București: 2017.spaceappschallenge.org/locations/bucharest

• Cluj-Napoca: 2017.spaceappschallenge.org/locations/space-apps-cluj-napoca/

• Timișoara: 2017.spaceappschallenge.org/locations/timisoara/

După hackathon-ul care va dura 48 de ore (29-30 aprilie), juriile locale vor desemna, pentru fiecare oraș în parte, maxim două proiecte ce vor fi trimise mai departe spre evaluare juriului internațional împreună cu câte un proiect desemnat ca fiind cel mai popular sau People’s Choice Award. Învingătorii vor fi invitați la o lansare NASA.

Space Apps Challenge este incubatorul de inovație al Agenției Aerospațiale Americane iar de la începuturile sale în 2012, International Space Apps Challenge a devenit cel mai mare hackathon (concurs de programare) la nivel mondial. În fiecare an mii de participanți din diverse domenii indiferent de nivelul de experiență, colaborează pentru a dezvolta soluții inovative, open-source, la probleme cu impact global, legate atât de explorarea spațială cât și de nevoile sociale planetare, folosind seturi de date puse la dispoziția publicului de către NASA. Soluțiile rezultate variază de la aplicații mobile la jocuri, hardware și multe altele.

NASA Space Apps Challenge Romania este rezultatul unui efort colaborativ la nivel national a: ClujHUB, Coworking Timișoara, RICAP, SprintPoint Techcelerator, TechFest, Timișoara Startup Hub.

Website-ul local al evenimentului este: 48h.space si 48h.space/ro

Sper că v-am convins să fiți parte din această experiență.

Cu drag, Alin Mechenici

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

Norul udă ghivecele cu flori

Chiar dacă un sistem automat de menținere a umidității pentru ghivecelor cu flori rezolvă problema ”am uitat să ud florile” nu rezolvă și problema monitorizării exacte a umidității (necesare pentru diverse tipuri de plante mai pretențioase). Adăugarea unui sistem de jurnalizare a umidității permite vizualizarea și determinarea punctului de umiditate optimă pentru diverse astfel de tipuri de plante. În cadrul proiectului de față ne propunem să completăm sistemul prezentat în proiectul precedent (Arduino udă ghivecele cu flori) cu un sistem de monitorizare și comandă online. Pentru acest lucru vom utiliza serviciul online (de tip ”nor”) Adafruit IO. Serviciul Adafruit IO este un serviciu specializat IoT, gratuit, ce pune la dispoziția utilizatorilor atât posibilitatea jurnalizării valorilor preluate de la diverși senzori dar și transmiterea de comenzi către dispozitivele IoT și chiar legătura automată între partea de achiziție și comandă (reguli de conducere automată).

Pentru implementarea sistemului prezentat în această lecție este necesară crearea unui cont pe platforma Adafruit IO. După conectare trebuie să navigăm în meniul Settings și să ne notăm AIO Keys (cheia de autentificare) care va fi folosită, împreună cu denumirea contului creat, în programul sistemului.

Din punct de vedere hardware sistemul va avea în plus un modul Adafruit HUZZAH ESP8266 ce va asigura conectivitatea de rețea necesară accesării serviciului cloud.

2Astfel componentele necesare implementării sistemului sunt: Arduino Uno, shield drivere de motoare L298, senzor umiditate sol, pompă de apă micro, ecran LCD grafic Nokia (opțional) și modul Adafruit HUZZAH ESP8266. Alimentarea sistemului se va face de la un alimentator de rețea de 9V conectat la placa de dezvoltare Arduino Uno. Alimentatorul va alimenta atât componentele de comandă (placă de dezvoltare, modul WiFi, ecran LCD, senzor de umiditate sol) cât și pompa de apă (prin intermediul shield-ului L298 ce trebuie să aibă jumperul de alimentare comună conectat).

Conexiunile între componentele sistemului sunt următoarele:

  • Pompa de apă se conectează la shield-ul L298 pe canalul MOTOR2:

3

  • Senzorul de umiditate sol va utiliza pinul A0 pentru a transmite valoarea achiziționată către placa de dezvoltare, pinul A2 pentru alimentare și un pin de GND.

4

  • Ecranul LCD va utiliza următorii pini pentru conectare: LED – 5V (prin intermediul unei rezistențe de 220ohm), SCLK – D13, D/C – D8, RST – D7, SCE – A3 (nu mai putem folosi pinul D4 ca în cazul lecției precedente deoarece acest pin va fi utilizat de modul WiFi), GND – GND, Vcc – 3.3V.
  • Modulul WiFi Adafruit HUZZAH ESP8266 se va monta în soclul shield-ului L298 (soclu gândit pentru modul bluetooth dar compatibil și cu modulul WiFi utilizat de noi) – ATENȚIE la polaritate – conectați pinul de GND al modului la pinul de GND al soclului.

5

Înainte de asamblarea sistemului modulul WiFi trebuie programat separat de programarea plăcii Arduino Uno. Pentru programare este necesară utilizarea unui cablu USB to TTL sau a unui conector FTDI. Pentru programarea și utilizarea modulului Adafruit HUZZAH este recomandată parcurgerea materialului următor: Adafruit HUZZAH ESP8266 breakout .

Programul pentru modulul WiFi are rolul de a transforma comunicația serială (de la placa Arduino Uno) în mesaje MQTT pentru platforma Adafruit IO. Programul a fost dezvoltat și testat cu Arduino IDE 1.8.1 având instalată extensia ESP8266 Community 2.3.0 și utilizează biblioteca Adafruit MQTT 0.17.0. În program trebuie personalizate datele de conectare la rețeaua WiFi locală (WLAN_SSID și WLAN_PASS) precum și datele de conectare la serviciul cloud Adafruit IO (AIO_USERNAME și AIO_KEY).

#include <ESP8266WiFi.h>

#include “Adafruit_MQTT.h”

#include “Adafruit_MQTT_Client.h”

#define WLAN_SSID       “

#define WLAN_PASS       “

#define AIO_SERVER      “io.adafruit.com”

#define AIO_SERVERPORT  1883

#define AIO_USERNAME    “

#define AIO_KEY         “

WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_USERNAME, AIO_KEY);

Adafruit_MQTT_Publish soilhumidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME “/feeds/soilhumidity”);

Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME “/feeds/onoff”);

void onoffcallback(char *data, uint16_t len) {

  String onoff_state = String(data);

  if (onoff_state==”ON”) Serial.println(“1”);

  else if (onoff_state==”OFF”) Serial.println(“0”);

}

void setup() {

  Serial.begin(115200);

  delay(10);

  Serial.println(F(“Adafruit MQTT NOR”));

  WiFi.begin(WLAN_SSID, WLAN_PASS);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);  }

  onoffbutton.setCallback(onoffcallback);

  mqtt.subscribe(&onoffbutton);

}

uint32_t x;

void loop() {

  MQTT_connect();

  mqtt.processPackets(100);

  if(Serial.available()){

    x=Serial.parseInt();

    soilhumidity.publish(x);

    }

  if(! mqtt.ping()) {

    mqtt.disconnect();

  }

}

void MQTT_connect() {

  int8_t ret;

  if (mqtt.connected()) {

    return;

  }

  uint8_t retries = 3;

  while ((ret = mqtt.connect()) != 0) {

        mqtt.disconnect();

       delay(10000);

       retries–;

       if (retries == 0) { while (1); }

  }

}

Programul pentru placa de dezvoltare Arduino Uno nu diferă foarte mult de varianta prezentată în proiectul precedent. Este necesară modificarea declarării obiectului LCD:

Adafruit_PCD8544 display = Adafruit_PCD8544(8, A3, 7);

declararea și configurarea comunicației seriale cu modulul WiFi:

#include “SoftwareSerial.h”

SoftwareSerial mySerial(2,4);

void setup()

{

  mySerial.begin(115200);

și de câteva completări în secțiunea loop():

void loop()

  int command = 0;

  int soilhumidity;

  digitalWrite(SOIL_VCC,LOW);

  mySerial.println(soilhumidity);

  display.println(millis()/1000);

  if(mySerial.available()){

    command = mySerial.parseInt();

  }

  if ((soilhumidity<500)||(command==1)) {

Programul ce rulează pe placa Arduino raportează serial către modulul WiFi valoarea umidității solului iar acesta raportează mai departe către serviciul cloud prin intermediul canalului soilhumidity. După prima execuție acest canal va apărea automat în interfața Adafruit IO.

6

În plus, sistemul va permite și comanda de la distanță a procesului de udare. Pentru acest lucru este nevoie să creăm manul în interfața Adafruit IO un canal denumit onoff. Acest canal va transmite către modulul WiFi comenzi de tipul ON / OFF, acestea vor fi retransmise către placa Arduino Uno ca și comenzi seriale de tip 1 / 0 și vor permite pornirea procesului de udare independent de valoarea umidității solului.

Pentru a putea transmite comenzile din interfața Adafruit IO putem crea o nouă consolă de comandă în secțiunea Dashboards. În această consolă de comandă putem plasa graficul de evoluție (Line Chart) a parametrului măsurat (umiditate sol) și un buton (Toggle) pentru comanda de udare.

7

În acest moment avem un sistem complet de urmărire și control la distanță a sistemului de udare – interfața web a serviciului Adafruit IO se poate accesa de oriunde de pe Internet.

Bineînțeles, sistemul propus poate fi îmbunătățit prin adăugarea mai multor parametrii de supravegheat (putem adăuga senzori de temperatură și umiditate a aerului, senzori de intensitate a luminii solare) completând astfel procesul de urmărire și control. Mai mult decât atât, serviciul Adafruit IO permite definirea de alarme de urmărire (avertizarea prin email când un parametru urmărit atinge un anume prag) sau chiar definirea de acțiuni asupra elementelor de comandă (putem implementa pragul de declanșare a procesului de udare la nivel de serviciu cloud).

Pentru mai multe detalii legate de funcționarea serviciului Adafruit IO puteți vedea și următoarele proiecte:

Monitor temperature & humidity from anywhere!

ESP8266 Power Meter Measure the DC power consumption of your devices!

Remote Control with the Huzzah + Adafruit.io

Log Light Levels to Adafruit IO

Track Your Treats: Halloween Candy GPS Tracker