Let’s PI: Zero to IoT

Apariția Raspberry Pi Zero a făcut disponibile funcționalitățile familiei Raspberry Pi la o dimensiune și un cost mult mai mici. La jumătatea dimensiunii unei plăci obișnuite Raspberry Pi, varianta Zero oferă un microprocesor BCM2835 la 1GHz frecvență de funcționare, 512MB memorie RAM, ieșire video mini HDMI, port micro USB OTG, conector cameră și toate facilitățile oferite de sistemul de operare Raspbian.

Singura problemă pentru a utiliza această variantă a plăcii Raspberry Pi este conectivitatea de rețea. Fără a apela la versiunea Zero W, ce oferă conectivitate WiFi, putem utiliza placa Raspberry Pi Zero în proiecte IoT fără nici un fel de problemă. Este recomandată achiziționarea unui kit ce include adaptoarele HDMI – mini HDMI și micro USB OTG – USB precum și bareta de pini deoarece ele sunt absolut necesare în utilizarea plăcii Raspberry Pi Zero. Pentru punerea în funcțiune mai sunt necesare și un card microSD pentru sistemul de operare, se recomandă un card de calitate, și un alimentator de 5V.

După copierea imaginii sistemului de operare pe cardul de memorie avem următoarele opțiuni pentru interacțiunea cu placa Raspberry Pi Zero:

  • Conectăm placa la un monitor cu intrare HDMI (prin intermediul adaptorului mini HDMI – HDMI) și la o tastatură USB (prin intermediul adaptorului micro USB – USB). Această variantă de utilizare ne permite utilizarea plăcii de dezvoltare dar nu oferă nici o facilitate de conectare la Internet.
  • Conectăm, prin intermediul adaptorului micro USB – USB, o placă de rețea USB. Interacțiunea cu placa Raspberry Pi Zero se va face în linie de comandă prin intermediul protocolului SSH (utilizând programul PUTTY de exemplu). Majoritatea plăcilor de rețea, mai ales cea indicată, vor fi văzute în mod automat de sistemul de operare Raspbian și nu vor necesita nici o operație de instalare / configurare suplimentară. Pentru a activa serviciul SSH încă de la prima pornire a plăcii este necesară creare unui fișier gol cu numele ssh pe cardul pe care copiem sistemul de operare (a se vedea și „Enable SSH when creating SD card”). Bineînțeles, se poate utiliza un adaptor de rețea WiFi în locul celui Internet dar probabilitatea ca acest tip de adaptoare să necesite operații suplimentare de instalare / configurare este mai mare, cu alte cuvinte nu ne vom putea conecta din prima la placă fără tastatură și monitor.
  • Este posibilă combinarea celor două soluții anterioare dar este necesară utilizarea unui hub USB – placa de dezvoltare are un singur port USB OTG și este necesară conectarea tastaturii și a adaptorului de rețea. Este o soluție ce complică destul de mult utilizarea plăcii, este de preferat achiziționarea unei plăci Raspberry Pi 3.

Vom exemplifica realizarea sistemului IoT utilizând cea de a doua opțiune: placa Raspberry Pi Zero, adaptor micro USB – USB și placă de rețea USB. Ca serviciu IoT vom utiliza serviciul gratuit Robofun IoT iar datele raportate vor proveni de la un senzor digital de temperatură și umiditate SHT11. Conectarea dintre senzorul digital și placa de dezvoltare se face în felul următor:

3

Senzorul se va alimenta la 3.3V, pinul SCK se va conecta la pinul 23 iar pinul DAT la pinul 18. Pentru configurarea și scrierea programului IoT ne vom conecta la placa Raspberry Pi Zero prin SSH utilizând Putty. Este recomandată aducerea la zi a pachetelor software:

# sudo apt-get update

# sudo apt-get upgrade

Programul va fi scris în limbajul Python și va utiliza biblioteca pi-sht1x, pentru instalarea acesteia vom executa:

# sudo apt-get install python3-pip

# pip3 install pi-sht1x

Testele au fost realizate sub Raspbian 9, kernel 4.14.34+, Python 3.5.3 și pi-sht1x 1.0.9. Programul utilizat este următorul (PiZeroIoT.py):

import RPi.GPIO as GPIO

from pi_sht1x import SHT1x

import urllib.request

DATA_PIN = 18

SCK_PIN = 23

with SHT1x(DATA_PIN, SCK_PIN, gpio_mode=GPIO.BCM) as sensor:

temp = sensor.read_temperature()

humidity = sensor.read_humidity(temp)

SENSOR1_TOKEN="…"

SENSOR2_TOKEN="…"

urllib.request.urlopen("http://iot.robofun.ro/api/v1/senzor/"+SENSOR1_TOKEN+"/input?value="+str(temp)).read()

urllib.request.urlopen("http://iot.robofun.ro/api/v1/senzor/"+SENSOR2_TOKEN+"/input?value="+str(humidity)).read()

Variabilele SENSOR1_TOKEN și SENSOR2_TOKEN trebuie completate cu datele obținute în urma definirii a doi senzori în cadrul platformei Robofun IoT. Pentru a executa programul în mod automat la anumite intervale de timp vom crea o intrare în fișierul de configurare a serviciului cron (/etc/crontab) de forma (execuție la 10 minute):

*/10 *  * * *   pi      python3 /home/pi/PiZeroIoT.py

După repornirea sistemului, fără a ne conecta la placă, programul se va executa în mod automat și vom putea vedea graficele pentru temperatură și umiditate în interfața serviciului IoT:

4

5

Cum să realizăm un repetor WiFi utilizând ESP8266

Dispozitivele de tip repetor sau amplificator WiFi (WiFi Repeater sau WiFi Extender) sunt utilizate pentru a crește aria de acoperire a rețelelor WiFi. În case sau clădiri de dimensiuni mai mari un singur dispozitiv de acces WiFi, oricât de performant ar fi, este greu să asigure semnal radio WiFi pe toată aria. Utilizarea mai multor dispozitive de acces WiFi independente ridică probleme destul de mari de administrare de rețea și de management a datelor de acces. Soluția mult mai simplă și mai ieftină este utilizarea dispozitivelor de tip repetor WiFi. Aceste dispozitive sunt diponibile comercial la prețuri variate și cu funcționalități și perfomanțe diverse. Totuși, dorim să vă propunem realizarea unui astfel de dispozitiv într-o manieră personală (și extrem de ieftină) utilizând o placă de dezvoltare bazată pe circuitul WiFi ESP8266. Acest circuit are marele avantaj de a putea funcționa simultan atât ca AP cât și ca client WiFi permițând implementarea funcționalității de repetor într-o manieră foarte simplă. Testele au fost realizate utilizând o placă de dezvoltare Adafruit Feather HUZZAH dar la fel de bine pot fi utilizate plăci precum NodeMCU, Sparkfun ESP8266 Thing sau chiar ESP-01.

Pentru a implementa funcționalitatea de repetor WiFi vom utiliza pachetul software esp_wifi_repeater. Pachetul poate fi modificat și recompilat după propriile dorințe înainte de încărcarea pe placa de dezvoltare dar pentru început se pot utiliza fișierele binare oferite de dezvoltatori pachetului (fișierele 0x00000.bin, 0x10000.bin și esp_init_data_default_v08_vdd33.bin din directorul firmware). Pentru încărcarea fișierelor binare se va utiliza utilitarul ESP8266 DOWNLOAD TOOL. După copierea utilitarului și a fișierelor binare pe calculatorul local se poate trece la încărcarea acestora în memoria plăcii. Înainte de apăsarea butonului START aveți grijă să completați adresele de încărcare a fișierelor binare, să selectați portul serial pe care este conectată placa de dezvoltare și, specific plăcii Adafruit Feather HUZZAH, să selectați dimensiunea memoriei flash 32Mbit.

3

După încărcarea în memorie a software-ului putem verifica inițializarea corectă a dispozitivului repetor WiFi cu ajutorul unui utilitar de conectare pe serială (de exemplu Putty). Viteza de conectare serială este 115200 baud.

4

Cea mai simplă modalitate de configurare a acestuia este prin intermediul interfeței web. Dispozitivul se poate configura și prin consola serială sau printr-o conexiune telnet pe portul 7777 dar aceste modalități sunt puțin mai dificile. Pentru a accesa interfața web este necesar să ne conectăm la AP-ul creat de dispozitiv (MyAP) și să accesăm adresa 192.168.4.1.

5

Conectarea la AP-ul dispozitivului se poate observa imediat în consola serială:

6

Interfața web de configurare permite introducerea datelor de acces a rețelei WiFi a cărui semnal dorim să-l extindem ca arie de acoperire (STA Settings) și datele de acces ale noului punct de acces (AP Settings). La finalizarea configurării dispozitivului vom putea face diferența între AP-ul inițial și noul AP (AP-ul repetor) deoarece vor avea denumiri și date de acces diferite. Performanțele oferite de AP-ul bazat pe circuitul ESP8266 nu sunt spectaculoase (maxim 8 clienți și rată de transfer de maxim 5Mbps) dar oferă o modalitate de extindere a ariei de acoperire WiFi extrem de simplă și ieftină. Aceaste dispozitive repetoare WiFi pot fi utilizate pentru rețele IoT sau pentru extinderea semnalului WiFi în spații deschise (parcele mari de teren de exemplu).

7

Dacă dorim ca repetorul WiFi să fie transparent (să nu definim un nou AP cu nume și date de acces proprii) se poate bifa opțiunea Automesh. În acest caz nu mai este necesar să completăm informațiile din secțiunea AP Settings – dispozitivul repetor va propaga semnalul WiFi sub numele rețelei WiFi originale (și datele de conectare vor fi identice). Facilitatea de Automesh permite crearea unei rețele de repetoare WiFi cu până la 5 niveluri permițând extinderea ariei de acoperire într-o manieră impresionantă.

8

Dacă apelăm la configurarea în consolă a dispozitivului repetor WiFi putem accesa funcții avansate implementate în pachetul software utilizat (a se vedea documentația oficială). Printre aceste funcții putem enumera:

  • Configurarea statică a setărilor pentru interfețele de rețea;
  • Definirea de rute (routes) personalizare – facilități de rutare avansată;
  • Definirea de reguli de dirijare a traficului (ACLs) – facilități de firewall;
  • Redirecționarea unor porturi – port mapping;
  • Facilități de raportare prin intermediul protocolului MQTT;

Controlul consumului – dacă tensiunea de alimentare scade sub un anume prag putem configura dispozitivul să intre într-o stare de consum redus.

Managementul conexiunii WiFi la ESP8266

Circuitul WiFi Espressif ESP8266 a reprezentat o evoluție importantă în universul plăcilor de dezvoltare în general dar și a comunității Arduino. Permițând conectivitate WiFi la un preț derizoriu și ușurință de programare și utilizare în cadrul sistemelor DIY, ESP8266 are o popularitate și o răspândire din ce în ce mai mare echipând plăci de dezvoltare diverse.

Facilitățile oferite de extensia ESP8266 pentru Arduino IDE includ conectarea la Internet prin intermediul unui AP, activarea ca un AP, funcționarea duală client WiFi și AP, utilizarea protocoalelor http și https, funcționarea ca server web sau server DNS ș.a.m.d. Toate aceste facilități oferite de circuitul ESP8266 fac din acesta un instrument extrem de util în cadrul proiectelor proprii. Una dintre problemele care apare totuși la construirea unui dispozitiv bazat pe circuitul ESP8266 este managementul datelor de conectarea la rețea. Dacă se dorește schimbarea datelor de acces la rețeaua WiFi (mutăm dispozitivul în altă locație sau modificăm infrastructura de acces la Internet) dispozitivul trebuie reprogramat. Chiar dacă luăm în calcul programarea OTA tot este necesară utilizarea unui sistem de calcul (PC sau laptop cu Arduino IDE instalat) pentru a modifica datele de acces (SSID și parolă).

Bineînțeles, este posibilă programarea unei interfețe web care să permită modificarea variabilelor corespunzătoare datelor de acces dar acest lucru este destul de consumator de timp și adaptarea codului pentru proiecte diverse este o sarcină repetitivă destul de anevoioasă. Din fericire există o bibliotecă software ce permite automatizarea acestui proces și ușurează foarte mult dezvoltarea noilor proiecte în care avem nevoie de modificarea parametrilor de funcționare fără a reprograma dispozitivul.

Această bibliotecă se numește WiFiManager și permite configurarea, prin intermediul unei interfețe web, a conexiunii WiFi în cazul în care configurarea implicită nu funcționează (interfața web de configurare se activează doar în cazul în care conectarea la rețea nu este posibilă cu datele de autentificare curente). Instalarea bibliotecii se face din Library Manager a mediului Arduino IDE. Testele au fost realizate pe o placă NodeMCU utilizând Arduino IDE 1.8.5 și extensia ESP8266 Community 2.4.1.

