+1 500 000 prodotti nell’offerta

6000 pacchi giornalmente

+300 000 clienti da 150 paesi

Quick Buy Preferiti
Carrello

Come programmare un microcontroller? Linguaggi di programmazione per microcontroller più diffusi

Data di pubblicazione: 25-03-2024 🕒 12 min di lettura


I microcontroller inizialmente venivano utilizzati nei dispositivi sviluppati dalle aziende manifatturiere e dai grandi impianti industriali, poiché gli strumenti di prototipazione e i compilatori utilizzati per scrivere il software erano molto costosi. Inoltre, l'obbligo di ordinare un'ampia serie di microcontroller OTP con una maschera ROM (programmabile una sola volta) era terribilmente costoso e ripagava solo nella produzione di grandi volumi. Successivamente, i microcontroller sono stati dotati di memoria Flash, che ne ha ridotto notevolmente il prezzo e migliorato la funzionalità, e ha fatto sì che trovassero anche la loro strada nelle mani degli appassionati di elettronica. Allora si è scoperto che molti dispositivi possono essere costruiti a prezzi molto economici, pur dotandoli di microntroller.

  • Informazioni base sui microcontroller e sui linguaggi di programmazione
  • IDE – ambiente programmistico
  • Assembly
  • Linguaggio C
  • Linguaggio C++
  • Python e MicroPython
  • Java
  • Altri linguaggi di programmazione

Microcontroller, microprocessori e linguaggi di programmazione

All'inizio dello sviluppo di questa tecnologia, era difficile dire in modo inequivocabile cosa fosse un microcontroller e cosa fosse un microprocessore. Al giorno d'oggi sappiamo che un microcontroller, oltre al processore (la cosiddetta CPU), contiene una memoria di programma non volatile e una serie di circuiti periferici che gli consentono di scambiare dati con l'ambiente. Tuttavia, all'inizio, i microcontroller avevano solo porte I/O e una piccola quantità di RAM statica, e la memoria contenente il codice del programma e la maggior parte delle periferiche erano collegate come chip esterni. Oggi sappiamo che un microprocessore dispone di una o più CPU, mentre un microcontroller dispone di un intero ecosistema, che è aperto a chip collegati esternamente, ma anche senza di essi può funzionare correttamente quando viene collegato all'alimentazione. Per dirla in breve possiamo dire che un microcontroller è un minuscolo microcomputer in un unico alloggiamento, in grado di eseguire compiti complessi nel nostro dispositivo.

Da quando i microcontroller sono apparsi nelle applicazioni più diffuse, ha luogo una discussione sui loro linguaggi di programmazione. I sostenitori e gli oppositori delle varie soluzioni discutono tra loro sui vari vantaggi e svantaggi dei vari linguaggi, il mercato sottopone a una dura verifica le loro tesi, e nonostante queste discussioni, è difficile non notare che alcuni linguaggi di programmazione e soluzioni tecniche che erano popolari in passato oggi sono assenti. Un esempio perfetto è il linguaggio Pascal, che un tempo era promosso come il miglior linguaggio per l'apprendimento della programmazione, ma oggi quasi nessuno lo conosce o se ne ricorda.

A nostro avviso, la discussione sui linguaggi di programmazione non ha molto senso: ognuno ha i propri vantaggi e svantaggi, e dipende solo dalle capacità del programmatore se è in grado di sfruttare i vantaggi e completare il compito nonostante possibili imperfezioni. I linguaggi di programmazione sono come le lingue straniere. Conoscerne uno nuovo apre una nuova prospettiva e nuove opportunità per il programmatore. Conoscendone molte è possibile scegliere la lingua corretta per una determinata applicazione e non adattare l'applicazione alle funzionalità della lingua. Diamo una breve occhiata ai linguaggi più diffusi utilizzati per programmare i microcontroller.

Ambiente di programmazione

I microcontroller odierni sono molto più potenti di molti dei vecchi microprocessori di punta utilizzati nei personal computer. Di conseguenza, anche gli strumenti utilizzati per creare software per microcontroller sono stati notevolmente migliorati nel corso degli anni. Al giorno d'oggi questi non sono tanto compilatori di linguaggi in sé, ma ambienti di sviluppo integrati chiamati IDE. Si può sostenere che la popolarità di un determinato linguaggio di programmazione dipenda in gran parte dal suddetto IDE e dalle possibilità che offre.

L'IDE preferito da molti sviluppatori è Visual Studio Code. Esistono versioni di questo ambiente disponibili per Windows e Linux, quindi anche i sostenitori del cosiddetto open source possono utilizzarlo. Visual Studio Code assume la forma di un editor in cui, come moduli sono collegati gli strumenti. A seconda del tipo di microcontroller, ve ne sono così tanti che un potenziale utente non ha tanto problemi di disponibilità, ma di scegliere quello appropriato. Si tratta ad esempio di moduli che facilitano l'orientamento nel codice del programma evidenziando le parole chiave e cambiandone il colore, di moduli che permettono il debugging (esecuzione del programma) utilizzando un simulatore e "in circuito" (in un microcontroller saldato sulla scheda), il versioning del codice e molte, molte altre. E soprattutto, Visual Studio Code non è legato a nessun linguaggio di programmazione specifico e tra i moduli si possono trovare numerosi compilatori di linguaggi diversi, per diverse famiglie microcontroller e microprocessori. Inoltre è possibile trovare un compilatore e un bootloader per Arduino, che sono certamente un po' più complicati da usare, pertanto destinati ad utenti più avanzati, ma assicurano meccanismi che, a detta di molti utenti, superano l'IDE disponibile con Arduino e sono molto più simili a quelli che si incontrano nel lavoro professionale.

Si può dire che i moderni ambienti di programmazione sono molto simili tra loro. Nella maggior parte dei casi, non vi è alcun problema a "cambiare", come accadeva una dozzina di anni fa. Le funzionalità e il funzionamento dei singoli IDE sono simili, indipendentemente dal modello del microcontroller selezionato, poiché anche questi (a parte il numero di bit in una parola) differiscono sempre meno in termini di capacità e risorse.

Infine vale la pena ricordare che il processo di sviluppo di programmi per microcontroller è molto diverso dalla creazione di programmi per PC. Ciò poichè hanno molta meno memoria e il loro core ha prestazioni molto più basse. I compilatori di linguaggi moderni disponibili per i microcontroller consentono trasformazioni complesse delle variabili simili a quelle dei PC, tuttavia non vengono eseguite in modo relativamente veloce. Pertanto quando si crea un'applicazione per un microcontroller, è sempre necessario essere consapevoli del fatto che alcune azioni verranno eseguite a una velocità inferiore: le operazioni sui numeri con la virgola mobile consumano molte delle risorse scarse e vengono eseguite molto più lentamente rispetto all'uso della FPU disponibile nella maggior parte dei microprocessori moderni.

Assembly

Le persone che si occupano professionalmente di programmazione di microcontroller dovrebbero conoscere almeno le basi del linguaggio di programmazione più semplice, ovvero il linguaggio assembly. C'è una trappola nella parola "più semplice" poiché è un linguaggio con funzionalità molto semplificate, nascoste sotto i singoli comandi, ma ha molti comandi e richiede anche la scrittura di comandi più complessi in sequenze di operazioni semplici. Allo stesso tempo, costringe il programmatore ad avere una buona conoscenza dell'hardware, poiché vi sono differenze significative a seconda del tipo di microcontroller, che possono renderlo difficile da padroneggiare. Tuttavia, una buona conoscenza dell'assembly permette di comprendere il funzionamento di un microcontroller e quindi permette di sfruttare al meglio le sue possibilità. Il linguaggio assembly sarà utile anche per le persone che scrivono in altri linguaggi, per creare moduli o inserimenti nel codice di linguaggi di livello superiore se manca una funzionalità o il funzionamento del programma richiede un'ottimizzazione.

Perché vale la pena padroneggiare il linguaggio assembly?

E' un dato di fatto che quando si scrive in un linguaggio di livello superiore, non si è obbligati a conoscere il linguaggio assembly e infatti può capitare che non vi sarà mai bisogno di utilizzarlo ed effettuare "inserimenti"; tuttavia senza la sua conoscenza è difficile capire ad es. cosa si nasconde sotto la moltiplicazione delle variabili o l'indirizzamento e la lettura di quelle che si trovano nello spazio di indirizzamento esterno del microcontrollore. Inoltre è difficile immaginare quante operazioni deve eseguire un core a 8 bit se utilizziamo numeri con virgola mobile con una lunghezza, ad es. di 64 bit. Inoltre è difficile capire cosa sia un bit o un byte e quale sia la loro importanza nel registro o nella memoria del microcontrollore.

