Spis treści:
W tym artykule podłączymy przekaźnik do modułu ESP32 oraz stworzymy system sterowania oświetleniem z wykorzystaniem diody LED. Można również wykorzystać standardową żarówkę na napięcie 230 V, jednak należy przy tym zachować szczególną ostrożność.
Instrukcję programowania ESP32 w Arduino IDE przedstawiliśmy w pierwszym artykule z tej serii.
Czego będziemy potrzebować do wykonania projektu?
Czego będziemy potrzebować do wykonania projektu?
Do wykonania projektu sterowania oświetleniem będziemy potrzebować modułu ESP32, modułu przekaźnika oraz diody LED lub żarówki. Polecamy przygotowany przez nas zestaw ESP32, w którym można znaleźć wszystkie niezbędne elementy do wykonania tego oraz poprzednich projektów.
Pełną listę produktów można znaleźć poniżej:
Podłączenie elementów
Przekaźnik, podobnie jak czujnik ruchu PIR, nie może być wpięty w płytkę stykową. Moduł został połączony z ESP32 za pomocą przewodów połączeniowych. Cewka przekaźnika zasilana jest napięciem 5 V, dlatego pin VCC podłączony został do pinu VIN ESP32. W celu uruchomienia cewki przekaźnika z zestawu ESP32 należy podać stan niski na pin IN, my wykorzystamy pin 5 modułu ESP32. Do złącz śrubowych należy podłączyć urządzenie, które ma być zasilane z wykorzystaniem przekaźnika, w naszym przypadku jest to dioda LED, której napięcie podłączona jest do styku COM oraz NO. Cewka przekaźnika zostanie załączona po wciśnięciu przycisku podłączonego do pinu 15 modułu ESP32. Szczegółowy schemat podłączenia można znaleźć poniżej.
Program dla ESP32
// definiujemy piny, gdzie podłączyliśmy przekaźnik oraz__przycisk
int relay_pin = 5;
int button_pin = 15;
void setup() {
Serial.begin(115200);
pinMode(relay_pin, OUTPUT); // ustawiamy pin przekaźnika jako OUTPUT
pinMode(button_pin, INPUT_PULLUP); // ustawiamy pin przycisku jako INPUT_PULLUP
}
void loop() {
// definiujemy aby stan przycisku odczytywany był cyforowo: wysoki / niski
int buttonState = digitalRead(button_pin);
// definiujemy zależność:
if (buttonState == LOW) { // jeżeli przycisk przejdzie w stan niski
Serial.println("Przycisk został wciśnięty");
digitalWrite(relay_pin, LOW); // przekaźnik załączy się
}
else if (buttonState == HIGH) {
Serial.println("Przycisk został puszczony");
digitalWrite(relay_pin, HIGH);
}
}
Zdalne sterowanie przekaźnikiem
Można wykorzystać ESP32 web server w celu zdalnego sterowania oświetleniem za pomocą przekaźników. W poniższym programie można wykorzystać dowolną ilość przekaźników zmieniając ilość podaną w linii #define NUM_RELAYS oraz podać odpowiednie piny, do których przekaźniki zostały podłączone w int relayGPIOs[NUM_RELAYS] = { };.
Po załadowaniu programu, w monitorze szeregowym ukaże się lokalny adres IP, na którym utworzony został serwer.
https://randomnerdtutorials.com/esp32-esp8266-relay-web-server/
#include
#include
#include
//Ustaw wartość true, aby zdefiniować przekaźnik jako normalnie otwarty (NO)
#define RELAY_NO true
//Ustaw liczbę przekaźników
#define NUM_RELAYS 1
//Przyporządkuj każde GPIO do przekaźnika
int relayGPIOs[NUM_RELAYS] = {5};
const char* ssid = "Twoje_SSID";
const char* password = "Twoje_haslo";
const char* PARAM_INPUT_1 = "relay";
const char* PARAM_INPUT_2 = "state";
//Tworzenie obiektu AsyncWebServer na porcie 80
AsyncWebServer server(80);
const char index_html[] PROGMEM = R"rawliteral(
Oswietlenie
%BUTTONPLACEHOLDER%
)rawliteral";
//Zastępuje placeholder sekcją przycisku na twojej stronie internetowej
String processor(const String& var){
//Serial.println(var);
if(var == "BUTTONPLACEHOLDER"){
String buttons ="";
for(int i=1; i<=NUM_RELAYS; i++){
String relayStateValue = relayState(i);
buttons+= "Przekaznik #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "
";
}
return buttons;
}
return String();
}
String relayState(int numRelay){
if(RELAY_NO){
if(digitalRead(relayGPIOs[numRelay-1])){
return "";
}
else {
return "checked";
}
}
else {
if(digitalRead(relayGPIOs[numRelay-1])){
return "checked";
}
else {
return "";
}
}
return "";
}
void setup(){
Serial.begin(115200);
// Ustaw wszystkie przekaźniki na wyłączenie przy starcie programu - jeśli ustawione na Normally Open (NO), przekaźnik jest wyłączony, gdy ustawisz przekaźnik na HIGH
for(int i=1; i<=NUM_RELAYS; i++){
pinMode(relayGPIOs[i-1], OUTPUT);
if(RELAY_NO){
digitalWrite(relayGPIOs[i-1], HIGH);
}
else{
digitalWrite(relayGPIOs[i-1], LOW);
}
}
//Połącz z WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Łączenie z WiFi..");
}
//Wyświetl lokalne IP
Serial.println(WiFi.localIP());
// Route dla root / web page
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});
//Wyślij żądanie GET do /update?relay=&state=.
server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputMessage;
String inputParam;
String inputMessage2;
String inputParam2;
//GET input1 value on /update?relay=
if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) {
inputMessage = request->getParam(PARAM_INPUT_1)->value();
inputParam = PARAM_INPUT_1;
inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
inputParam2 = PARAM_INPUT_2;
if(RELAY_NO){
Serial.print("NO ");
digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt());
}
else{
Serial.print("NC ");
digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt());
}
}
else {
inputMessage = "No message sent";
inputParam = "none";
}
Serial.println(inputMessage + inputMessage2);
request->send(200, "text/plain", "OK");
});
// Start server
server.begin();
}
void loop() {
}
Jak oceniasz ten wpis blogowy?
Kliknij gwiazdkę, aby go ocenić!
Średnia ocena: 4.7 / 5. Liczba głosów: 15
Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.
2 Responses
Czy można połączyć obie funkcie czyli wifi i włacznik by załączać ośiwtlenie
czy można w jednym programie połączyć obie funkcje