2

După instalarea bibliotecii facilitățile de configurare se includ în program inserând în cod secvențele următoare. La începutul programului se include biblioteca WiFiManager și dependințele acesteia:

#include <ESP8266WiFi.h>

#include <DNSServer.h>   

#include <ESP8266WebServer.h> 

#include <WiFiManager.h>

WiFiManager wifiManager;

În cadrul secțiunii setup() se înlocuiește codul obișnuit de conectare cu instrucțiunea:

wifiManager.autoConnect();

Execuția acesteia va conduce la conectarea la rețea dacă procesul de configurare a fost deja parcurs sau la blocarea programului și la pornirea interfeței de configurare web. Aceasta va fi accesibilă prin intermediul unui AP propriu sistemului, AP denumit ESPXXXXXX, la adresa IP 192.168.4.1 .

3

Interfața web permite configurarea și salvarea rețelei în care va funcționa dispozitivul, vizualizarea informațiilor hardware specifice plăcii de dezvoltare și resetarea acesteia.

4

5

Dacă conectivitatea de rețea nu este esențială în funcționarea dispozitivului – dispozitivul trebuie să funcționeze și fără conexiunea de rețea – putem adăuga următoarea instrucțiune pentru a defini un timp în care se așteaptă configurarea după care se trece mai departe la execuția normală a programului.

wifiManager.setConfigPortalTimeout(180);

În cazul în care dorim totuși să reluăm periodic tentativa de conectare la rețea, utilă de exemplu în cazul în care repornirea sistemului coincide cu indisponibilitatea AP-ului – datele de conectare sunt corecte dar în momentul în care se încearcă conectarea nu este disponibilă infrastructura, se poate insera o secvență de instrucțiuni, ca în exemplul de mai jos, în secțiunea loop():

if (WiFi.status() != WL_CONNECTED) wifiManager.autoConnect();

Pagina web de configurare poate fi pornită și în mod voit (la apăsarea unui buton de exemplu) prin intermediul instrucțiunii:

wifiManager.startConfigPortal();

O altă facilitate interesantă oferită de bibliotecă este posibilitatea de a adăuga în cadrul paginii de configurare a unor parametrii proprii ce vor fi salvați în memoria nevolatilă a circuitului ESP8266. Instrucțiunile de mai jos definesc o variabilă server ce permite memorarea adresei de rețea a unui server MQTT. Datele de configurat vor apărea în interfața web alături de configurația de acces în rețeaua WiFi.

WiFiManagerParameter custom_mqtt_server(“server”, “mqtt server”, mqtt_server, 40);

wifiManager.addParameter(&custom_mqtt_server);

mqtt_server = custom_mqtt_server.getValue();

6

Arduino Zombification

În ciuda simplității modului de programare oferit de mediul Arduino IDE și de familia de plăci Arduino există implementată o soluție ce permite utilizarea plăcilor de dezvoltare Arduino ca simple periferice USB fără a fi nevoie a înțelege modul de funcționare și programare a acestora. Prin încărcarea unui program gata scris placa Arduino se transformă într-un echipament „zombie” ce execută instrucțiunile primite prin conexiunea USB conform unui protocol standard.

Protocolul de zombificare a unei plăci Arduino se numește Firmata și este integrat ca suport software (bibliotecă + exemple) în Arduino IDE. Pentru instalare și utilizare puteți consulta materialul „Arduino: Installing Standard Firmata”. După încărcarea exemplului StandardFirmata.ino pe orice placă de dezvoltare Arduino, aceasta se va comporta ca un periferic USB pe care îl putem accesa de pe un sistem de calcul (PC sau chiar Raspberry Pi). Accesul intermediat de protocolul Firmata face disponibile toate perifericele hardware ale plăcii de dezvoltare (pini I/O, convertor analog/numeric, magistrale I2C, SPI, pini de comandă PWM) programelor ce rulează pe sistemul de calcul la care este conectată placa. Biblioteca Firmata oferă exemple pentru majoritatea limbajelor de programare: .NET, Java, Perl, Python, PHP, Processing, Flash etc. Firmata reprezintă o soluție extrem de simplă pentru extinderea funcționalităților unei plăci Raspberry Pi prin conectarea la o placă Arduino (a se vedea și proiectul „Access GPIO of Arduino from Raspberry Pi”).

