Visualizzazione post con etichetta __esp8266_page__. Mostra tutti i post
Visualizzazione post con etichetta __esp8266_page__. Mostra tutti i post

domenica 18 marzo 2018

Robot Car con nodeMCU - Software








Questo e' il terzo e' ultimo post di una serie che descrive la realizzazione del progetto RobotCar con nodeMCU controllato da applicazione Android.

I post precedenti sono: RobotCar - Assemblaggio e RobotCar con nodeMCU

I questo post conclusivo descrivo e condivido il software per l'applicazione Andoird realizzato con AppInventor e lo scketch per il nodeMCU per il controllo del RobotCar.


RobotCar Android Controller


Siccome questo progetto e' rivolto per dei giovanissimi ho realizzato l'applicazione per Android con l'ottimo MIT App Inventor.

L'app Android e' molto semplice e' puo' essere estesa a piacere.
Ha la funzione principale di spiegare come controllare un dispositivo remoto con delle semplici chiamate HTTP GET.

Per i piu' esperti, dico subito che il meccanismo di comunicazione e' molto antiquato ed utilizza dei parametri nella URL come si faceva a meta' anni 90. 
Tuttavia, siccome e' orinetato a dei giovanissimi, ho scelto questa modalita' per renderla comprensibile.

Per chi realizza il progetto suggerisco di implementare un server REST. Tuttavia' sono solo dettagli.


Interfaccia Grafica






Come anticipato l'interfaccia grafica e' semplicissima. E' composta da 4 pulsanti che rappresentano le 4 direzioni di movimento del RobotCar.








Gli oggetti utilizzati sono i seguenti






Ho utilizzato un layout a tabella (5 righe e 5 colonne). Ho anche usato due label (senza testo) per ottenere uno spaziamento corretto dei pulsanti.

Per chi vuole usare l'app direttamente senza realizzarla in AppInventor ho messo il file APK sul mio GitHub [RobotCar - Progetto Completo]

Blocchi AppInventor




Il "codice" e' molto semplice come l'interfaccia.

Questa app presuppone che il RobotCar sia in ascolto all'indirizzo 192.168.10.10. Ovviamente potete cambiarlo con un indirizzo IP di vostro gradimento (il RobotCar crea un rete WiFI chiamata RoboCar-01).

Il codice fa si' che ad ogni pressione di un pulsante di controllo, una HTTP GET venga inviata al RobotCar con un parametro chiamato comado che puo' assumere un valore corrispondente alla direzione di movimento desiderata:
  • AVANTI
  • INDIETRO
  • DESTRA
  • SINISTRA
  • FERMO
Da notare che il comando FERMO, che fa immediatamente fermare il RobotCar, viene inviato quando il pulsante viene rilasciato.
Quindi il RobotCar si muove, nella direzione prescelta, finché' il pulsante rimane premuto.











RobotCar WebServer per nodeMCU


Il RobotCar e' controllato da un nodeMCU fissato sul suo telatio.
Ho implementato un semplice WebServer sul nodeMCU in modo da poter ricevere i comandi provenienti dall'app Android e da attuare il controllo sui motori.




I GPIO del nodeMCU da utilizzare sono definiti nelle linee 5 - 9. 

Il codice imposta il nodeMCU in modalita' AccessPoint e crea una rete WiFi chiamata RobotCar-01

Nella linea 43 configuro il webserver per eseguire la funzione muovi_robocar al ricevimento di un HTTP GET all'url: http://192.168.10.10/robocar

La funzione muovi_robocar  e' molto semplice e in funzione del parametro comando, letto dalla query HTTP, richiama al funzione di movimento del RobotCar relativa.

Ogni funzione di movimento del RobotCar, aziona i motori destro e sinistro in modo appropriato.


Test del RobotCar


Concludo questo progetto con il test del RobotCar









Robot Car con nodeMCU








Nel primo post della serie [qui], ho descritto come assemblare i vari componenti che formano il kit del robot car.

A questo punto il robot car ha la necessita' di essere controllato per potersi muovere.

In questo post descrivo i passi necessari per installare il cervello (un nodeMCU) ed il driver dei 2 motori CC collegati alle ruote.

Componenti Necessari


Per portare a termine i passi descritti in questo post sono necessari i seguenti componenti


nodeMCU








Il nodeMCU e' un ottima scelta in quanto associa al micro controllore anche il dispositivo WiFi che mi permette di controllare da remoto il RobotCar.


(Mini) BreadBoard da 170 fori






Per comodità' ho usato una mini breadboard con 170 punti di connessione.
E' possibile usare una più' comune breadboard da 400 punti senza particolari problemi

Sulla mini breadboard montero' il nodeMCU e realizzero' le poche connessioni necessarie per realizzare questo progetto.


Scheda driver motori L298N





Nel Kit e' inclusa la scheda di controllo dei motori in corrente continua. E' basata sull'integrato L298.

In questo post (L298N Driver Motori con Arduino) descrivo in dettaglio come si utilizza la scheda di controllo.









Filo e Cavetti di connessione






Gomma adesiva


Per fissare i vari componenti sul telaio del RobotCar, uso una gomma adesiva come questa











Passiamo ora all'assemblaggio dei componenti sul telaio del RobotCar.



Passo #1:  Saldatura alimentazione motori






I motori sono dotati di due terminali metallici su cui bisogna saldare un filo di alimentazione.

Inserisco un filo e ne ripiego leggermente l'estremità, quasi a formare un piccolo uncino.

