mercoledì 21 febbraio 2018

Simple HTTP REST Server con ESP8266








Chi mi segue e conosce sa che non sono un supporter dell'implementazione di un Web Server su un modulo IoT come ESP8266. Fondamentalmente e' per ragioni architetturali che non discuto qui.

Tuttavia nei giorni passati ho ricevuto alcune richieste da utenti che inizia a cimentarsi con ESP8266 sul come realizzare un Web Server con ESP8266.

Ritengo che dato l'uso tipico di un dispositivo come ESP8266 nei progetti sia più' appropriato far vedere come si implementa un semplice HTTP REST server in modo da poter gestire delle risorse.

In questo articolo faccio vedere come gestire 1 Led tramite un API REST con ESP8266.


Circuito di Prova


Il circuito di prova e' banale e raffigurato qui sotto










Codice


Il codice e' disponibile sul mio GitHub qui











Test


Per fare il test uso il comando curl da linea di comando (per chi preferisce un client grafico puo' usare l'ottimo postman)

GET ROOT


il primo comando che eseguo e' un HTTP GET della root del server

L'indirizzo IP sara' certamente diverso nella vostra rete e quindi dovete sostituirlo con il vostro (viene stampato sul monitor seriale al boot del ESP8266)






Come si vede ci viene restituita la stringa definita nel codice nella linea 118

GET leds


Adesso interrogo la mia risorsa chiamata leds tramite una HTTP GET




Come si vede mi viene restituito uno stato uguale a 204 indicando che la risorsa non e' disponibile.



POST leds


Adesso creo la risorsa leds fornendo nel body del HTTP POST un json che contiene i seguenti attributi:

  • id: un numero identificastivo univoco
  • gpio: il numero di GPIO su cui la mia risorsa (led) e' collegato
  • status: lo stato della risorsa (0 o LOW)





Come si vede il server mi risponde con un codice 201 indicandomi che la mia risorsa e' stata creata correttamente.


Ora se invio nuovamente un GET sulla risorsa il server mi risponde con 200 e mi fornisce come risposta il JSON che rappresenta la risorsa





PUT leds


Ora che la risorsa esiste posso modificarla con un HTTP PUT.

Anche in questo caso nel body della richiesta inserisco un JSON in cui imposto status a 1 (HIGH)






il server mi risponde con  200 indicando che l'update della risorsa e' andato a buon fine e come si vede sotto il led si accende e rimane acceso.




Analogamente se invio un update con status = 0 





il led si spegne e rimane spento.




Nel codice di esempio ho anche gestito altri casi.

Per esempio se faccio l'update (PUT) di una risorsa con id = 2




ottengo un 404 indicandomi che tale risorsa non esiste.


Lascio al lettore l'implementazione del metodo DELETE.