2

Versiunile recente ale bibliotecii Firmata extind posibilitatea de zombificare și a altor plăci precum ChipKIT (exemplul din bibliotecă: StandardFirmataChipKIT.ino) dar și utilizând alte modalități de interconectare între placa de dezvoltare și sistemul de calcul:

  • Utilizând exemplul ino putem utiliza de la distanță o placă Arduino prin intermediul unei conexiuni bluetooth. Exemplul funcționează pe plăci ce integrează modul de comunicație BLE (de exemplu Arduino 101) sau pe orice placă Arduino cu un modul BLE atașat (de exemplu Adafruit Bluefruit nRF8001).
  • Exemplul ino permite, bineînțeles, controlul de la distanță prin intermediul unei conexiuni WiFi. Este posibilă utilizarea mai multor tipuri de plăci precum Arduino MKR1000 sau plăci de dezvoltare bazate pe circuitul ESP8266 (de exemplu Adafruit Feather HUZZAH). Această variantă de zombificare este utilizată de multe limbaje de control la distanță precum Gobot [13] sau Johny-Five.

3

O altă formă de zombificare prin intermediul unei conexiuni WiFi este oferită de placa de dezvoltare Arduino Yun. Există două variante de control la distanță a perifericelor integrate în microcontrolerul ATmega32U4 aflat pe placa de dezvoltare:

  • Prin intermediul serviciilor web de tip API REST adică prin intermediul unor URL-uri ce pot accesa diverse resurse hardware ale microcontrolerului. Acestea pot fi configurate astfel încât accesul să fie protejat de o parolă. Accesând IP-ul plăcii și calea /arduino putem configura, de exemplu, pinii I/O (pe Arduino Yun vom avea încărcat exemplul ino al bibliotecii Bridge):

4

http://myArduinoYun.local/arduino/digital/13 : calls digitalRead(13);

http://myArduinoYun.local/arduino/digital/13/1 : calls digitalWrite(13,1);

http://myArduinoYun.local/arduino/analog/9/123 : analogWrite(9,123);

http://myArduinoYun.local/arduino/analog/2 : analogRead(2);

http://myArduinoYun.local/arduino/mode/13/input : pinMode(13, INPUT);

http://myArduinoYun.local/arduino/mode/13/output : pinMode(13, OUTPUT);

  • Ultimele versiuni de plăci Arduino Yun ce rulează LininoOS permit programarea automată a microcontrolerului ATmega32U4 si utilizarea acestuia ca un periferic sub sistemul de operare. Programarea se face cu ajutorul comenzii:

/usr/bin/lininoio start

5

Utilizarea perifericelor se poate face direct din script bash:

echo 1 > /sys/class/gpio/TXLD/value

sau din alte limbaje de programare, de exemplu Node.JS:

var board = new require(‘ideino-linino-lib’).Board();

var led = 1;

board.connect( function(){

    board.pinMode(“D13”, “OUTPUT”);

    setInterval(function(){

        board.digitalWrite(“D13”, led);

        led = 1 – led;

    },500);

});

O soluție de zombificare pentru plăcile de dezvoltare echipate cu circuitul ESP8266 este ESPEasy. Prin încărcare acestui software pe o placă bazată pe ESP8266 vom putea configura foarte simplu atât partea de conectivitate WiFi (credențialele de acces la Internet) cât și perifericele conectate precum și rolul îndeplinit de sistem (configurare conexiune servicii IoT sau Home Automation) – totul prin intermediul unei interfețe web foarte simple.

6

7

Sistem antifurt pentru cadourile de Crăciun

Securitatea cadourilor de Crăciun este o problemă care ar trebui să preocupe pe toți părinții responsabili. Hoți, persoane răuvoitoare și mai ales personajul malefic Grinch abia așteaptă să distrugă bucuria copiilor din dimineața zilei de Crăciun.

2

Pentru a împiedica acest lucru este absolut necesar ca toate cadourile să fie dotate cu sisteme de siguranță pentru a preveni furtul de sub bradul de Crăciun. În cadrul acestui proiect vă propunem realizarea unui sistem sofisticat care permite declanșarea unei alarme sonore când un cadou este sustras de sub brad.

