Newsgroup: it.hobby.elettronica.digitale
Titolo: Prime Esperienze con ESP8266 e il mondo Arduino

 
Ciao e Buone Feste
per chi ne sapesse meno di me
 
1)configurazione IDE ...pur non conoscendo nulla di Arduino,ho avuto  
l'impressione che tutto fosse nascosto dietro uno strato di librerie,debug  
impossibile ecc.
Ho provato allora a installare e configurare l'IDE EClipse,che uso da  
anni,con compilatore GNU e librerie RTOS...niente da fare...sempre qualche  
path sbagliato,configurazione sbagliata,Python ecc..ci ho perso un pò di  
ore e ho rinunciato
Sono passato all'IDE di Arduino 1.8.10 ..ed è come mi ero  
immaginato...però funziona,molto chiari i video di Paolo Aliverti  
#209-212  sulla preparazione del poco HW necessario
2) HW: scheda ESP-01 una schedina USB->TTL,da me modificata utilizzando  
LDO interno in SOT23 per avere i livelli logici a 3V invece di 5V,che  
qualcuno dice non sia necessario,qualcuno si.Serve 1 resistenza di pull  
up,un interruttore e un pulsante.Ho preso  3 schede ESP-01 + 3 schede  
programmazione per 14 euro circa.Tipo queste  
https://www.amazon.it/dp/B078J7LDLY/ref=psdc_473601031_t1_B01LK83TX0
 
3) SW Una specie di C++,vengono messe a disposizione delle classi,con  
possibilità di overload dei metodi.Nessun autocompletamento
4)Compilazione...apparentemente lunghissima(circa 30 secondi),paragonata  
al codice,che però chissà cosa cela dietro le librerie
5)Debug...solo tramite Serial.print...non sembra nemmeno possibile vedere  
la dichiarazione di una variabile
 
Devo ammettere che il mondo di librerie collegato ad Arduino rende le cose  
facili,magari sbaglio perchè ne so ancora poco,ma da quello che ho visto  
non si impara niente riguardo al microcontrollore,registri ,stack ecc


guardo subito,grazie...
 
guardato,è chiaro che sono un'altra cosa
 
Mi eviterebbero di collegare un filo al pin 6 del chip per usare l'ADC
cosa non difficile ma esteticamente deprecabile.
 
Costano un pò di più ma è evidente che danno di più
 
Grazie
 
 
PS altra cosa che ho notato è che in questa specie di C alcune cose non  
funzionano come ci si aspetterebbe:
per esempio,per comporre un uint16_t partendo da 2 uint8_t ...non funziona  
lo shift a sinistra...deve essere guasto,mentra la moltiplicazione si
<<8 non funzionava mentre *256 si
Può essere?

 visto non si impara niente riguardo al microcontrollore,registri ,stack ecc
 
