Come utilizzare i pin e i led ESP8266-01

Aggiornato il 1 luglio 2018 - aggiunta nota sulla riprogrammazione quando GPIO0 viene utilizzato come output.

Aggiornato il 2 aprile 2018 per mostrare i LED ESP8266-01. Puoi controllare questi led dai pin a cui sono collegati.

introduzione

ESP8266-01 è un chip abilitato WiFi a basso costo. Ma ha un I / O molto limitato. A prima vista, una volta configurato per la programmazione, vengono utilizzati tutti i pin.

Questo istruttivo si basa sull'utilizzo dei pin ESP8266 GPIO0 / GPIO2 / GPIO15 per mostrarti come ottenere quattro (4) input / output utilizzabili per il tuo prossimo progetto ESP8266-01 e come utilizzare IC2 per ottenere ancora più input.

Il codice qui presuppone che tu stia programmando il modulo usando il setup IDE di Arduino come descritto su //github.com/esp8266/arduino in Installazione con Boards Manager . Quando apri Gestione schede dal menu Strumenti → Scheda e seleziona Tipo di contributo e installa la piattaforma esp8266.

Queste istruzioni sono disponibili anche su www.pfod.com.au all'indirizzo ESP8266-01 Pin Magic

Passaggio 1: pin ESP8266-01

ESP8266-01 è il modulo ESP8266 più piccolo e ha solo 8 pin. Di questi VCC, GND, RST (reset) e CH_PD (selezione chip) non sono pin I / O ma sono necessari il funzionamento del modulo. Questo lascia GPIO0, GPIO2, TX e RX disponibili come possibili pin I / O, ma anche questi hanno funzioni pre-assegnate. GPIO0 e GPIO2 determinano la modalità di avvio del modulo e i pin TX / RX vengono utilizzati per programmare il modulo e per l'I / O seriale, comunemente utilizzati per il debug. GPIO0 e GPIO2 devono avere resistori pull-up collegati per garantire il corretto avvio del modulo.

Passaggio 2: Suggerimenti per la programmazione ESP8266 (espcomm non riuscito)

Quando si programma ESP8266 utilizzando l'IDE Arduino (consultare ESP8266-01 Wifi Shield) a volte (spesso) si ricevono messaggi di errore nell'IDE Arduino come: -
esp_com open non riuscito
errore: impossibile aprire COM33
errore: espcomm_open non riuscito
errore: espcomm_upload_mem non riuscito

In tal caso, segui questi passaggi per farlo funzionare: -

  1. Verifica di aver selezionato la scheda ESP8266 nel menu Strumenti di Arduino
  2. Verifica di aver selezionato una porta COM nel menu Strumenti di Arduino
  3. Spegnere e riaccendere l'ESP8266 con GPIO0 collegato a terra (applicazione di alimentazione pulita, vedere di seguito)
  4. Se 3) non lo risolve, scollegare il cavo USB dal computer attendere qualche secondo e ricollegarlo
  5. Se 4) non viene risolto, collegare il cavo USB dal PC, chiudere Arduino IDE, aprire Arduino IDE, ricollegare il cavo USB.

Quando si alimenta ESP8266, dopo aver messo a terra GPIO0, assicurarsi che sia applicato in modo pulito. Non muovere la connessione. Il led ESP8266 dovrebbe semplicemente accendersi e rimanere acceso senza flash.

Passaggio 3: Miglior trucco - Usa I2C

Il trucco migliore per ottenere input extra in ESP8266-01 è utilizzare un'interfaccia I2C.

Una scelta è utilizzare GPIO0 e GPIO2 come bus I2C.

Le resistenze di pull-up necessarie per avviare correttamente il modulo possono raddoppiare poiché le resistenze di pull-up del bus I2C e gli altri componenti slave sul bus sono open collector e quindi non devono abbassare il bus all'accensione. Tuttavia, in alcuni casi gli slave, in particolare quelli con batteria di riserva, possono rimanere bloccati e tenere premuto il bus. In questi casi sarà necessario isolare il bus fino a quando ESP8266 non attraverserà la fase di avvio.

È possibile evitare questo problema utilizzando TX e RX per il bus I2C

Alcune cose da notare:

  1. GPIO1 (TX) viene utilizzato come linea dati, poiché all'accensione otterrai sempre un output di debug su GPIO1. Non c'è modo di sopprimere questo output, ma la linea Clock (RX) sarà mantenuta alta, quindi nessuno di questi dati verrà sincronizzato sugli slave
  2. Durante la programmazione di ESP8266, la linea RX è collegata all'uscita del programmatore. Al termine della programmazione, ESP8266 si riavvia e il resistore 330 Protection impedisce il cortocircuito RX sull'unità di uscita del programmatore.
  3. Le resistenze della serie I2C offrono una protezione simile per TX, RX da cortocircuiti sul bus I2C

ESP8266 è un dispositivo da 3, 3 V, quindi preferibilmente utilizzare slave I2C da 3, 3 V. Oggigiorno molti dispositivi I2C, ma non tutti, sono 3.3V. "In generale, in un sistema in cui un dispositivo ha una tensione maggiore di un altro, potrebbe essere possibile collegare i due dispositivi tramite I2C senza alcun circuito di spostamento di livello tra di loro. Il trucco è collegare le resistenze di pull-up alla più bassa delle due tensioni. ” (Tutorial SparkFun I2C) Per una combinazione di dispositivi 5V e 3.3V collegare i resistori pullup alla linea 3.3V, come mostrato sopra.

L'uso di I2C è un ottimo modo per aggiungere un convertitore da A a D multicanale a ESP8266-01 che non espone il singolo ingresso ADC del modulo sottostante. Ad esempio, utilizzando Adafruit 12 bit I2C a 4 canali ADC o per uscita analogica Breakout DAC I2C SparkFun - scheda MCP4725. Molti altri tipi di sensori sono disponibili anche con i bus I2C.

Vedi //www.i2c-bus.org/i2c-primer/common-problems ... per maggiori informazioni sul superamento dei problemi I2C. Vedere anche Avvio affidabile per RTC con batteria I2C supportata per un breve metodo per aiutare a liberare il bus

Passaggio 4: utilizzo di GPIO0 / GPIO2 per OUTPUT e RX per INPUT

Mentre è possibile inviare messaggi di debug tramite la connessione WiFi, è spesso conveniente utilizzare la connessione TX. L'esempio seguente mostra come utilizzare GPIO0 e GPIO2 come output e RX come input.

utilizzando
Serial.begin (115200, SERIAL_8N1, SERIAL_TX_ONLY);
consente di utilizzare RX come input per scopi generici (o un altro output), mentre si scrivono ancora messaggi di debug su Seriale. Ancora una volta la resistenza da 330 ohm nell'RX porta al programmatore Flash protegge dal cortocircuito del driver del programmatore. NOTA: S1 dovrà essere aperto per programmare ESP8266.

È possibile accedere al pin TX dallo schizzo come GPIO1 e RX è GPIO3

Come riprogrammare quando si utilizza GPIO0 come output

Nota: GPIO0 deve essere collegato a terra per accedere alla modalità di programmazione. Se lo schizzo lo sta guidando in alto, la messa a terra può danneggiare il chip ESP8266. Il modo sicuro per riprogrammare ESP8266 quando il codice guida l'output GPIO0 è di: -
a) Spegnere la scheda
b) breve GPIO0 a gnd
c) accendere la scheda che entra in modalità programma a causa del corto su GPIO0
d) rimuovere il corto da GPIO0 in modo da non cortocircuitare l'output durante l'esecuzione del programma
e) riprogrammare la scheda
f) spegnere e riaccendere la scheda, se necessario.

