Hur du använder ESP8266-01 stiften (4 / 4 steg)
Steg 4: En annan knep – kör ett relä och läsa en tryckknapp med GPIO0 / GPIO2
Här är ett annat sätt att konfigurera stiften. Obs: Detta trick fungerar bara om du har ett relä modul med isolerade indata (N1 och N1-com). På grund av denna begränsning och komplexiteten i stödjande koden är föregående exempel använder RX som indata, att föredra.
Med ESP8266 GPIO0/GPIO2/GPIO15 stift har redan täckande hur till använda GPIO0/GPIO2 tillsammans för att få en extra ingång. Här kommer att utvidgas detta exempel för att använda GPIO0 som driver reläutgång och GPIO0/GPIO2 som indata.
Här är den schematiska som pdf.
GPIO0 används här som en utgång för att driva reläet och GPIO0/GPIO2 används som indata till läsa den ögonblickliga tryckknapp som används som en manuell omställning för att aktivera reläet av och på, förutom fjärrkontrollen över WiFi-anslutning. På tillfällig-knappen används också för att config läge om det är press när driva, appliceras.
Tricket är att göra allt detta medan du fortfarande håller GPIO0 och GPIO2 höga när modulen ESP8266 initieras.
Pull-up motstånd, R1 och R3, tillhandahålla de nödvändiga höga för dessa två stift, men du måste se till att eventuella extra kretsar bifogas GPIO0 och GPIO2 inte inte kan dra stift låg. Optiskt isolerad reläet är ansluten mellan + 3.3V och GPIO0. Här håller GPIO0 högt på starta upp men tillåter GPIO0 att göras en utgång, efter starten, och marken reläet ingång för att driva reläet. Det inte fråga om knappen momentan drivs medan modul initieras, som som bara ansluter GPIO0 till GPIO2 och ansluta båda dessa till deras pullup motstånd.
Upptäcka Config-läge
Med ESP8266 som en tillfällig accesspunkt kan du Konfigurera den via en webbsida som beskrivs här. Del av den processen är att använda en tryckknapp eller kortsluter länk, vid uppstart att indikera att programvaran som du vill ange config-läge.
När modulen ESP8266 har initierats, körs det setup() koden. Detta nummer, att upptäcka om på momentan-knappen trycks, inte behöver du göra GPIO0 låg för att tillhandahålla en GND till knappen och sedan kontrollera GPIO2 in för att se om det låg. En sidan påverkar av denna kontroll är att reläet alltid kommer att drivas när enheten sätts in i config-läge. När du ser reläet fungerar kan kan du släppa knappen, eftersom dess ingång kommer att ha upptäckt då. Här är några exempel på kod att göra detta i setup()
booleska configMode = false; inte i config läge normalt
void setup() {
pinMode (0, OUTPUT);
digitalWrite (0, låg); göra GPIO0 utgång lågt
Kontrollera GPIO2 input för att se om tryckknapp trycks ansluta den till GPIO0
configMode = (digitalRead(2) == låg);
om (configMode) {
börja AP och få redo att tjäna config webbsida
lämna relä på i config-läge anger
//......
} annat {
normal behandling
göra GPIO0 hög till vända bort reläet
digitalWrite (0, hög);
//.....
}
resten av setup()
}
Upptäcka på Manuell omställning-knappen
Avsnittet ovan omfattas upptäcka när knappen trycktes på effekt upp till aktivera config läge. Vi vill också använda den knappen som en manuell omställning för att aktivera reläet på och av förutom att kunna kontrollera reläet via WiFi länk.
WiFi kontroll av reläet inte omfattas av det här, men kan enkelt göras med hjälp av pfodApp. Se OLIMEX Menu Generator för hur man skapar Arduino koden med pfodDesigner för ESP8266 moduler.
Detta avsnitt behandlar hur man upptäcker när knappen trycks, som visar användaren vill växla reläet, dvs stänga av är det eller slå på den om den är avstängd. Schematiskt är samma som ovan, alla tricks i koden. Det finns två fall överväga:-
- Reläet är OFF och användaren vill slå på den med hjälp av knappen,
- Reläet är ON och användaren vill stänga av den med hjälp av knappen.
Reläet är OFF och användaren vill slå på den med hjälp av knappen.
I detta fall är produktionen av GPIO0 hög. GPIO0 kan faktiskt vara en ingång i det här fallet eftersom drar upp motståndet R1 garanterar reläet inte slås på. Det är tricket. In this case göra GPIO0 indata och göra GPIO2 produktionen låg och sedan när användaren trycker på knappen, två saker kommer att hända: - a) reläet startar på grund av marken som tillhandahålls av GPIO2 via knappen och b) den Input GPIO0 kommer att gå lågt. I koden kontrolleras av Input GPIO0 och när det går lågt koden vet användning har tryckt på knappen och vill att reläet ska på. Koden gör sedan GPIO0 en utgång låg att hålla reläet på när knappen släpps.
Reläet är ON och användaren vill stänga av den med hjälp av knappen.
I det här fallet är efter ovanstående fall, GPIO0 en Output LOW hålla relä på. Nu i detta fall göra GPIO2 indata (drog upp av R3) och sedan när användaren trycker på knappen Input GPIO2 dras låg av låg utgång på GPIO0. När användningen släpper knappen koden upptäcka låg till hög övergång och sedan gör GPIO0 en ingång, som släpper reläet på grund av dra upp motstånd, R1, och gör GPIO2 en utgång låg att ställa upp för fallet jag) ovan.
Ett mer knep. Fall ii) behöver vi GPIO2 som indata som upptäcker en låg till hög övergång om du vill inaktivera reläet. Men om vi gör GPIO2 och ingång i slutet av fallet jag) då vi kommer att få en låg till hög övergång som användaren släpper knappen de tryckte bara aktivera reläet. För att undvika att reläet bort omedelbart igen, första låg till hög övergången efter vrida reläet kommer att ignoreras eftersom det är bara användaren släpper knappen de pressas för att aktivera reläet.
Prov loop() koden för Relay Manual över ride
I den här koden nonchalerar jag switch debounce för enkelhet. Ingångarna bör vara debounced i alla riktiga program.
Exempelkoden är här, ESP8266_01pinMagic_1.ino
Återigen detta lämnar TX / RX stift för seriell felsökning eller användning som andra I/O
Slutsats
Den här sidan visar hur du får mest ut begränsade stiften tillgängliga på den ESP8266-01. Med GPIO0 / GPIO2 som en I2C bussen ger den största expansionen, men om du projektet inte använder I2C, kan du fortfarande köra ett relä och upptäcka en tryckknapp inmatning med GPIO0 / GPIO2. I fallet endera TX / RX är också tillgängliga för seriell felsökning eller om du skickar debug Skriv ut rapporter över WiFi link, dessa stift är tillgängliga för allmän I/O samt...