Esatto. E' un sistema pensato per permettere ai "poco addetti" di fare 
cose che altrimenti non proverebbero neppure a fare (e agli addetti di 
farle divertendosi in modo "rilassato"... fermi restando i limiti 
dell'architettura).
 
Il linguaggio e` il C++ corredato di una serie di librerie gia` incluse, 
e di un piccolo strato software che gestisce in modo trasparente le 
periferiche.
 
Non va a sostituire l'uso "classico" di un micro, che diventa 
indispensabile appena si vogliono gestire segnali un po' piu` 
complessi/veloci (ad esempio su un ArduinoUno 16MHz una digitalRead da 
un pin impiega 5 microsecondi a causa delle librerie, mentre una lettura 
diretta della porta -comunque possibile ma perdendo la portabilita`- 
impiegherebbe meno di 200 nanosecondi).
 
Per fare le luci del presepe, un sensore movimento, o un irrigatore, la 
lentezza delle librerie e` irrilevante.
 
Il lato negativo e` la proliferazione di una popolazione di "copia 
incolla" che produce oggetti (anche pericolosi quando si tratta di 
motori e tensione 230V) senza conoscere quasi nulla ne di 
elettrotecnica/elettronica ne di programmazione.

Come dice Claudio, è pensato per far avvicinare ai
 microcontrollori persone che, altrimenti, non sarebbero nemmeno
 da dove cominciare. Anch'io, nel 2015, ero esattamente in tale
 condizione, e solo ieri mi sono deciso ad acquistare un buon
 testo di C++. Arduino è pensato come un gioco. Se provi a fare
 qualcosa seriamente e con precisione, ti trovi di fronte un mare
 di ostacoli imprevisti, per cui devi cominciare a rivedere tutto
 ciò che hai imparato (uso di millis() anziché i delay(); uso
 delle stringhe del C anziché la classe String; ...).
 
Purtroppo, seppure in rete si trovino moltissime informazioni e
 programmi già pronti, la maggior parte sono scritti a livello
 base. Non è come per i PIC di anni fa, che bisognava conoscere
 bene per fare qualsiasi cosa, anche semplicissima (per cui
 anch'io non mi ci sono mai avvicinato) e quindi se funzionava
 funzionava bene!
 
Anche nei laboratori di Arduino ci si concentra più sulla
 meccanica e sulle funzionalità che sulla programmazione pulita,
 formale ed efficace. Proprio questo manca: un vero
 approfondimento sulla programmazione (che coinvolgerebbe anche
 l'elettronica, che a molti manca!). Ho notato, però, che da
 qualche tempo anche nel forum di Arduino stanno riconoscendo i
 limiti di certe funzioni e ne sconsigliano l'uso.
 
-- 
Vieni a trovarci su Youtube: 
goo.gl/522kv4
 

Un altro limite di Arduino è il desiderio di portabilità. Ciò
 impedisce di fare ottimizzazioni. Ad esempio, con un digitalWrite
 ci vuole un attimo a indirizzare un pin diverso, mentre con un
 veloce PORT è più complesso. Mi sono sempre chiesto, però, quanto
 la portabilità serva veramente: con tanti programmi in rete, è
 proprio necessario poter portare un programma da un
 microcontrollore a un altro (comunque diversi!)? Non sarebbe
 meglio, quando necessario, far sforzare un po' la gente imparando
 qualcosa? Tra i commenti potrebbero essere messe le informazioni
 necessarie per far modifiche.



Salve
si,non metto in dubbio e apprezzo l'intenzione di Arduino di permettere di  
sviluppare idee;
mi aveva colpito,diversi anni fa quando ad una fiera dell'elettronica  
avevo visto un corso di Arduino su maxi schermo,seguito da 12enni e over  
70.
Non volevo certo apparire come "purista dei veri microcontrollori".
Dicevo soltanto che ,se devo trovargli un difetto, mi pare che si mantenga  
ad un livello di astrazione così comodo non spingerà nessuno ad andare ad  
approfondire cose che non gli servono,ma che facendolo potrebbero essere  
utili per una comprensione più completa,apprezzabile anche a livello  
professionale

Purtroppo è questo il problema!
Tempo fa volevo realizzare un frequenzimetro (poi ho trovato un
 Racal-Dana a buon prezzo) e ho notato che tutti lo fanno con
 pulseIn, anziché usare i contatori. Una persona del forum, con
 esperienza sui PIC, infatti, ha chiesto per quale ragione non si
 trovi in rete il progetto di un frequenzimetro con Arduino che
 usi direttamente i contatori...


Vieni nel forum di Arduino! C'è gente molto preparata.


 
Ma non parlare MAI di 230V :)

Vieni nel forum di Arduino! C'è gente molto preparata.
 
Quale indirizzo del forum?
 
Come tu dici, se si vuole superare l'approccio semplice di Arduino,
come/dove trovare altre informazioni per lo stesso processore?
Oltre naturalmente al sito del costruttore.

 ha scritto:

se non sbaglio il primo Arduino usava un AVR di ATMEL,ora Microchip mi pare
 
non li conosco,ma credo che abbiano il loro ambiente indipendente da  
Arduino(si chiama ancora AVRSTudio?),e voglio sperare che la scheda  
Arduino con la sua interfaccia possa essere utilizzata come se fosse una  
scheda qualsiasi montante quel micro e programmabile-debuggabile appunto  
tramite la presente interfaccia USB.
 
ATMEL e Microchip hanno sempre avuto una bella comunità con esempi e guide
 
E anche li credo che si possa partire da esempio blink led,con la  
differenza di poter usare istruzioni che comandano direttamente registri  
GPIO e Timer.
Voglio sperare che aiutino inizialmente per la configurazione del  
linker,del clock ecc

forum.arduino.cc
 
In international trovi la sezione italiana.


 GPIO e Timer.
 
I registri interni si possono usare tranquillamente anche con l'ambiente 
Arduino, basta leggersi i datasheet dei micro ;)

 ha  
scritto:

ah ecco,questo non sapevo...credvo che Arduino lo "proibisse" nascondendo  
tutto dietro
il suo strato software

L'UNO usa l'ATmega328p, che puoi anche montare su mille fori, col
 quarzo o con l'oscillatore interno a 8 MHz o meno (che ha una
 tolleranza, anche in funzione della temperatura, del
 10%).


   10%).
 
Non ha molto senso; secondo me anche in funzione embedded val sempre la 
pena di utilizzare quelle che, sempre secondo me, sono le schede arduino 
più comode, ovvero la Nano (43x8mm) con le stesse funzionalità del 
classico Ardunino 1 quindi col chip USB, oppure il Pro-Mini sempre 
coll'ATmega328p (34x8mm) che manca della USB integrata, ma che si 
programma ed ottimizza collegandolo all'adattatore USB volante che poi 
stacchi quando il tutto funziona. Tutto è di piccolo ingombro e prezzo; 
ora le schedine clone dei cinesi costano tipo 2,5 Euro/cad.
Da non dimenticare il piccolo mostro non Arduino, ma micro Atmel 
ATtiny85 con 8 piedini (230 pagine rivelatrici di manuale!)
ancora trovabile in formato PDIP 8 Pin che si può inserire nella 
bradboard, oppure anche a montaggio sup, quindi quasi microscopico.
 
Per la wifi ho provato a fare esperimenti con l'ESP8266, ma l'ho trovato 
instabile come connessione, naturalmente per causa mia, ne sono certo, e 
quindi mi sono rivolto al fenomenale ESP32 (38 terminali, il ESP32 non è 
una scheda di sviluppo ma una schedina fatta dal produttore del chip 
(18x25mm)che si può programmare con l'IDE di Arduino (come l'altro del 
resto). Ha wifi stabile, blutooth, terminali multifunzione, sonno 
profondo, fino a 10 funzioni touch); giusto ieri ho verificato la 
programmazione OTA (programmazione via wifi) e funziona bene. Ne ho 
comperato in Cina una decina con una base per programmarli ad 
inserzione, con meno di 5 Euro cad. Ora lo sto sudiando.
Per ciò che mi riguarda l'operazione Arduino è una gran cosa che ha 
aperto al mondo i microcontrollori a basso prezzo perchè ti permette di 
programmare molto facilmente oggetti elettronici, ma riesce anche a fare 
cose complesse e difficili, quindi pone *limiti* distanti alle persone 
che si dilettano (basta leggere le librerie)... e questo è un bene 
perchè sei stimolato.
Per dire io sono abbonato alla scienze proprio perchè ci sono articoli 
troppo difficili da capire e quindi ci provo, e qualche volta capisco anche.
 
 
-- 
_  _
0  0;
  @-
 
E. Delacroix

 quindi mi sono rivolto al fenomenale ESP32 
 
E' quasi un anno che sono passato all'ESP32 (dall'ESP8266) e confermo tutto: è una meraviglia, stabile, veloce, tanta memoria, tanti pin di I/O e tanta roba utile (PWM, OTA update, pulse counter, hardware JTAG, ecc.). Stabile sia col WiFi che col BT. Soprattutto se devi creare un "pezzo unico" o quasi, i pochi spiccioli di differenza rispetto a un ESP01/8266 valgono assolutamente la pena. Le versioni SMD sono anche relativamente facili da saldare con attrezzatura casalinga. Unica cosa: occhio che alcune versioni a basso costo delle schede di sviluppo hanno componentistica di contorno (regolatori di tensione, ecc.) non proprio di primissima qualità.
 
m.

Un altro limite di Arduino è il desiderio di portabilità. 
 
Ho capito che una libreria per arduino serve ad utilizzare un certo
componente X. 
Domando: quanto la stessa libreria è esportabile su un altro
processore, come ad esempio ESP8266 e/o ESP32 ?
 
Ancora: volendo utilizzare una libreria per arduino su un altro
processore, quale la strada da seguire (con una limitata conoscenza
del C++)?

 una limitata conoscenza del C++)?
 
Dico un'ovvietà: dipende da tante cose, da cosa deve fare
la libreria e da quanto deve essere efficiente.
Generalmente salvo eccezioni va riscritto tutto o molto, 
lasciando per quanto possibile la stessa interfaccia, cosa 
nemmeno questa sempre possibile.
 
 
-- 
- Che splendida coppia, da quanto siete sposati?
- Io tre anni, e lui cinque.
 

nemmeno questa sempre possibile.
 
Recentemente ho usato senza problemi la libreria  "softwareserial.h"
sia su AtMega328P che su ESP82886.
 
Deduco che la compatibilità è possibile ma non certa.
 
Esiste un modo per fare una valutazione preliminare? 
Un simulatore?
 
Ancora: la prova pratica su un altro processore, lo può danneggiare?

 
no, se per quel processore è presente una libreria equivalente.
Se non c'e', non sara' nemmeno possibile compilare.
Ovviamente NON va caricato su un processore il codice compilato per
un'altro processore e/o con un altro tipo di hardware.
 
AA
 
 
 

 funzioni per poterle utilizzare in altro codice.
 
In generale hai ragione, ma sulla piattaforma Arduino, le "librerie" vengono distribuite sotto forma di file sorgente, a volte solo header, e non di file binario compilato (.a/.so/.lib). Visto che si tratta nel 99.9% dei casi di codice sotto una licenza di tipo open source o free software, è possibile, e risolve anche il problema dell'utilizzo della "libreria" su hardware diverso dall'Arduino originale. 
 
Fra l'altro il dover ricompilare buona parte delle cosiddette librerie è il motivo dietro ai tempi di compilazione spesso estremamente lunghi per programmi anche banali (es. la libreria u8g2 che contiene qualche decina di file sorgente che vengono tutti compilati anche se il tuo programma ha cinque righe che visualizzano "Ciao" sul display LCD. Che poi il linker scarti buona parte di questo lavoro è un altro discorso).
 
m.


Ok,grazie, non ho dimestichezza con gli IDE arduino :-)
Quindi se hai il codice sorgente, è anche (relativamente) facile 
adattare il proprio hardware mantenendo le interfaccie 'standard'
AA
 

 adattare il proprio hardware mantenendo le interfaccie 'standard'
 
Sì, la cosa funziona più o meno così: la piattaforma Arduino (non il chip) definisce una serie di funzioni standard per l'accesso all'hardware (es. pinMode o digitalWrite). Se usi un Arduino "vero" (quello con l'Atmel 3128 o simili, per capirci), queste funzioni vanno direttamente sull'hardware del processore.
 
Se usi un altro processore (mettiamo l'ESP8266) esiste uno strato di codice intermedio che emula queste chiamate e che va sull'hardware specifico. In questo modo puoi usare qualsiasi (o quasi) libreria che usi le interfacce di Arduino. Questa libreria, nel caso dell'ESP8266 e o dell'ESP32 si chiama "Arduino-core" (
https://github.com/esp8266/Arduino
).
 
Ovviamente se una libreria (perché scritta male) prova ad accedere direttamente all'hardware, andrà in errore o provocherà un crash del processore. Così come se viene usato un pin sbagliato o non disponibile su un dato processore, o se si cerca di utilizzare una caratteristica che funziona in modo diverso. 
 
Però in questo modo hai una ottima compatibilità. Lo svantaggio è che il codice è più lento,  per via del livello intermedio di "interfaccia" (cosa che normalmente non è un gran problema) ma soprattutto che occupa molta più memoria, cosa che invece può essere determinante. E' per questo che, oltre che per sfruttarne l caratteristiche avanzate, che con processori come ESP-8266 e ESP32 si preferisce in genere utilizzare il kit di sviluppo nativo (ESP-IDF) che però è più complicato da usare e dispone di meno pezzi pre-assemblati.
 
Questo non vuol dire che c'è un modo giusto e uno sbagliato: puoi benissimo (come ho fatto io) partire dalla piattaforma Arduino per muovere i primi passi e poi passare, se vorrai, a un ambiente più avanzato; o anche rimanere in Arduino se vuoi solo fare semplici esperimenti.
 
m.
 


wrote:

Grazie a tutti
Dino