LoRa meets ESP32

Intrarea pe piață a microprocesorului SoC ESP32 a marcat o nouă și interesantă etapă în cadrul familiei de circuite produse de compania Espressif. Două nuclee LX6 ce lucrează la frecvențe de până la 240MHz, conectivitate WiFi b/g/n și bluetooth 4.2, convertor analog-numeric pe 12 biți / 18 canale, două convertoare numeric-analogice pe 8 biți, patru interfețe SPI, două I2C, două I2S și trei UART, interfață CAN bus 2.0 sunt doar câteva dintre facilitățile puse la dispoziția dezvoltatorilor de către ESP32 făcând din acesta o alternativă atrăgătoare pentru noi proiecte. Mai mult decât atâta, pe lângă plăci de dezvoltare bazate pe ESP32 precum Adafruit HUZZAH32, Sparkfun ESP32 Thing sau Olimex ESP32-Gateway, asistăm la apariția unei generații noi de plăci de dezvoltare ce combină conectivitatea circuitului ESP32 cu conectivitatea modulelor radio LoRa.

LoPy este o astfel de placă de dezvoltare dar putem aminti și alte variante precum HELTEC WiFi LoRa 32 sau TTGO ESP32 SX1276 LoRa. Chiar dacă placa de dezvoltare LoPy este gândită pentru a fi programată în mediul MicroPython există și posibilitatea de a utiliza mediul Arduino IDE.

Avantajele unei plăci de dezvoltare ce îmbină conectivitatea circuitului ESP32 (WiFi + bluetooth) cu conectivitatea unui modul radio LoRa (comunicații radio pe distanțe mari) sunt evidente: posibilitatea de implementarea de dispozitive IoT multiprotocol, posibilitatea de implementarea de sisteme gateway LoRa sau bluetooth – implementări ce nu necesită nici un fel de montaj electronic pentru partea de comunicație, placa de dezvoltare integrează toate componentele necesare.

Realizarea unui nod LoRaWAN TTN, de exemplu, este extrem de simplă fără a fi nevoie să interconectăm o placă de dezvoltare cu un modul radio LoRa. Plecând de la exemplul ttn-abp al bibliotecii LMIC trebuie să personalizăm datele de autentificare în rețeaua TTN (obținute în urma înregistrării gratuite):

static const PROGMEM u1_t NWKSKEY[16] = { … };

static const u1_t PROGMEM APPSKEY[16] = { … };

static const u4_t DEVADDR = … ;

să modificăm pinii utilizați de modulul LoRa:

const lmic_pinmap lmic_pins = {

    .nss = 18,

    .rxtx = LMIC_UNUSED_PIN,

    .rst = 14,

    .dio = {26, 33, 32},

};

și să inserăm comanda de inițializare personalizată a portului SPI în cadrul secțiunii setup():

SPI.begin(5,19,27,18);

Pentru mai multe informații puteți consulta și materialele: „The ESP32 Oled Lora TTGO LoRa32 board and connecting it to TTN” și „Easy LoRaWAN and more with LoPy”.

Pentru a crea un gateway LoRaWAN TTN putem să apelăm la pachetul software Single Channel LoRaWAN Gateway în care vom avea de făcut câteva personalizări minore. În fișierul ESP-sc-gway.h vom modifica următoarele secțiuni:

  • Datele de identificare ale sistemului gateway (coordonate GPS, altitudine, platformă, descriere și email de contact)

#define _DESCRIPTION “ESP32 Single Channel Gateway”

#define _EMAIL “…”

#define _PLATFORM “ESP32”

#define _LAT …

#define _LON …

#define _ALT …

  • Datele serverului NTP cu care vom realiza sincroniza ceasul și fusul orar

#define NTP_TIMESERVER    “ro.pool.ntp.org”

#define NTP_TIMEZONES     2

#define SECS_PER_HOUR     3600

#define NTP_INTR      0

  • Datele de conectare la rețeaua WiFi ce asigură conectivitatea Internet

wpas wpa[] = {

{ “” , “” },

{ “…”, “…” }

};

După încărcarea programului pe placa de dezvoltare, deschizând consola serială a mediului Arduino IDE, obținem ID-ul gateway-ului ce trebuie înregistrat pe platforma TTN:

2

Sistemul gateway dispune de o interfață web (accesibilă din rețeaua locală din care face parte sistemul) ce permite supravegherea funcționării și modificarea unor parametrii (precum canalul radio pe care ascultă gateway-ul):

3

Pentru mai multe detalii despre implementarea unui sistem gateway LoRaWAN TTN puteți consulta și materialele: „LoPy to Single Channel Gateway to The Things Network” și „BIG ESP32 / SX127x”.