Site icon Renzo Mischianti

EByte LoRa E32 gateway: gestione REST e WebSocket (esp8266, esp32) – 1

EByte LoRa E32 Manager REST WebSocket per configurare e testare con esp8266 esp32

EByte LoRa E32 Manager REST WebSocket per configurare e testare con esp8266 esp32

Spread the love

Faccio molti progetti con gli EByte LoRa E32, tutti basati sulla mia libreria “Libreria EByte Lora E32“, e molte persone lo scaricano, ma gli strumenti di EByte sono molto poveri e talvolta difettosi.

EByte LoRa E32 Manager REST WebSocket to configure and test esp8266 esp32

Quindi proverò a creare un esempio che da web supporti tutte le funzionalità di configurazione e i widget per testare l’invio e la ricezione.

Ecco i dispositivi LoRa E32 AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)

Puoi dividere l’applicazione in 2 parti

Cablaggio esp8266

WeMos D1 mini esp8266 pinout mischianti low resolution

Devi connettere esp8266 con questa configurazione

E32WeMos D1 mini (esp8266)
M0D7
M1D6
TXD3
RXD4
AUXD5
VCC3.3v or 5v (meglio)
GNDGND
LoRa E32-TTL-100 and Wemos D1 mini fully connected

Cablaggio ESP32

ESP32 DOIT DEV KIT v1 pinout

Per l’ESP32 uso questa configurazione

E32ESP32
M019
M121
RXTX2
TXRX2
AUX15
VCC3.3v or 5v (better)
GNDGND
EByte LoRa E32 E22 ESP32 DEV KIT V1 Fully connected breadboard

Back End (come un semplice gateway)

Ho scritto 2 back end, uno per esp8266 e uno per esp32, li trovate sugli esempi della mia libreria “Libreria EByte Lora E32”.

Puoi scegliere di lavorare con il dispositivo come Soft AP oppure puoi inserire il tuo WiFi SSID e la password e usarli come un normale server, per abilitare il Soft AP devi commentare questa riga

#define SERVER_MODE

Quindi se colleghi D0 con una resistenza di pull-up al pin RESET, resetto automaticamente il dispositivo quando necessario.

Caricamento degli sketch e interfaccia utente Web

Per caricare gli sketchs puoi fare riferimento ai tutorial che ho già scritto:

Interfacciamento al back-end

Creo un template con Postman con la documentazione di Rest API, lo strumento offre un set completo di implementazioni con i linguaggi più comuni come .NET, Python, nodejs, PHP ecc.

API REST

Le API REST rispondono dalla porta 8080 senza il controllo CORS per informazioni fai riferimento a “Server REST con esp8266 e esp32“.

Ottieni la configurazione

GET 192.168.1.119:8080/configuration

var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("192.168.1.119:8080/configuration", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
    "configuration": {
        "ADDH": 0,
        "ADDL": 0,
        "CHAN": 23,
        "OPTION": {
            "fec": 1,
            "fixedTransmission": 0,
            "ioDriveMode": 1,
            "transmissionPower": 0,
            "wirelessWakeupTime": 0
        },
        "SPED": {
            "airDataRate": 2,
            "uartBaudRate": 3,
            "uartParity": 0
        }
    }
}
Imposta configurazione

POST  192.168.1.119:8080/configuration

{
    "ADDH": 0,
    "ADDL": 0,
    "CHAN": 23,
    "OPTION": {
        "fec": 1,
        "fixedTransmission": 0,
        "ioDriveMode": 1,
        "transmissionPower": 0,
        "wirelessWakeupTime": 0
    },
    "SPED": {
        "airDataRate": 2,
        "uartBaudRate": 3,
        "uartParity": 0
    }
}

Esempio di richiesta

var raw = "{
\n    \"ADDH\": 0,
\n    \"ADDL\": 0,
\n    \"CHAN\": 23,
\n    \"OPTION\": {
\n        \"fec\": 1,
\n        \"fixedTransmission\": 0,
\n        \"ioDriveMode\": 1,
\n        \"transmissionPower\": 0,
\n        \"wirelessWakeupTime\": 0
\n    },
\n    \"SPED\": {
\n        \"airDataRate\": 2,
\n        \"uartBaudRate\": 3,
\n        \"uartParity\": 0
\n    }
\n}";

