Vediamo il comando per verificare se un processo e’ attivo. Questo e’ utile per verficare se un servizio e’ avviato oppure se e’ necessario farlo partire, oppure puo essere utile perchè magari il servizio e’ bloccato e voglio killarlo.
Questo modulo fa parte della famiglia ESP e’ leggermente diverso dall’ESP8266. Sia come piedinatura che come caratteristiche tecniche leggermente superiori, ma per questo cercate in giro su internet i datasheet.
Se montato su una DEV-BOARD e’ programmabile con il tool di arduino tramite USB.
E’ un ottima alternativa all’ESP8266 anche a livello di costo sui siti cinesi si trvano dei moduli montati su develop board a prezzi stracciati. Unica accortezza bisogna collegare un condensatore elettrolitico da 10uF tra il piedino EN e massa altrimenti a ogni tentativo di programmazione il processore si riavvia.
piedinatura
Modelli di DEVELOP-BOARD
Equipaggiati con questo modulo possiamo trovare diverse Develop Board che si differiscono per piedinatura, io ho usato la DEVKITC 38 pins.
Si differenzia per il numero di pin disponibili all’esterno e la loro disposizione pertanto non possono essere pin-to-pin compatibili ma il modulo core rimane lo stesso. La DEVboard puo essere alimentata a 5 V sul pin Vin oppure da USB . ATTENZIONE i segnali in input non possono superare i 3,3 V causa arrostimento del chip.
Di seguito potete scaricare il data sheet completo
Non tutti i pin possono essere usati nello stesso modo, nella tabella sotto vediamo in che modo possono essere usati.
GPIO
INPUT
OUTPUT
NOTE
0
CON PULL-UP
SI
Emette segnale PWM al Boot
1
TX pin
SI
Uscita seriale debug al boot
2
SI
SI
legato al led on board
3
SI
RX pin
HIGH al boot
4
SI
SI
5
SI
SI
Emette segnale PWM al Boot
6
NO
NO
connesso alla flash SPI integrata(SCK/CLK)
7
NO
NO
connesso alla flash SPI integrata(SDO/SD0)
8
NO
NO
connesso alla flash SPI integrata(SDI/SD1)
9
NO
NO
connesso alla flash SPI integrata(SHD/SD2)
10
NO
NO
connesso alla flash SPI integrata(SWP/SD3)
11
NO
NO
connesso alla flash SPI integrata(CSC/CMD)
12
SI
SI
Se messo a 3,3V blocca il boot
13
SI
SI
14
SI
SI
15
SI
SI
16
SI
SI
17
SI
SI
18
SI
SI
19
SI
SI
20
SI
SI
21
SI
SI
22
SI
SI
23
SI
SI
24
SI
SI
25
SI
SI
26
SI
SI
27
SI
SI
28
SI
SI
29
SI
SI
30
SI
SI
31
SI
SI
32
SI
SI
33
SI
SI
34
SI
NO
Solo ingresso
35
SI
NO
Solo ingresso
36
SI
NO
Solo ingresso
37
SI
NO
Solo ingresso
38
SI
NO
Solo ingresso
39
SI
NO
Solo ingresso
tabella ingressi uscite
-Pin in solo ingresso
I GPIO dal34 al 36 sono utilizzabili solamente in ingresso, se vengono configurati come output non si riescono a pilotare. Non sono forniti di resistenze di pull interne quindi vanno usate quelle esterne.
-SPI flash interna
Sui GPIO 6 -11 e’ connessa la memoria FLASH interna e vengono messi a disposizione all’esterno tramite i pin relativi, e’ bene NON utilizzare questi pin lasciandoli liberi.
-Pin CAPACITIVI
i GPIO 0-2-4-12-13-14-15-27-32-33 sono dei pin utilizzabili sia in ingresso che in uscita, se usati in ingresso hanno la particolarita’ che possono gestire il TOUCH , cioe’ sono in grado di sentire il tocco del dito sostituendo cosi il pulsante meccanico.
-Convertitori Analogico/Digitale
Tutti i GPIO configurabili come ingressi, hanno la funzione di convertitori analogici digitali con risoluzione di 12bits. sono divisi in due gruppi, ADC1 e ADC2, gli ingressi sono divisi cosi:
ADC1 (GPIO 36,37,38,39,32,33,34,35)
ADC2 (GPIO 4,0,2,15,13,12,14,27,25,26) ADC non utilizzabili se si usa il WIFI.
I canali ADC hanno risoluzione 12 bits pertanto la scala di valori sara’ 0 – 4095, il range va da 0V a 3,3V. Questo significa che hanno una risoluzione di 0.8mV. I converitori pero’ non sono completamente lineari in tutta la loro escursione, in particolare nella zona bassa e quella alta, pertanto e’ consigliabile non usarlo con tensioni inferiori a 0.20V o superiori di 3.00V non essendo affidabili
-Convertitori Digitali/Analogici
E’ fornito di due convertitori D/A a 8 bit 0-254 converte il valore digitale in una tensione analogia con un range 0- 3,3 con risoluzione di circa 13mV
DAC1 GPIO 25
DAC2 GPIO 26
-Ingressi RTC WakeUp
Ci sono alcuni ingressi che possono essere usati per portare il processore dallo stato di SLEEP (funzione che abbatte il consumo energetico cofigurabile)al funzionamento normale. Questi sono i pin associabili alla funzione RTC wakeup:
RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)
RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)
-Uscite PWM
Si possono usare tutte le uscite GPIO (all’infuori dei GPIO 34 e 39) per generare segnali PWM diversi per ogni pin sia in frequenza che in dutycicle. per utilizzarli bisogna configurare, tramite il linguaggio scelto per la programmazione, i seguenti parametri per ogni GPIO :
Frequenza del segnale;
Duty cycle;
canale PWM ;
GPIO di uscita del segnale .
-I2C
L’ ESP32 puo gestire due canali I2C e possono essere usati tutti i pin GPIO come segnali SDA e SCL, Quando si usa l’ESP32 con l’IDE di Arduino i pin di default sono SDA GPIO21 – SCL GPIO22
Se si vuole utilizzare pin diversi usando la libreria wire.h dobbiamo utilizzare il comando seguente per assegnare i pin:
Wire.begin(pinSDA, pinSCL);
-SPI
La scheda ha due canali SPI chiamati V e H, non ci sono differenze tra i due canali escluso che sono disponibili su pin diversi. L’uso del bus SPI con ESP32 e’ impostato di default sui pin:
SPI
MOSI
MISO
CLK
CS
VSPI
GPIO23
GPIO19
GPIO18
GPIO5
HSPI
GPIO13
GPIO12
GPIO14
GPIO15
-INTERRUPTS
Tutti i pin GPIO in ingresso, possono essere configurati come ITERRUPT esterni
-STRAPPING PINS
Questi pin sono utilizzati per impostare l’ESP32 in modalita’ boot o flashing.
GPIO 0
GPIO 2
GPIO 4
GPIO 5 (deve essere HIGH durante boot)
GPIO 12 (deve essere LOW durante boot)
GPIO 15 (deve essere HIGH durante boot)
Se si usano le DEV BOARD con l’intrerfaccia USB integrata possiamo anche non preoccuparci dello stato di questi pin per la programmazione del BOOT o durante la fase di programmazione del firmware, in quanto l’ IDE di programmazione imposta in automatico questi pin in base al tipo di programmazione da effettuare (boot o flashing).
Se usiamo questi PIN collegandoli a dispositivi esterni, potremmo avere qualche difficolta’ di caricamento del firmware o del boot, in questo caso e’ necessario scollegare l’ESP32 dalla scheda programmarla e poi rimetterla al suo posto. Dopo il reset o il flashing questi pin lavorano normalmente.
-PIN allo stato alto al boot
Alcuni GPIO al momento dell’avvio o del reset si porteranno allo stato alto o genereranno un uscita PWM , se a questi gpio sono collegate apparecchiature esterne come ad esempio LED, RELE’ , sensori etc. etc. questi dispositivi potranno generare anomalie durante la fase di avvio o reset.
GPIO 1
GPIO 3
GPIO 5
GPIO 6 to GPIO 11 (connessi al ESP32 SPI della memoria flash integrata – si raccomanda di non usare questi pin).
GPIO 14
GPIO 15
-Enable (pin EN)
Questo pin abilita il regolatore 3,3V integrato, e’ mantenuto normalmente alto , se collegato a massa disabilita il regolatore 3,3V spegnendo la CPU, puo essere usato per riavviare la CPU con un pulsante , normalmente va collegato a GND con un condensatore di 10uF.
-GPIO dati tecnici
Gli ingressi/uscita hanno una tensione massima di 3,3V allo stato alto e possono fornire un massimo di 40mA.
riferimenti
Questo articolo e’ una traduzione parziale dell’ articolo seguente
Per limitare l’uso della cpu ad un singolo processo in debian/ubuntu si puo utilizzare un programma scritto in C dal nome cputool.
Questo software non e’ installato di default ma si puo installare dai repository ufficiali con il comando:
$: sudo apt install cputool
al termine dell installazione eseguire un top per identificare il pid del processo da limitare
$: top
se per esempio vogliamo limitare il processo firefox con id = 8726
scriviamo :
$: sudo cputool –cpu-limit 15 -p 8726
dove 15 sta ad indicare che il pid 8726 non potra’ utilizzare piu’ del 15% della cpu
chiaramente il prograsmma firefox risultera’ rallentato ma utilizzabile e non blocchera’ tutto il resto del sistema se dovesse superare la richiesta di CPU.
E’ possibile limitare non solo un pid ma anche un gruppo di pid