Questo rende il collegamento più' solido e duraturo.










Ora con il saldatore ben caldo, applicoun po' di stagno in modo da saldare i fili di alimentazione al connettore metallico del motore.














Questo e' il risultato ottenuto.









Passo #2:  Fissaggio mini-breadboard al telaio


Applico un po' di gomma adesiva al fondo della mini-breadboard






Ora con una lieve pressione, faccio aderire la mini-breadboard al telaio del RobotCar.


Se la vostra breadboard e' dotata di adesivo sul fondo potete evitare l'uso della gomma adesiva











Passo #3:  Passaggio fili alimentazione motore


Faccio passare i fili di alimentazione dei motori nelle fessure presenti nel telaio del RobotCar come indicato in figura






Faccio passare i fili con delicatezza per evitare di staccarli dai motori.







Questo e' il risultato ottenuto.








Passo #4:  Montaggio nodeMCU su mini-breadboard


In questo passo, inserisco il nodeMCU sulla mini-breadboard in modo simmetrico, lasciando una fila libera per parte.







La inserisco tutta da un lato, in modo da lasciare due colonne libere sulla sinistra
















Passo #5:  Posizionamento scheda L298N


Infine posiziono, sul telaio del RobotCar, la scheda L298N, per il controllo dei motori.

Anche in questo caso mi aiuto con la gomma adesiva.








Passo #6:  Schema bread-board


Nelle due figure sotto, lo schema breadboard da realizzare.
















Passo #7:  Cablaggio circuito


Adesso, che tutti i componenti sono correttamente posizionati sul RobotCar, inizio a creare il circuito sulla mini-breadboard  usando dei cavetti DuPont (rainbow wire) 


Inizio connettendo il filo rosso (positivo) e quello nero (negativo), dal porta batterie alla bread-board come indicato in figura.





Adesso collego due piccoli spezzoni di filo, dalla scheda L298N alla breadboard come in figura.





Il filo blue va connesso al positivo della batteria, mentre il filo bianco al negativo.






Adesso collego i fili di alimentazione dei due motori alla scheda L298N come in figura.

L'ordine rosso-nero non e' cosi' importante, in quanto e' facilissimo modificare lo sketch in modo da far ruotare i motori nel verso corretto.












Ora collego l'alimentazione alla scheda nodeMCU. 

Come si vede in figura collego il polo negativo della batteria a GND sul nodeMCU.

Allo stesso modo, collego il polo positivo al pin Vin del nodeMCU.





Infine, collego i cavetti di controllo dei motori dal nodeMCU alla scheda L298N.

I collegamenti sono i seguenti:

Lato scheda L298N:

  • filo marrone: pin IN1 
  • filo giallo: pin IN2
  • filo verde: pin IN3
  • filo grigio: pin IN4





Lato scheda nodeMCU:
  • filo marrone: pin D0
  • filo giallo: pin D1
  • filo verde: pin D3
  • filo grigio: pin D4





Ed ecco il RobotCar completamente assemblato e con il circuito cablato in maniera corretta





Passi Successivi

Ora che il RobotCar e' completament5e assemblato e cablato posso concentrarmi sulla parte software.

Devo sviluppare due componenti:

  • applicazione per dispositivo mobile: uso l'ottimo AppInventor in quanto il progetto e' orientato a chi non sa' ancora programmare
  • sketch per nodeMCU che implementa un web server che controlla il movimento del RobotCar


Tratterò' l'argomento software in un post separato







mercoledì 21 febbraio 2018

Simple HTTP REST Server on ESP8266








My follower and my friends know that I am not a fan of Web Server on ESP8266 as this has negative architectural implications. In any case this is not the topic of this post.

In the past few days I have received some requests on how to create a Web Server on ESP8266.

As the typical use for ESP8266 is mostly as IoT device I think it make much more sense to show how to create a simple HTTP REST server on ESP8266 in order to manage some resources.

In this post I show how to manage 1 Led through a RESTful API on ESP8266.


Testing Circuit


The testing circuit is quite simple and is shown below











Code


The code of the REST server is available on my GitHub here











Testing


In order to test the REST server I use the curl command from command line (for the one who prefer a graphical interface I suggest the great  postman)

GET ROOT


The first command I execute is a HTTP GET of the server's root

The IP address will be certainly different in your case, so please replace it with your own (it is printed on Serial Monitor during ESP boot).






As you can see the string defined on line 118 is provided back by the server.


GET leds


Now time to query the REST server for leds resource through a HTTP GET





As you can see the HTTP code 204 is provided back meaning that the resource is neither available nor is empty.




POST leds


Now let's create the resource by providing a JSON body as part of the HTTP POST request. The JSON contains the following information:

  • id: a unique identifier of the resource
  • gpio: GPIO number on which the resource (led) is connected
  • status: resource's status (0 or LOW)





Now the server replies back with a 201 meaning that the resource has been successfully created.


Now I query again the resource through GET and this time server replies with 200 and with the JSON representation of the resource.




PUT leds


Now that the resource is available it is possible to modify it with a HTTP PUT


Also in this case I need to pass a JSON representation in the body of the request in which I set the status to 1(HIGH).






The server replies with a 200 code meaning that the update is successful and the led is turning on





In the same manner I can updated it with status = 0






and the led turns off





In the sample code I also manage other cases.

As an example if I update (PUT) a resource with id = 2





Server replies with 404 telling me that the resource is not existing 


I let to the reader the implementation of the DELETE method.

That's it folks!!! :)










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.