L'assembly è un linguaggio di programmazione molto semplice. Non è vero che solo i programmisti d'élite possono scrivere programmi con il suo utilizzo. Chiunque si prenda del tempo per capire come funziona il core del microcontroller può imparare la programmazione nel linguaggio assembly. Forse questo è il motivo principale (comprendere come funzionano le CPU e le periferiche) per cui l'assembly è considerato difficile.

Assembly e ridondanza del codice

Il linguaggio assembly è un linguaggio elementare. Qualsiasi linguaggio di alto livello, ad es. C, durante la compilazione viene convertito in comandi in linguaggio assembly. Inoltre, le singole istruzioni del linguaggio di alto livello devono comunicare tra loro scambiandosi costanti e variabili sotto forma di risultati computazionali o array. Di conseguenza l'autore del compilatore deve creare alcuni meccanismi di scambio di dati, nonché allocare parte della memoria operativa nello stack di sistema e in altri meccanismi. Di conseguenza ogni linguaggio di programmazione di alto livello ha una certa ridondanza del codice. Questa ridondanza è tanto maggiore quanto più semplice è l'uso del linguaggio di alto livello.

L'assembly stesso non aggiunge comandi ridondanti. Possono essere aggiunti solo dallo sviluppatore del programma. Pertanto il programmatore ha la capacità di influenzare in ultima analisi sul tempo di esecuzione di un determinato processo e determinarne la durata in modo molto preciso. Questo è il motivo principale per utilizzare l'assembly per gestire le attività che devono essere eseguite in tempo reale. A volte si sente l'opinione che il linguaggio assembly permetta di controllare realmente il microcontrollore. Infatti, i tempi di esecuzione delle funzioni o delle subroutine possono essere i più brevi e il programmista può influire sulla disposizione finale delle variabili nella memoria. L'assembly offre un'opportunità pratica che verrà utilizzata o meno, poiché dipende in gran parte dalle capacità del programmista.

Combinare un linguaggio di livello superiore con il linguaggio assembly

L'assembly è uno strumento molto ingrato quando si tratta di implementare un'interfaccia utente, che nella maggior parte delle applicazioni occupa almeno il 70% del codice. Come dimostra la pratica della programmazione, acquisendo pratica e programmando in linguaggio assembly, dopo un po' di tempo eseguiremo una serie di funzioni già pronte per azionare display, tastiere e vari modi di segnalare lo stato del dispositivo, tuttavia ogni volta sarà l'interfaccia utente a cui dedicheremo la maggior parte del tempo. Pertanto, vale la pena combinare un linguaggio di livello superiore e un linguaggio assembly: il primo darà la possibilità di implementare e modificare rapidamente l'interfaccia utente, il secondo consentirà di gestire le attività in tempo reale. Contrariamente alle apparenze, la combinazione di linguaggi di programmazione è facile da padroneggiare e i vantaggi della loro combinazione sono evidenti. Per l'utente quando si inseriscono le impostazioni, non importa affatto se la funzione che supporta la lettura dei tasti richiede dieci o cinquanta cicli macchina sulla CPU, non se ne accorgerà comunque, ma di solito ridurrà il tempo di esecuzione dell'applicazione sarà di grande importanza per il programmista.

A volte, tuttavia, non è possibile combinare un linguaggio di livello superiore con un linguaggio assembly per vari motivi. Tale motivo può essere, ad es. la dimensione della memoria di programma del microcontroller. Qualsiasi linguaggio di livello superiore, a seconda del livello di ottimizzazione del codice oggetto, della qualità del compilatore e dell'attività da svolgere, produce codice oggetto binario con una dimensione media doppia rispetto a un programma in linguaggio assembly funzionalmente comparabile. Naturalmente, per le applicazioni tipiche non ha molta importanza, poiché i prezzi dei microcontroller con diverse dimensioni di memoria di programma sono molto simili. A volte, tuttavia, la modifica della dimensione della memoria comporta la necessità di sostituire il microcontroller o cambiare il fornitore, e questo può essere problematico.

Altri svantaggi del linguaggio assembly

L'assembly ha un'altra caratteristica non così buona. I programmi scritti in linguaggio assembly sono molto difficili da trasferire su un altro modello di microcontroller, anche con lo stesso core, per non parlare dei casi in cui il core non differisce nella lunghezza delle parole, ma è diverso in termini di struttura o architettura hardware (ad es. i programmi scritti per 8051 su AVR e al contrario). Molto spesso questo trasferimento richiede non solo un cambiamento nella struttura del programma, ma anche un approccio completamente diverso al problema o la distribuzione di una singola istruzione in un certo numero di passaggi parziali. Un altro ostacolo sarà che il linguaggio assembly è molto legato all'hardware, pertanto ogni core ha il proprio linguaggio assembly. Spesso sono molto simili, ma sono comunque diversi poiché le modalità e i modi di indirizzare i dati da parte della CPU, il numero di bit disponibili nei registri di stato e le periferiche che cooperano con il core sono diversi.

Per molti hobbisti, il tempo di implementazione dell'applicazione non ha importanza. Se si fa qualcosa con passione, per sé stessi, allora il calcolo economico è in qualche modo meno importante. Ciò che conta è la sfida e la soluzione al problema, non il tempo trascorso a lavorare sul dispositivo. Tuttavia, per i professionisti, dove il tempo è essenziale dall'idea all'implementazione, il linguaggio assembly può spesso essere la scelta peggiore, poiché il tempo necessario per eseguire il programma e trovare errori può essere molto lungo. Ed il tempo necessario è tanto maggiore, quanto più complesso è il compito.

Linguaggio C

Una dozzina di anni fa, il linguaggio C stava battendo i record di popolarità tra i programmisti di microcontroller. Tuttavia, lo sviluppo della tecnologia e la disponibilità di risorse hardware più grandi ed economiche hanno fatto sì che abbia perso il suo primato, diventando il capostipite di altre soluzioni, di cui parleremo più avanti.

Il linguaggio C come linguaggio di alto livello non presenta due dei più gravi inconvenienti dell'assembly. Innanzitutto, i programmi scritti in linguaggio C possono essere trasferiti tra microcontroller in una certa misura e in determinate condizioni, anche con architetture diverse. In secondo luogo, la programmazione in C non richiede che il programmatore abbia un'ottima conoscenza dell'architettura del microcontroller, pertanto è molto più facile analizzare e trovare errori. I compilatori di linguaggio C sono disponibili su molte piattaforme, come Windows e Linux, e il linguaggio stesso è noto a una gamma molto più ampia di programmisti rispetto al linguaggio assembly, che richiede una conoscenza approfondita dell'hardware: apprendere un nuovo dialetto del linguaggio richiede solo il cambiamento delle abitudini in relazione a risorse relativamente limitate.

Un programma scritto in C è più leggibile del suo equivalente in linguaggio assembly. Ciò perché, ad es. l'aggiunta di due numeri a 32 bit può essere inclusa in 1 riga di codice (compresa la dichiarazione delle variabili), mentre la stessa operazione in linguaggio assembly, se abbiamo a che fare con un core a 8 bit, richiede una decina di righe di codice e tiene conto dei bit di trasferimento. Quando scrive in C, il programmista ottiene anche un ottimo strumento sotto forma di indicatori. Non sono disponibili in linguaggio assembly e rendono il lavoro molto più facile per un programmista esperto.

La sintassi del linguaggio C è molto più facile da capire e analizzare rispetto al linguaggio assembly. La maggior parte di questa sintassi non dipende dal tipo di microcontroller e, cosa più importante, molti linguaggi di programmazione ben noti sono basati sul linguaggio C, pertanto l'apprendimento del linguaggio C può essere un'introduzione alla padronanza e alla comprensione di altri compilatori. Sicuramente vale la pena conoscere il linguaggio C, o forse C++?

Linguaggio C++

Il compilatore C++ è un'estensione del compilatore C. Entrambi i linguaggi hanno una sintassi molto simile, tuttavia il C++ introduce estensioni derivanti dalle funzionalità aggiuntive di questo linguaggio di programmazione. La differenza più importante tra C e C++ è che il primo è un linguaggio procedurale e il secondo è un linguaggio orientato agli oggetti. Ed è importante notare che non è solo una questione di parole usate per descrivere i compilatori, questa distinzione è una delle suddivisioni più importanti nella programmazione. Questi approcci differiscono nella loro "filosofia" di programmazione e richiedono metodi diversi per organizzare il codice sorgente e le strutture di dati e accedervi. Il compilatore del linguaggio C++ consente di creare codice procedurale, ovvero lo stesso del C, e il compilatore C non consente di utilizzare metodi orientati agli oggetti.