Sistemul antifurt este bazat pe o placă de dezvoltare Arduino Uno ce are conectate un mini difuzor brick și un senzor magnetic brick. Mini difuzorul este utilizat pentru a genera sunetul de alarmă iar senzorul magnetic pentru a sesiza dacă cadoul a fost mișcat. Pentru a sesiza mișcarea / mutarea cadoului acesta trebuia să aibă integrat un mic magnet. Mișcarea magnetului este sesizată de senzorul magnetic Hall și semnalizată plăcii de dezvoltare ce declanșează alarma sonoră.

3

Mini difuzorul se va conecta la pinul digital 8 al plăcii de dezvoltare și la pinul de GND. Generarea sunetului de alarmă se va face utilizând funcția tone() din mediul Arduino IDE.

Senzorul magnetic brick se conecta la 5V și GND iar ieșirea (OUT) se va conecta la pinul digital 2 al plăcii de dezvoltare. Ieșirea senzorului va fi ”1” (adică 5V) dacă nu detectează un magnet în apropiere sau ”0” (adică 0V) dacă un magnet se află în imediata apropiere.

4

Schema de interconectare între cele trei componente este următoarea:

5

Programul a fost dezvoltat și testat utilizând mediul Arduino IDE 1.8.3.

#define hallPin 2

#define buzzerPin 8

void setup() {

  pinMode(hallPin,INPUT);

  pinMode(buzzerPin, OUTPUT);

}

void loop() {

  boolean alarma;

  alarma = digitalRead(hallPin);

  if (!alarma) tone(buzzerPin,1000);

  else noTone(buzzerPin);

  delay(5000);

}

După încărcarea programului pe placa de dezvoltare și instalarea sistemului antifurt sub cadou, în cazul în care se îndepărtează cadoul de pe sistemul antifurt se va declanșa alarma sonoră ce va zădărnici tentativa de furt.

În cazul în care dorim să micșorăm dimensiunea sistemului antifurt putem înlocui placa de dezvoltare Arduino Uno cu o placă Arduino Pro Mini. În plus putem alimenta sistemul de la o baterie de 9V și pentru a prelungi durata de funcționare vom configura microcontrolerul să funcționeze în regim de consum redus. Noua schemă de interconectare este:

6

Programul a fost realizat și testa utilizând mediul Arduino IDE 1.8.3 și biblioteca LowPower.

#include “LowPower.h”

#define wakeUpPin 2

#define buzzerPin 8

void setup() {

  pinMode(wakeUpPin,INPUT);

  pinMode(buzzerPin, OUTPUT);

}

void wakeUp(){ }

void loop() {

  attachInterrupt(0, wakeUp, HIGH);

  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

  detachInterrupt(0);

  while (digitalRead(wakeUpPin)==1) {

    tone(buzzerPin,1000);

    delay(1000);

  }

  noTone(buzzerPin);

}

Spre deosebire de programul anterior, sistemul antifurt va funcționa în mod de consum redus. Declanșarea senzorului magnetic (mișcarea cadoului de pe sistemul antifurt) va declanșa o întrerupere ce va trezi microcontrolerul și va porni alarma sonoră. Dacă cadoul este pus la loc alarma va înceta.

Proiect Noise-o-Meter IoT

Zgomotul este un factor de stres la fel de puternic ca și căldura, suprasolicitarea sau evenimentele cu impact emoțional dar de cele mai multe ori este ignorat și încadrat în „normalitatea” urbană cotidiană. Cât de mult ne afectează zgomotul înconjurător? Depinde de nivelul de zgomot la care suntem expuși. Cum putem evalua zgomotul din jurul nostru? Aparatele profesionale de măsurat puterea sunetelor sunt destul de scumpe și nu oferă o evaluare pe termen lung. În cadrul acestei lecții prezentăm implementarea unui sistem de măsură a nivelului de zgomot ambiental care, cu ajutorul serviciilor IoT, va permite evaluarea pe termen lung a acestui factor de stres.

Sistemul va utiliza placa de dezvoltare Arduino Leonardo ETH și un modul breakout cu microfon pentru achiziția nivelului de zgomot. Schema de interconectare este următoarea:

schema_bb

Modulul breakout se va alimenta la 3.3V (pinul VCC al modulului se va conecta la pinul 3.3V al plăcii de dezvoltare, pinul GND la pinul GND) și ieșirea analogică a modulului, pinul AUD, se va conecta la pinul de achiziție analogică A0 al plăcii de dezvoltare.

