Hirdetés
- Fordulat: időben startol S26+, nézd meg, milyen lesz!
- Fotók, videók mobillal
- Vége a dalnak: leállt az iPhone Air gyártása
- Yettel topik
- Rossz hírek a Galaxy S26-ok teléjét illetően
- A legújabb iPhone kiegészítő egy zokni, amit magunkra akaszthatunk
- Xiaomi 15T Pro - a téma nincs lezárva
- Miért fárad gyorsabban az iPhone akku, mint az androidos?
- Samsung Galaxy A54 - türelemjáték
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
vargalex
félisten
Szia!
Most azt várod, hogy nézzük meg helyetted? Láthatólag az előző linkeden található is működőképes. Ha úgyis lesz mindened, majd kipróbálod. Nekem pl. nincs is ilyen led kijelzőm.
Egyébként az Arduino, ESP8266 szerintem nem copy-paste programozásra való. Legalábbis úgy nem sok értelmét látom.... -
vargalex
félisten
Szia!
Nyilván nem azt mondom, hogy rosszabb a d1 mini pro, mint a sima mini. Sőt, vannak előnyei. Ez elsősorban a külső antenna csatlakozó. Ez bizonyos távolság fölött jól jöhet. A 16 MB flash viszont valószínűleg csak akkor jelenthet előnyt, ha nem Arduino IDE-ből programozod, hanem NodeMCU firmware-t teszel rá és esetleg nagyon hosszú lua scriptet tennél rá. Bár, nem biztos, hogy előfordulhat ilyen eset.
-
vargalex
félisten
válasz
Gergosz2
#5849
üzenetére
Nyilván nem sok a $3, de azért mégis több egy kicsivel, mint még egy d1 mini ára...
Igazából én azon lepődtem meg, amit itt írtál (konkrétan az "Itt a fórumon elég sokan a Wemos D1 mini pro-t favorizáljuk" szövegre gondolok).
Gyors keresés a topicban a d1 mini pro kifejezésre. Nekem nem ez jön le... -
vargalex
félisten
Szia!
A
renderPagefüggvényben ezt a részt:if (digitalRead(pin_relays[relayIndex])) {
relay_state="checked";
}cseréld erre:
if (!digitalRead(pin_relays[relayIndex])) {
relay_state="checked";
}Most olvasom, hogy neked low level trigger reléd van. Ha a relé állapotát akarod kijelezni, akkor ez lesz a helyes megoldás nálad. Ugyanis a kód eredeti állapotában a GPIO magas állapotánál jelez ON-t.
-
vargalex
félisten
válasz
Janos250
#5780
üzenetére
Kábelneted van UPC-nél? A legtöbb embernek éppen az a problémája, hogy hogyan tudna IP-t cserélni. Ez HGW esetén router módban szinte lehetetlen, saját routerrel viszont csak MAC klónozással lehet. Ezért csodálkozom... Pedig több UPC-s emberkével is kapcsolatban állok, mindenkinél nagyjából fix az IP.
-
vargalex
félisten
válasz
Janos250
#5778
üzenetére
Nyilván, ha van valamilyen DNS cache-ed, akkor az okozhat problémát. De mondom, az UPC nem cserél IP címet. Legalábbis, ha nem ADSL-ről beszélünk. Csak MAC cím változáskor fog változni valójában az IP címed.
Az IP váltás lekövetése viszont csak a cache élettartamán múlik. Ezt nem tudom, hogy lehet-e windows-ban állítani, linux-ot használok.
-
vargalex
félisten
-
vargalex
félisten
-
vargalex
félisten
válasz
Janos250
#5772
üzenetére
Nyilván a jquery kicserélhető bármire (akár maradhat simán checkbox is, vagy saját CSS-t lehet gyártani pl. így), csak azért raktam bele, hogy kicsit pofásabb legyen a megjelenítés és maga a kód rövidebb. Nálam nem volt szempont az adatmennyiség.
UPC-nél a DHCP net miatt tipikusan nem változik az IP cím. Ettől függetlenül nálam is van dyndns természetesen (már egy jó ideje az ipdns.hu-t használom). De a kérdésedet nem igazán értem... Ugyanis az UPC által adott IP-t nyilván a router WAN oldala kapja. Az állomások pedig egy belső IP címet. Mi közük az eszközöknek a külső IP-hez? Nekik a routerben statikus lease van beállítva a DHCP szervernél...
És akkor a javított kód, mert a
<body>és a<html>tag lezárása lemaradt (igaz, a böngészőket nem zavarja, automatikusan lezárják):#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#define DEFAULT_STATE LOW
// Replace with your network credentials
const char* ssid = "TP-Link";
const char* password = "asdf1234";
// GPIOs for controlling the relays
uint8_t pin_relays[] = { D1, D2 };
ESP8266WebServer server(80);
// html page rendering
void renderPage() {
String webPage = "";
String relay_state="";
webPage = "<html><head><link rel=\"stylesheet\" href=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css\">";
webPage += "<script src=\"https://code.jquery.com/jquery-1.11.3.min.js\"></script>";
webPage += "<script src=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js\"></script></head>";
webPage += "<body><h1>ESP8266 Relay Web Server</h1>";
for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
relay_state="";
if (digitalRead(pin_relays[relayIndex])) {
relay_state="checked";
}
webPage += "<p>Relay #" + String(relayIndex) + " ( GPIO" + String(pin_relays[relayIndex]) + " ) <input type=\"checkbox\" " + relay_state + " data-role=\"flipswitch\" onchange=\"window.location.href='/?relay=" + String(relayIndex) + "'\"></p>";
}
webPage += "</body></html>";
server.send(200, "text/html", webPage);
}
// handling requests
void handle_root() {
if (server.hasArg("relay")) {
int relayIndex = server.arg("relay").toInt();
digitalWrite(pin_relays[relayIndex], !digitalRead(pin_relays[relayIndex]));
Serial.print("Relay ");
Serial.print(relayIndex);
Serial.print(" state changed to ");
Serial.println(digitalRead(pin_relays[relayIndex]));
}
renderPage();
}
void setup(void){
// preparing GPIOs
for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
pinMode(pin_relays[relayIndex], OUTPUT);
digitalWrite(pin_relays[relayIndex], DEFAULT_STATE);
}
//Turn on serial output
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// logging to serial output
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// web server setup
server.on("/", handle_root);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}Amit még megjegyeznék, hogy ez a kód Wemos D1 mini-re készült. Sima ESP8266-on a D1, D2, stb. PIN-ek nincsenek definiálva (csak d1, d1 mini, nodemcu és wifinfo esetén).
-
vargalex
félisten
válasz
Tankblock
#5770
üzenetére
Igen, éppen tegnap este vettem észre, hogy a <html> és a <body> TAG-ek lezárása hiányzik, de mobilról nem akartam javítást küldeni, mert elég nehézkes. Ma javítom, és berakom újra (azért nem most, mert most is csak mobilról vagyok). A server.send előtt kell hozzá fűzni a webPage-hoz.
Egyébként a böngészőket ilyen apróságok nem zavarják...
-
vargalex
félisten
Igyekeztem teljesen dinamikusra írni. Azaz, a relék GPIO-it elegendő csak a pin_relays tömbbe felvenni, a többi (weboldalon a megfelelő gombok generálása, a kapcsolás) automatikusan történik a tömb alapján. A kód:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#define DEFAULT_STATE LOW
// Replace with your network credentials
const char* ssid = "TP-Link";
const char* password = "asdf1234";
// GPIOs for controlling the relays
uint8_t pin_relays[] = { D1, D2 };
ESP8266WebServer server(80);
// html page rendering
void renderPage() {
String webPage = "";
String relay_state="";
webPage = "<html><head><link rel=\"stylesheet\" href=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css\">";
webPage += "<script src=\"https://code.jquery.com/jquery-1.11.3.min.js\"></script>";
webPage += "<script src=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js\"></script></head>";
webPage += "<body><h1>ESP8266 Relay Web Server</h1>";
for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
relay_state="";
if (digitalRead(pin_relays[relayIndex])) {
relay_state="checked";
}
webPage += "<p>Relay #" + String(relayIndex) + " ( GPIO" + String(pin_relays[relayIndex]) + " ) <input type=\"checkbox\" " + relay_state + " data-role=\"flipswitch\" onchange=\"window.location.href='/?relay=" + String(relayIndex) + "'\"></p>";
}
server.send(200, "text/html", webPage);
}
// handling requests
void handle_root() {
if (server.hasArg("relay")) {
int relayIndex = server.arg("relay").toInt();
digitalWrite(pin_relays[relayIndex], !digitalRead(pin_relays[relayIndex]));
Serial.print("Relay ");
Serial.print(relayIndex);
Serial.print(" state changed to ");
Serial.println(digitalRead(pin_relays[relayIndex]));
}
renderPage();
}
void setup(void){
// preparing GPIOs
for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
pinMode(pin_relays[relayIndex], OUTPUT);
digitalWrite(pin_relays[relayIndex], DEFAULT_STATE);
}
//Turn on serial output
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// logging to serial output
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// web server setup
server.on("/", handle_root);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}Látható, hogy a pin_relays tömb most 2 elemű, így a renderelt weboldal jelenleg így néz ki:

