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”.
Lo schema base della breadboard è abbastanza semplice ed è spiegato meglio nell’articolo della libreria.
Ecco il video con il codice al lavoro.
PCB
Puoi trovare la versione aggiornata del PCB su PCBWay per pochi dollari.
WeMos D1 mini pcb con pcf8574 ed encoder 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.
Inizio la fresatura fresare per ottenere il prototipo
Materials
N° | Object | Descr. |
---|---|---|
1 | DIP SWITCH | package dipswitch-03 |
12 | 10kΩ Resistor | |
4 | Pushbutton | package [THT] |
2 | Ceramic Capacitor | package 100 mil [THT, multilayer]; capacitance 100nF |
6 | Generic male header – 2 pins | package THT; form ♂ (male) |
1 | PCF8574 | package DIP16; type PCF8574 |
1 | Rotary Encoder | package THT; Tipo ALPS ec11e |
1 | WeMos 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.
Qui lo shield usato in un progetto.
Ed ecco il codice per mettere in funzione lo shield; come puoi vedere, i parametri sono
esp8266 | pcf8574 |
---|---|
SDA | D2 (PullUp) |
SCL | D1 (PullUp) |
INT | D7 (PullUp) |
e per l’encoder
pcf8574 | Encoder |
---|---|
P0 | PIN A |
P1 | PIN B |
P2 | BUTTON |
/*
* 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
- WeMos D1 (esp8266): shield i2c per la gestione di encoder, pulsanti multipli e led
- WeMos D1 (esp8266): relè shield
- WeMos D1 (esp8266): shield Ebyte LoRa (e32, e22 e e220)