Passaggio 5: un altro trucco: guidare un relè e leggere un pulsante usando GPIO0 / GPIO2

Ecco un altro modo di configurare i pin. Nota: questo trucco funziona solo se si dispone di un modulo relè con un ingresso isolato (N1 e N1-com). A causa di questa limitazione e della complessità del codice di supporto, è preferibile l'esempio precedente, che utilizza RX come input.

L'utilizzo dei pin GPIO0 / GPIO2 / GPIO15 ESP8266 ha già illustrato come utilizzare GPIO0 / GPIO2 insieme per ottenere un input aggiuntivo. Qui l'esempio verrà esteso per utilizzare GPIO0 come uscita del driver di inoltro e GPIO0 / GPIO2 come input.

Ecco lo schema in pdf.

Qui GPIO0 viene utilizzato come uscita per pilotare il relè e GPIO0 / GPIO2 viene utilizzato come ingresso per leggere il pulsante momentaneo che viene utilizzato come comando manuale per accendere e spegnere il relè, oltre al telecomando tramite WiFi connessione. Il pulsante momentaneo viene anche utilizzato per abilitare la modalità di configurazione se viene premuto quando viene applicata l'alimentazione.

Il trucco qui è fare tutto questo mantenendo comunque alti GPIO0 e GPIO2 durante l'inizializzazione del modulo ESP8266.

Le resistenze di pull-up, R1 e R3, forniscono l'high necessario per questi due pin, ma è necessario assicurarsi che eventuali circuiti aggiuntivi collegati a GPIO0 e GPIO2 non possano non abbassare i pin. Il relè isolato otticamente è collegato tra + 3, 3 V e GPIO0. Ciò mantiene GPIO0 alto all'avvio, ma consente a GPIO0 di diventare un'uscita, dopo l'avvio, e mettere a terra l'ingresso del relè per far funzionare il relè. Non importa se il pulsante momentaneo viene azionato durante l'inizializzazione del modulo, in quanto collega GPIO0 a GPIO2 e collega entrambi questi ai loro resistori pullup.

Rilevamento della modalità di configurazione

Utilizzando ESP8266 come punto di accesso temporaneo, è possibile configurarlo tramite una pagina Web come descritto qui. Parte del processo consiste nell'utilizzare un pulsante o un collegamento in cortocircuito all'accensione per indicare al software che si desidera accedere alla modalità di configurazione.

Una volta inizializzato il modulo ESP8266, esegue il codice setup () . In quel codice, per rilevare se viene premuto il pulsante momentaneo, non è necessario rendere GPIO0 basso per fornire un GND al pulsante e quindi controllare l'ingresso GPIO2 per vedere se è basso. Un effetto collaterale di questo controllo è che il relè sarà sempre azionato quando l'unità viene messa in modalità di configurazione. Quando vedi il relè funzionare, puoi rilasciare il pulsante, perché il suo ingresso sarà stato rilevato da allora. Ecco un po 'di codice di esempio per farlo in setup ()

 configMode booleano = false; // non in modalità config normalmente vuoto setup () {pinMode (0, OUTPUT); digitalWrite (0, LOW); // rende bassa l'uscita GPIO0 // controlla l'ingresso GPIO2 per vedere se il pulsante è premuto collegandolo a GPIO0 configMode = (digitalRead (2) == LOW); if (configMode) {// avvia AP e preparati a servire la pagina web di configurazione // lascia il relè attivo per indicare in modalità di configurazione // ......} altrimenti {// uso normale // imposta GPIO0 ALTA per spegnere il relè digitalWrite (0, ALTO); // .....} // resto dell'installazione ()} 

Rilevamento del pulsante di esclusione manuale

La sezione precedente riguardava il rilevamento della pressione del pulsante all'accensione per abilitare la modalità di configurazione. Vogliamo anche usare quel pulsante come comando manuale per accendere e spegnere il relè oltre a poter controllare il relè tramite il collegamento WiFi.

Il controllo WiFi del relè non è coperto qui, ma può essere facilmente eseguito utilizzando pfodApp. Vedere Generatore di menu OLIMEX per come generare codice Arduino con pfodDesigner per i moduli ESP8266.

Questa sezione tratterà di come rilevare quando viene premuto il pulsante, indicando che l'utente desidera attivare o disattivare il relè, ovvero spegnerlo se è acceso o accenderlo se è spento. Lo schema è lo stesso di sopra, tutti i trucchi sono nel codice. Vi sono due casi da considerare: -

  1. Il relè è OFF e l'utente desidera attivarlo tramite il pulsante,
  2. Il relè è attivo e l'utente desidera spegnerlo utilizzando il pulsante.

Il relè è OFF e l'utente desidera attivarlo tramite il pulsante.

In questo caso l'output di GPIO0 è ALTO. In realtà GPIO0 può essere un input in questo caso poiché la resistenza pull up R1 assicurerà che il relè non si accenda. Questo è il trucco. In questo caso, fare di GPIO0 un ingresso e rendere BASSO output GPIO2 e quindi quando l'utente preme il pulsante, accadranno due cose: - a) il relè si accenderà a causa della messa a terra fornita da GPIO2 tramite il pulsante eb) il L'ingresso GPIO0 diventerà basso. Il codice controlla lo stato dell'ingresso GPIO0 e quando diventa BASSO il codice sa che l'uso ha premuto il pulsante e vuole che il relè sia attivo. Il codice rende quindi GPIO0 un'uscita BASSA per mantenere attivo il relè quando viene rilasciato il pulsante.

Il relè è attivo e l'utente desidera spegnerlo utilizzando il pulsante.

In questo caso, in seguito al caso precedente, GPIO0 è un'uscita BASSA che tiene il relè su ON. Ora, in questo caso, fai di GPIO2 un input (tirato su da R3) e poi quando l'utente preme il pulsante, Input GPIO2 viene tirato BASSO dall'uscita LOW su GPIO0. Quando l'uso rilascia il pulsante, il codice rileva la transizione da BASSO a ALTO e quindi trasforma GPIO0 in un Ingresso, che rilascia il relè a causa della resistenza di pull up, R1, e rende GPIO2 un Uscita BASSO da impostare per il caso i) sopra.

Un altro trucco. Per il caso ii) abbiamo bisogno di GPIO2 come input che rilevi una transizione da BASSA a ALTA per spegnere il relè. Ma se creiamo GPIO2 e immettiamo alla fine del caso i) allora avremo una transizione da BASSO a ALTO quando l'utente rilascia il pulsante che ha appena premuto per attivare il relè. Per evitare di spegnere di nuovo immediatamente il relè, la prima transizione da BASSO a ALTO dopo aver acceso il relè verrà ignorata poiché è solo l'utente che rilascia il pulsante premuto per attivare il relè.

Esempio di loop () Codice per over-ride manuale del relè

In questo codice ignoro switch debounce per semplicità. Gli input devono essere rimossi in qualsiasi applicazione reale.

Il codice di esempio è qui, ESP8266_01pinMagic_1.ino

Anche in questo caso i pin TX / RX sono disponibili per il debug seriale o come altri I / O

Conclusione

Questa pagina mostra come ottenere il massimo dai pin limitati disponibili su ESP8266-01. L'uso di GPIO0 / GPIO2 come bus I2C offre la maggiore espansione, ma se si prevede di non utilizzare I2C, è comunque possibile pilotare un relè e rilevare l'ingresso di un pulsante tramite GPIO0 / GPIO2. In entrambi i casi, TX / RX sono disponibili anche per il debug seriale o se si inviano dichiarazioni di stampa di debug tramite il collegamento WiFi, questi pin sono disponibili anche per l'I / O generale.

Articoli Correlati