Ahogy a setup függvényben látható, alapban alacsony állapotra húzza az érintett GPIO-kat. Persze ez a kiindulási állapot a DEFAULT_STATE-ban módosítható.
-
vargalex
félisten
A tömböt inkább byte típusúnak kellene deklarálni, mert az int, az a board típusától függően 2, vagy 4 byte-os. Az EEPROM.write pedig byte-ot vár paraméternek. Vagy EEPROM.put kell helyette, de akkor természetesen feleslegesen foglalhatnak helyet a letárolt értékek.
-
vargalex
félisten
Nálam van egy mini szerver, így kézenfekvő volt, hogy ott csinálok szerver oldali komponenseket mind az e-mail küldéshez, mind a mysql íráshoz/olvasáshoz. Az ESP pedig csak http post-okkal beszélget vele.
A szerver oldal php, onnan sem gond az e-mail küldés gmail-al. Több példát is lehet találni... -
vargalex
félisten
-
vargalex
félisten
válasz
ngabor2
#5418
üzenetére
Szia!
Nem használtam még LCD-t (pedig vagy egy 16x2-esem), de több ilyen lib-et is találtam. Nem írtad meg, hogy pontosan melyiket használod. Nekem ez a sor mindenképpen fura:
LiquidCrystal_I2C lcd(0x20,20,4); // set the LCD address to 0x20 for a 16 chars and 2 line displayHa igaz a comment, akkor így egy 16x2-es LCD-t inicializálsz.
Szerk.: Bocs, most látom, hogy az csak az I2C address-e, a felbontás a 2. és 3. paraméter.
-
vargalex
félisten
válasz
FireKeeper
#5365
üzenetére
Igen, ez.
-
vargalex
félisten
-
vargalex
félisten
válasz
ngabor2
#5328
üzenetére
Nem tudom, hogy milyen RTC függvénykönyvtárat használsz, de pl. ebből kiindulva elsőre valami ilyesmire gondolnék:
time_t t = now();
if ((weekday(t)>1 && weekday(t)<6 && ((hour(t)==7 && minute(t)>29) || (hour(t)>7 && hour(t)<21))) ||
((weekday(t)==1 || weekday(t)==6) && hour(t)>8 && hour(t)<21)) {
if (digitalRead(GPIO_NUM) == LOW) digitalWrite(GPIO_NUM, HIGH);
}
else {
if (digitalRead(GPIO_NUM) == HIGH) digitalWrite(GPIO_NUM, LOW);
}Nem fordítottam, így a hibákat nem zárom ki.