var requestOptions = {
  method: 'POST',
  body: raw,
  redirect: 'follow'
};

fetch("192.168.1.119:8080/configuration", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
    "configuration": {
        "ADDH": 0,
        "ADDL": 0,
        "CHAN": 23,
        "OPTION": {
            "fec": 1,
            "fixedTransmission": 0,
            "ioDriveMode": 1,
            "transmissionPower": 0,
            "wirelessWakeupTime": 0
        },
        "SPED": {
            "airDataRate": 2,
            "uartBaudRate": 3,
            "uartParity": 0
        }
    }
}
Ripristina microcontrollore

GET 192.168.1.119:8080/reset

Esempio di richiesta

var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("192.168.1.119:8080/reset", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
Ripristina modulo E32

GET 192.168.1.119:8080/resetModule

Esempio di richiesta

var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("192.168.1.119:8080/resetModule", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
  "status": {
    "code": "1",
    "error": false,
    "description": "Success"
  }
}
Ottieni informazioni sul modulo

GET 192.168.1.119:8080/moduleInfo

Esempio di richiesta

var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("192.168.1.119:8080/moduleInfo", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
  "moduleInfo": {
    "frequency": "32",
    "version": "48",
    "features": "14"
  }
}
Invia un messaggio trasparente

POST  192.168.1.119:8080/transparentMessage

{
    "message": "Messaggio prova"
}

Esempio di richiesta

var raw = "{
\n    \"message\": \"Messaggio prova\"
\n}";

var requestOptions = {
  method: 'POST',
  body: raw,
  redirect: 'follow'
};

fetch("192.168.1.119:8080/transparentMessage", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
  "status": {
    "code": "1",
    "error": false,
    "description": "Success"
  }
}
Invia messaggio fisso

POST 192.168.1.119:8080/fixedMessage

{
    "CHAN": 23,
    "ADDL": 2,
    "ADDH": 0,
    "message": "Messaggio prova"
}

Esempio di richiesta

var raw = "{
\n    \"CHAN\": 23,
\n    \"ADDL\": 2,
\n    \"ADDH\": 0,
\n    \"message\": \"Messaggio prova\"
\n}";

var requestOptions = {
  method: 'POST',
  body: raw,
  redirect: 'follow'
};

fetch("192.168.1.119:8080/fixedMessage", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
  "status": {
    "code": "1",
    "error": false,
    "description": "Success"
  }
}
Invia messaggio broadcast

POST 192.168.1.119:8080/broadcastMessage

{
    "CHAN": 23,
    "message": "Messaggio prova"
}

Esempio di richiesta

var raw = "{
\n    \"CHAN\": 23,
\n    \"message\": \"Messaggio prova\"
\n}";

var requestOptions = {
  method: 'POST',
  body: raw,
  redirect: 'follow'
};

fetch("192.168.1.119:8080/broadcastMessage", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Esempio di risposta

{
  "status": {
    "code": "1",
    "error": false,
    "description": "Success"
  }
}

Web Socket

Il WebSocket risponde dalla porta 8081 con protocollo ws (ws://192.168.1.119:8081/)

All’apertura della connessione ricevi il primo messaggio con le informazioni di base

{"type":"connection", "connection": true, "simpleMessage": true}	

Quindi inizi a ricevere il messaggio con informazioni sulla potenza del segnale in tempo reale

{"type":"wifi_rt","value":"-38"}	

per iniziare a ricevere messaggi devi inviare questo messaggio

{"startReceiveDevMsg":true,"singleMessage":true}	

se è tutto ok ricevi

{"type": "device_msg", "receiving": true}	

quindi puoi metterti in ascolto dei messaggi ricevuti dal dispositivo

{"type":"message","code":true,"description":"Success","message":"Messaggio di prova","error":false}	

Puoi usare questo semplice client WebSocket

http://home.mischianti.org/WebSocketClient/MischiantiWebSocketClient.html

Grazie

Link alla libreria

Link al progetto GitHub del front end

Link all’implementazione delle API REST

  1. EByte LoRa E32 gateway: gestione REST e WebSocket
  2. EByte LoRa E32 Web Manager: descrizione, configurazione e demo

Spread the love
Exit mobile version