Pentru mai multe detalii despre utilizarea modulului breakout puteți consulta și materialul „Electret Mic Breakout Board Hookup Guide”. Pentru punerea în funcțiune și utilizarea plăcii de dezvoltare Arduino Leonardo ETH puteți consulta materialul „Start with Arduino Leonardo ETH”.

Placa de dezvoltare va realiza partea de achiziție a nivelului de zgomot și va trimite valorile, prin intermediul rețelei Internet, către serviciul Robofun IoT. Serviciul Robofun IoT este un serviciu gratuit ce permite stocarea datelor și vizualizarea evoluției acestora. Serviciul necesită înregistrare (secțiunea Cont nou):

4

După înregistrare și conectare este necesară definirea unui nou senzor (secțiunea Adaugă senzor):

5

După definirea senzorului este necesar să copiem cheia de autentificare (Token) pentru a o utiliza în program.

3

Programul a fost dezvoltat și testat utilizând Arduino IDE 1.8.1 având instalate extensia Arduino AVR Boards 1.6.19 și biblioteca Ethernet2 1.0.4. Pentru ca sistemul să funcționeze este necesară conectarea plăcii Arduino Leonardo ETH la o rețea locală cu servicii DHCP și conectivitate Internet.

#include <SPI.h>

#include <Ethernet2.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetClient client;

char server[] = “iot.robofun.ro”;

const int pinAdc = A0;

În cazul în care placa nu va putea obține configurația de rețea prin DHCP led-ul conectat pe pinul 13 va începe să clipească și programul se va bloca (bucla infinită while(1)) – se va verifica în acest caz conectarea cablului de rețea și se va reseta placa.

void setup() {

      Serial.begin(9600);

      if (Ethernet.begin(mac) == 0) {

        pinMode(13,OUTPUT);

        while(1) {       

         digitalWrite(13,LOW);

         delay(1000);

         digitalWrite(13,HIGH);

         delay(1000);

        }

      }

}

În cadrul secțiunii loop() este necesară completarea cheii de autentificare specifice senzorului definit în cadrul serviciului Robofun IoT (TOKEN).

void loop() {

    float sound = getSound();

    Serial.println(sound);

   String temp = “GET /api/v1/senzor/TOKEN/input?value=” + String(sound) + ” HTTP/1.1″;

    char param[100];

    temp.toCharArray(param,temp.length()+1);

    if (client.connect(server, 80)) {

      client.println(param);

      client.println(“Host: iot.robofun.ro”);

      client.println(“User-Agent: arduino-ethernet”);

      client.println(“Connection: close”);

      client.println();

    }

    client.stop();

}

Funcția getSound() va analiza semnalul analogic transmis de modul pe o perioadă de timp egală cu sampleWindow. Analiza va determina amplitudinea maximă a semnalului (variabila peakToPeak) și va face transformarea din valoare eșantionată (interval 0 – 1024) în tensiune (interval 0 – 3.3).

float getSound(){

   const int sampleWindow = 5000;

   unsigned int sample;

   unsigned long startMillis= millis();

   unsigned int peakToPeak = 0; 

   unsigned int signalMax = 0;

   unsigned int signalMin = 1024;

   while (millis() – startMillis < sampleWindow)   {

      sample = analogRead(pinAdc);

      if (sample < 1024)     {

         if (sample > signalMax)         {

            signalMax = sample;         }

         else if (sample < signalMin)         {

            signalMin = sample;         }

      }

   }

   peakToPeak = signalMax – signalMin;

   float volts = (peakToPeak * 3.3) / 1024.0; 

   return volts;

 }

Evoluția zgomotului ambiental se poate observa local deschizând Serial Plotter din meniul Tools al mediului Arduino IDE (programul raportează și pe serială valorile măsurate) dar supravegherea pe termen lung se va face prin interfața web a serviciului Robofun IoT:

robofun

Atenție!!! Valorile măsurate nu sunt calibrate, nu au o unitate de măsură asociate – nu reprezintă valori in decibeli. Valorile măsurate reprezintă doar o intensitate a zgomotului pe o scară de la 0 la 3.3 dar pot da o imagine destul de bună a variației zgomotului în mediul ambiental.

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: (*), (*), (*), (*).