Szerk.: Ha nem menne az output módú GPIO PIN olvasása, akkor nyilván kell valami globális változó, ahol tárolod az aktuális értéket és annak az értékét hasonlítani.
-
vargalex
félisten
válasz
ngabor2
#5326
üzenetére
Gondolom a páratartalmat úgyis a loop-ban figyeled, akkor már célszerű szerintem ott kezelni az idő szerinti relé kapcsolást is. Megvizsgálod az aktuális időpontot, ha olyan és alacsony állásban van a GPIO kimenet, akkor magasra húzod, ha pedig nem és magasban van, akkor alacsonyra. Vagy fordítva a relé bekötésétől/működésétől függően.
-
vargalex
félisten
-
vargalex
félisten
Sziasztok!
Néhány helyen ESP8266-okkal kellene optocsatolós relét kapcsolnom (természetesen 230V-os eszköz kapcsolása a cél). Van egy felesleges 2 csatornásom, de ez 5V-os, így az ESP8266 GPIO-t HIGH-ba kapcsolva zárva marad a relé. Tudnátok ajánlani valami bevált példányt, ami vezérléséhez elég a 3.3V? (Ebay, Ali, stb. link tökéletes lenne.)
Új hozzászólás Aktív témák
- Építő/felújító topik
- Assetto Corsa Rally
- Fordulat: időben startol S26+, nézd meg, milyen lesz!
- Szigorúan titkos dokumentumokkal a kezében távozott az Intel egyik mérnöke
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- OpenMediaVault
- Revolut
- vikka85 károsultjai
- Xbox tulajok OFF topicja
- Mesterséges intelligencia topik
- További aktív témák...
- Ps5 2 év garanciával teljesen új 1 kontrollerel számlával dobozzal
- Asus TUF Gaming A15 AMD Ryzen 5-7535H/16GB RAM/512GB SSD/RTX3050VGA/15,6" 144Hz kijelző
- iPhone 15 128GB Kék Független Használt/1-3 hónap gar./Akku 83%/p4563
- Samsung Galaxy S25 Ultra 256GB fekete 3 év garanciával
- Iphone 13 128gb Midnight 81% + töltő + füles + tok
- Apple iPhone 13 Pro Max Sierra Blue ProMotion 120 Hz, Pro kamerák 128 GB Használt, szép,100%
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 13 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3536,100% Akkumulátor
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- Corsair T3 RUSH gamer, irodai szék
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


ekkold