A questo punto è sufficiente sapere che il C++ introduce un'estensione delle funzionalità del linguaggio C e dei meccanismi che non sono disponibili nel linguaggio C. Inoltre vale la pena sapere che grazie alla programmazione orientata agli oggetti, è molto più facile suddividere il lavoro all'interno di un team di programmisti, pertanto il C++ sarà una scelta ovvia per i progetti multilivello che richiedono un codice esteso.

Lo scopo di questo articolo non è quello di insegnarvi a programmare, ma solo quello di presentare un certo spettro di metodi e soluzioni disponibili, pertanto non discuteremo le differenze in dettaglio. Tuttavia, se potessimo dare un suggerimento alle persone che muovono i primi passi nella programmazione di microcontroller, vale sicuramente la pena conoscere il C++, poiché è un linguaggio molto popolare, disponibile per varie piattaforme e sistemi operativi, pertanto una volta appreso non dovremo preoccuparci di essere legati ad un produttore e hardware specifico.

Python e MicroPython

Negli ultimi anni, Python ha guadagnato sempre più popolarità. Inizialmente era disponibile come uno dei linguaggi di programmazione per personal computer, per poi passare alle applicazioni più popolari. Una delle varianti del Python progettate per i microcontroller è MicroPython, che funziona con un consumo minimo di risorse hardware, in un ambiente di microcontroller dall'equipaggiamento povero.

Python è un linguaggio interpretato, proprio come lo era il Basic. In altre parole, i comandi vengono recuperati ed elaborati in tempo reale e il codice sorgente non viene compilato prima di essere eseguito. Le varianti del Python progettate per i microcontroller sono ottimizzate per il funzionamento a basse risorse, anche se alcuni dei chip chiamati microcontroller hanno molte più risorse a loro disposizione rispetto ai primi PC, come ad es. l'IBM XT.

Python è uno strumento molto versatile. Viene utilizzato per una varietà di applicazioni: controllo di modelli, robot, dispositivi Internet of Things o smart building, dispositivi che si collegano tramite rete di telefonia mobile o Internet. Il suddetto MicroPython può essere utilizzato anche per programmare microcomputer basati su ESP8266, ESP32, o modelli che godono di grande popolarità come Arduino, Raspberry Pi, Raspberry Pi Pico e altri ancora. Trattandosi di un interprete e non di un compilatore, una delle sue caratteristiche è la possibilità di interagire con un microcontrollore. Questa funzione era disponibile nei vecchi modelli di personal computer programmati con il Basic. Tutto quello che bisognava fare era digitare un comando sulla tastiera e questo veniva eseguito all'istante. La stessa possibilità di interazione è assicurata dall'interprete MicroPython, che rende più facile testare l'applicazione e l'ambiente che lavora con essa. MicroPython inoltre dispone di un potente supporto sotto forma di una serie di librerie ed estensioni già pronte che facilitano vari compiti, dalla gestione dei sensori alla comunicazione con le periferiche.

MicroPython include molti moduli standard, ma non ce ne sono così tanti come nell'implementazione standard di Python. La versione completa di questo linguaggio ha un enorme ecosistema di librerie e moduli, che consente agli sviluppatori di sfruttare funzionalità e strumenti avanzati. Inoltre, alcune funzioni dinamiche avanzate potrebbero essere limitate o non disponibili in MicroPython.

Java

Come il Python, Java è stato adattato dai personal computer tradizionali e dalle applicazioni web. Nel mondo di tali computer, possiamo trovare sia interpreti Java, che compilatori. Per i microcontroller è stato sviluppato il linguaggio Java ME (Java Micro Edition), una variante del Java predisposta per lavorare con risorse limitate rispetto a un personal computer o un server.

Java ME è un sottoinsieme di Java SE progettato specificamente per dispositivi embedded e mobili con risorse limitate, come telefoni cellulari e dispositivi mobili. Java ME include alcune delle funzionalità del Java SE, fornendo al contempo nuove API specifiche per i dispositivi embedded, come la connettività Bluetooth, i servizi di localizzazione, le API dei sensori e altro ancora. Tuttavia, a causa delle limitazioni delle risorse di questi dispositivi, Java ME presenta alcune limitazioni rispetto a Java SE. Ad esempio, Java ME ha un set di API più piccolo rispetto a Java SE e non supporta la specifica Java completa.

Java è un linguaggio universale che può essere utilizzato per una varietà di applicazioni, tra cui la programmazione di microcontrollori e computer monoscheda (SBC). Java è popolare per le applicazioni desktop integrate grazie alla sua facilità di migrazione tra le piattaforme, all'affidabilità, alla flessibilità funzionale e alla facilità di modifica del codice. L'ecosistema Java fornisce molti strumenti, librerie e framework per aiutare gli sviluppatori a creare applicazioni di sistema embedded efficienti e affidabili. Java ME è inevitabilmente "equipaggiato" un po' più modestamente. Tuttavia, fornisce un ambiente di runtime leggero e potente, ottimizzato per dispositivi di piccole dimensioni e con risorse limitate.

A chi sono rivolti gli altri linguaggi di programmazione?

Chi programma microcontroller sa molto bene che ci sono molti altri linguaggi di programmazione disponibili oltre ai linguaggi di programmazione sopra menzionati. Purtroppo, il progresso tecnico e lo sviluppo di applicazioni che richiedono la connessione tramite varie interfacce hanno fatto sì che i linguaggi modellati sul Basic si siano quasi completamente estinti. È molto facile da imparare e alcune varianti hanno molte fantastiche funzionalità pronte all'uso, ma l'uso attuale del Basic non sembra andare oltre le applicazioni hobbistiche o l'istruzione elementare. Tra i programmisti, Python, C, C++ e Java sono i leader indiscussi e non sembra che questa situazione cambi presto. In passato, i metodi di programmazione basati su diagrammi di flusso sembravano essere il futuro. Come il Basic, hanno trovato la loro strada nelle scuole, dove vengono utilizzati per insegnare la programmazione, ma non si trovano nello sviluppo di applicazioni professionali.

Per capire perché ciò accade, bisogna separare i due mondi l'uno dall'altro. Il primo è il mondo delle applicazioni professionali. La loro creazione richiede il lavoro di un team di persone, e anche se pensiamo di aver scritto il programma da soli, "sotto" c'è un numero enorme di librerie di funzioni supportate dalla struttura orientata agli oggetti o modulare del nostro programma. Al giorno d'oggi quando conta il time to market, nessuno crea ad es. librerie per supportare la memoria FLASH da sola, se questa è stata realizzata e resa disponibile dal produttore dell'hardware. Pertanto un programmista professionista è condannato a lavorare in team, anche se non conosce i membri del proprio team. Inoltre necessita di una programmazione orientata agli oggetti, poiché gli darà la possibilità di sostituire i metodi in una determinata libreria che sono scomodi per lui, aggiungere variabili o classi, ecc. Il secondo mondo è costituito da applicazioni create per la soddisfazione, per il piacere, per il divertimento. In questo ambiente nessuno ha fretta, le soluzioni spesso vengono create solo per ottenere un certo risultato. Un hobbista può permettersi di creare biblioteche da solo e nessuno conterà i soldi e il tempo speso. Certo, nessuno vieta a un hobbista di lavorare in team o di utilizzare soluzioni già pronte, ma questa non è una priorità. Ed è per questo che un hobbista può utilizzare strumenti meno popolari, creare programmi in Basic, Pascal e altri linguaggi di programmazione di nicchia.

La prossima rivoluzione nella programmazione dei microcontroller sarà probabilmente innescata dalle tecnologie legate all'intelligenza artificiale. Forse il ruolo del programmista, proprio come fa ora la grafica quando si maneggiano algoritmi che generano immagini, diventerà una descrizione accurata delle funzionalità del programma, e un algoritmo di intelligenza artificiale appropriato genererà il codice e lo compilerà. Per ora, questa è ancora una visione del futuro e costituisce un argomento per un articolo separato, ma gli hobbisti stanno già utilizzando con successo l'intelligenza artificiale per creare codici semplici.

Transfer Multisort Elektronik (TME) è uno dei maggiori distributori mondiali di componenti elettronici, parti elettrotecniche, attrezzature da laboratorio e automazione industriale. Il catalogo include oltre 1.500.000 di prodotti di 1.300 produttori leader. I moderni centri logistici di TME a Łódź e Rzgów (Polonia), con una superficie complessiva di oltre 40.000 m², spediscono quasi 6.000 pacchi al giorno a clienti in più di 150 paesi.

TME investe anche nello sviluppo delle conoscenze e competenze di giovani ingegneri e appassionati di elettronica attraverso il progetto TME Education e supporta la comunità tecnologica organizzando la serie di eventi TechMasterEvent, promuovendo l’innovazione e lo scambio di esperienze.

LEGGI ANCHE