WeMos D1 (esp8266): shield i2c per la gestione di encoder, pulsanti multipli e led

Spread the love

Per la prototipazione rapida, creerò un set di shield per il WeMos D1 mini; la prima è una scheda di servizio con IC integrato pcf8574, un encoder e altri cinque pin da utilizzare come input o output.

Naturalmente, inizio il mio lavoro partendo dall’esempio che ho creato per la mia libreria in questo articolo “PCF8574 un expander i2c I/O digitale: Arduino, esp8266 e esp32, encoder rotativo”.

WeMos D1 mini pcf8574 encoder breadboard photo
WeMos D1 mini pcf8574 encoder breadboard photo

Lo schema base della breadboard è abbastanza semplice ed è spiegato meglio nell’articolo della libreria.

WeMos D1 mini pcf8574 encoder breadboard simple
WeMos D1 mini pcf8574 encoder breadboard simple

Ecco il video con il codice al lavoro.

PCB

Puoi trovare la versione aggiornata del PCB su PCBWay per pochi dollari.

WeMos D1 mini pcf8574 encoder shield PCB
WeMos D1 mini pcf8574 encoder shield PCB

WeMos D1 mini pcb con pcf8574 ed encoder PCBWay
PCB from PCBWay

Ecco lo schema PCB. È diventato piuttosto complesso perché ho intenzione di aggiungere gli interruttori per modificare l’indirizzo del pcf8574 alcuni jumper per attivare i pulsanti o utilizzare i pins come output.

WeMos D1 mini pcf8574 encoder shield PCB
WeMos D1 mini pcf8574 encoder shield PCB

Inizio la fresatura fresare per ottenere il prototipo

WeMos D1 mini pcf8574 encoder shield PCB rough milled
WeMos D1 mini pcf8574 encoder shield PCB rough milled

Materials

ObjectDescr.
1DIP SWITCHpackage dipswitch-03
1210kΩ Resistor
4Pushbuttonpackage [THT]
2Ceramic Capacitorpackage 100 mil [THT, multilayer]; capacitance 100nF
6Generic male header – 2 pinspackage THT; form ♂ (male)
1PCF8574package DIP16; type PCF8574
1Rotary Encoderpackage THT; Tipo ALPS ec11e
1WeMos D1 Mini

Qui trovi il WeMos D1 mini WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer

Qui il rotary encoder AliExpress

Ed ecco il pcf8574 AliExpress

Video assemblaggio

E ora tutto assemblato.

WeMos D1 mini pcf8574 encoder shield PCB up with description
WeMos D1 mini pcf8574 encoder shield PCB up with the description

Qui lo shield usato in un progetto.

WeMos D1 mini pcf8574 encoder shield PCB at working
WeMos D1 mini pcf8574 encoder shield PCB at working

Ed ecco il codice per mettere in funzione lo shield; come puoi vedere, i parametri sono

esp8266pcf8574
SDAD2 (PullUp)
SCLD1 (PullUp)
INTD7 (PullUp)

e per l’encoder

pcf8574Encoder
P0PIN A
P1PIN B
P2BUTTON
/*
 * PCF8574 Shield encoder and buttons
 * https://mischianti.org
 *
 * PCF8574    ----- WeMos
 * SDA        ----- D2(PullUp)
 * SCL        ----- D1(PullUp)
 * INT        ----- D7(PullUp)
 *
 * PCF8574 ----------------- Encoder
 * P0      ----------------- ENCODER PIN A
 * P1      ----------------- ENCODER PIN B
 * P2      ----------------- ENCODER BUTTON
 *
 */
#include "Arduino.h"
#include "PCF8574.h"
 
int encoderPinA = P0;
int encoderPinB = P1;
 
#define INTERRUPTED_PIN D7
 
void ICACHE_RAM_ATTR updateEncoder();
 
// initialize library
PCF8574 pcf8574(0x38, INTERRUPTED_PIN, updateEncoder);
 
volatile long encoderValue = 0;
uint8_t encoderButtonVal = HIGH;
 
void setup()
{
    Serial.begin (9600);
    delay(500);
 
    // encoder pins
    pcf8574.encoder(encoderPinA, encoderPinB);
    // encoder button
    pcf8574.pinMode(P2, INPUT_PULLUP);
 
    // Start library
    pcf8574.begin();
 
}
 
bool changed = false;
 
// The loop function is called in an endless loop
void loop()
{
    if (changed){
        Serial.print("ENCODER --> ");
        Serial.print(encoderValue);
        Serial.print(" - BUTTON --> ");
        Serial.println(encoderButtonVal?"HIGH":"LOW");
        changed = false;
    }
}
 
bool valPrec = LOW;
void updateEncoder(){
    changed = pcf8574.readEncoderValue(encoderPinA, encoderPinB, &encoderValue);
 
//  int vale = pcf8574.readEncoderValue(encoderPinA, encoderPinB);
//  if (vale!=0){
//      changed = true;
//  }
//  encoderValue = encoderValue + vale;
 
    bool val = pcf8574.digitalRead(P2);
    if (val!=valPrec){
      changed = true;
      valPrec = val;
      encoderButtonVal = val;
    }
}

Grazie

  1. WeMos D1 (esp8266): shield i2c per la gestione di encoder, pulsanti multipli e led
  2. WeMos D1 (esp8266): relè shield
  3. WeMos D1 (esp8266): shield Ebyte LoRa (e32, e22 e e220)

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *