- Google Pixel topik
- Apple Watch Sport - ez is csak egy okosóra
- Xiaomi 15 - kicsi telefon nagy energiával
- Xiaomi 15 Ultra - kamera, telefon
- Honor 400 - és mégis mozog a kép
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- Milyen okostelefont vegyek?
- Fotók, videók mobillal
- Magisk
- Android alkalmazások - szoftver kibeszélő topik
-
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
-
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
renderPage
fü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 display
Ha 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
Hirdetés
- Teljesen új iPhone 16 128GB Black eladó (bontatlan+garancia)
- HP 15da0000nh Intel Silver N5000 / 8gb ddr4. / UHD 620 / 1TB Hdd / 70% akku / Olcsó DDR4-es laptop
- BESZÁMÍTÁS! Asus B760M i7 12700KF 32GB DDR4 512GB SSD RX 6800 16GB Rampage SHIVA FSP 700W
- BESZÁMÍTÁS! Gigabyte A620M R5 7500F 32GB DDR5 512GB SSD RX 6700 XT 12GB ZALMAN S3 TG CM 700W
- BESZÁMÍTÁS! MSI B450M R7 5700X 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Chieftec 600W
- AKCIÓ! Apple Macbook Pro 16" 2019 i9 9980HK 64GB DDR4 1TB SSD Radeon Pro 5500M garanciával
- Okosóra felvásárlás!! Samsung Galaxy Watch 5 Pro, Samsung Galaxy Watch 6 Classic
- RAKTÁRSÖPRÉS!!! - Videókártyák, Monitorok, Notebookok, Stb. - Szaküzletből! Számlával!
- Fotós felszerelés - Stúdió lámpa / Softbox / Vaku
- LG UltraGear Gaming Monitorok: FRISS SZÁLLÍTMÁNY -30%
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged