Progetto di un robot di Telepresenza con l’ESP32-CAM – Parte 3

Nel precedente articolo “Progetto di un robot di Telepresenza con l’ESP32-CAM - Parte 2” abbiamo trattato l’hardware del progetto descrivendo dettagliatamente i componenti della scheda di controllo del robot, ossia la scheda di sviluppo ESP32-CAM e il driver dei motori L298N, di cui ne abbiamo elencato le caratteristiche e le specifiche tecniche e descritto il funzionamento. In questo articolo entreremo nella parte relativa al software del progetto, ossia creeremo uno sketch con il codice per il funzionamento del robot utilizzando l’IDE di Arduino e descriveremo e analizzeremo le principali funzioni del codice.

Introduzione

Al fine di seguire e meglio comprendere il codice del robot, dalla puntata “Progetto di un robot di Telepresenza con l’ESP32-CAM - Parte 1” riportiamo una sezione della descrizione del progetto. La scheda di controllo del robot di telepresenza è costituita dal modulo L298N di comando in corrente continua dei due motori delle ruote del robot, dalla scheda di sviluppo Wi-Fi ESP32-CAM dotata di videocamera, dal modulo di alimentazione. Il modulo L298N è in grado di gestire motori con assorbimento di corrente fino a 3A e alimentazione massima di 35V. Inoltre, consente di pilotare due motori in corrente continua contemporaneamente, il che rende l’L298N perfettamente idoneo nella costruzione di robot. L'ESP32-CAM della Espressif è una scheda di sviluppo che integra il modulo microcontrollore ESP32-S ed è dotato di una videocamera OV2640, dispone di diverse porte GPIO per il collegamento di periferiche e uno slot per schede microSD. Alcune di queste porte GPIO vengono utilizzate dall’ESP32 per gestire il controllo dei motori del robot. Nell’ESP32 viene creato un server web accedendo al quale si ottiene lo streaming video ripreso dalla videocamera della scheda ESP32-CAM.

Installazione del software

Come accennato nella premessa, in questo articolo tratteremo il software del progetto partendo dall’installazione di Arduino e della scheda di sviluppo ESP32-CAM.

Installazione di Arduino e della scheda ESP32-CAM

Procedete con l’installazione del software Arduino dal sito ufficiale www.arduino.cc (in questo progetto si fa riferimento alla versione Arduino 1.8.15). All’avvio del programma, nell’IDE di Arduino occorre installare l’ESP32. Da File -> Impostazioni, alla voce “URL aggiuntive per il Gestore schede” inserite il link seguente: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, poi, con Strumenti - > Scheda -> Gestore Schede, digitate “esp32” nella barra di ricerca; selezionate e installate il firmware di gestione della scheda ESP32 “ESP32 by Espressif Systems“. Si visualizzerà un’immagine come in Figura 1.

Figura 1: Installazione della scheda ESP32

Creazione dello sketch

Ora aprite un nuovo sketch e copiate il codice seguente:

/*********
Rui Santos
Complete instructions at https://RandomNerdTutorials.com/esp32-cam-projects-ebook/

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" // disable brownout problems
#include "soc/rtc_cntl_reg.h" // disable brownout problems
#include "esp_http_server.h"

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

#define PART_BOUNDARY "123456789000000000000987654321"

#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM_B
//#define CAMERA_MODEL_WROVER_KIT

#if defined(CAMERA_MODEL_WROVER_KIT)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 21
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27

#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 19
#define Y4_GPIO_NUM 18
#define Y3_GPIO_NUM 5
#define Y2_GPIO_NUM 4
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22

#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23

#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 32
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21

#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23

#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 17
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21

#elif defined(CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27

#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22

#elif defined(CAMERA_MODEL_M5STACK_PSRAM_B)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 22
#define SIOC_GPIO_NUM 23

#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 32
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21

#else
#error "Camera model not selected"
#endif

#define MOTOR_1_PIN_1 14
#define MOTOR_1_PIN_2 15
#define MOTOR_2_PIN_1 13
#define MOTOR_2_PIN_2 12
 [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2791 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend