Hirdetés
- Magga: PLEX: multimédia az egész lakásban
- sziku69: Fűzzük össze a szavakat :)
- Sundesz: 20 éve a PH!-n
- jakra: Retro gyujtemenyem (cloud synced for safety...)
- Luck Dragon: Asszociációs játék. :)
- WireGuard VPN a mindennapokra
- ldave: New Game Blitz - 2025
- Brogyi: CTEK akkumulátor töltő és másolatai
- GoodSpeed: Haworth Aloha – egy nemcsak szavakban ergonomikus szék
- eBay-es kütyük kis pénzért
-
LOGOUT
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
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Kompakt vízhűtés
- One otthoni szolgáltatások (TV, internet, telefon)
- Bemutatkozott a Poco X7 és X7 Pro
- Miért fárad gyorsabban az iPhone akku, mint az androidos?
- Kuponkunyeráló
- Magga: PLEX: multimédia az egész lakásban
- „Új mérce az Android világában” – Kezünkben a Vivo X300 és X300 Pro
- Milyen videókártyát?
- Milyen okostelefont vegyek?
- További aktív témák...
- Bontatlan! Új Lenovo Thinkpad T14 G5 Tartós Üzleti Laptop 14" -45% Ultra 7 165U 16/512 FHD+ Magyar!
- Bomba Ár! Fujitsu LifeBook E751 - i5-2GEN I 4GB I 500GB I DVDRW I 15,6" HD I Cam I W10 I Gari!
- Bomba ár! Dell Latitude E6440 - i5-4GEN I 8GB I 256SSD I 14" HD I HDMI I Cam I W10 I Garancia!
- Bomba ár! Dell Latitude E6540 - i5-4GEN I 8GB I 500GB I HDMI I 15,6" HD I Cam I W10 I Garancia!
- Bomba Ár! Lenovo ThinkPad E15 G4 AMD - Ryzen 5 5625U I 8GB I 256SSD I 15,6" FHD I HDMI I W11 I Gari
- Samsung Bluetooth Mouse Slim egér
- GYÖNYÖRŰ iPhone 12 Mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3415, 100% Akksi
- HIBÁTLAN APPLE WATCH ULTRA 2 NATURAL TITANIUM 49MM -1 ÉV GARANCIA - MS3714, 97% AKKUMULÁTOR
- iPhone 13 mini 128GB Green -1 ÉV GARANCIA -Kártyafüggetlen, MS3896, 95% Akkumulátor
- RAKTÁRKISÖPRÉS! Eladó szerverek!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest


ekkold
