Stránka 1 z 2
Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 05 dub 2022, 21:58
od johnyhol
Ahoj, nesetkal jste se někdo s hodinami na obrázku? Koupil jsem je na Aliexpressu s tím, že je připojím k wifi, všechno nastavím v aplikaci a pak si je dám do sauny a už se nebudu o nic starat. Jenže se mi vůbec nedaří hodiny připojit k mobilní aplikaci (hodiny nevysílají wifi) a tak jsem se rozhodl, že do nich nahraju vlastní kód a jako bonus ještě připojím teploměr na měření teploty v sauně. Je tam kombinace esp8266 + driver pro displej TM1650 + modul reálného času 8025T.
Nemáte náhodou někdo nějaký použitelný kód pro ty HODINY? Ideálně s řízením času z internetu.
Díky za reakce.
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 05 dub 2022, 23:05
od Caster
Pomohlo by dát sem odkaz na AliExpress, kde jsi je koupil
.
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 06 dub 2022, 08:31
od johnyhol
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 06 dub 2022, 09:56
od johnyhol
Jenom číňan poslal jiný typ než byl deklarovaný, tzn. nemá např. tlačítko set pro párování wifi atd.
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 06 dub 2022, 11:36
od Caster
O tom, že je problém nastavit WiFi píší v diskuzi na AliExpress.
Pokud jdem esp8266 naprogramovat zkus na Google hledat "clock module esp8266 Arduino sketch". Odrazit se můžeš např na "
ESP8266 WiFi Internet real time clock".
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 06 dub 2022, 20:25
od johnyhol
Tak jsem zjistil, že se to nedá ani připojit k PC. USB je připojené jenom pro napájení. Holt to musím napojit rovnou na esp8266.
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 11 bře 2023, 10:31
od johnyhol
Ahoj,
tak jsem s tímto projektem konečně pokročil dál. Všechno jsem proměřil a zjistil jsem, že je to opravdu nemožné přehrát přímo z USB. Je to řízené pomocí malého neoznačeného čipu, který se stará o veškerá nastavení a řízení. Musel jsem tento čip odstranit a potom jsem napojil TM 1650 přímo do ESP a nahrál jsem vlastní kód přímým napojením převodníku na ESP. Vypadalo to že všechno funguje, ale když jsem nechal hodiny běžet, tak při zobrazení např. 10:15 nebyl problém, ale při zobrazení např. 1:25 byl problém s posunutím času směrem doleva.
Nevíte čím by to mohlo být?
Díky!
Tady můj kód:
Kód: Vybrat vše
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <OneWire.h>
#include <CayenneMQTTESP8266.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <TM1650.h>
TM1650 d;
#define Teplota 13 // DS18B20
#define Dvere 12 // Dvere
#define Rele 14 // Rele
OneWire oneWire(Teplota);
DallasTemperature sensors(&oneWire);
char username[] = "";
char password[] = "";
char clientID[] = "";
const char* ssid = "";
const char* wifipassword = "";
const long utcOffsetInSeconds = 3600;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", utcOffsetInSeconds);
void setup(){
Serial.begin(9600);
Wire.begin();
d.init();
timeClient.begin();
pinMode(Dvere, INPUT);
pinMode(Rele, OUTPUT);
Cayenne.begin(username, password, clientID, ssid, wifipassword);
sensors.begin();
}
void loop(){
char waktu[5];
timeClient.update();
/*Serial.print(daysOfTheWeek[timeClient.getDay()]);
Serial.print(", ");
Serial.print(timeClient.getHours()+0);
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.println(timeClient.getSeconds());
//Serial.println(timeClient.getFormattedTime());*/
itoa( 100*(timeClient.getHours()+0) + timeClient.getMinutes(), waktu, 10);
d.displayOn();
d.displayString(waktu);
//delay(1000);
for (int i = 1; i<2; i++) {
d.setDot(i,true);
}
Cayenne.loop(); //spusteni Cayenne
}
///////////////
//--Teplota--//
///////////////
CAYENNE_OUT(1){
// Send the command to get temperatures.
sensors.requestTemperatures();
Serial.print("Teplota: ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println("*C");
// This command writes the temperature in Celsius to the Virtual Channel.
Cayenne.celsiusWrite(1, sensors.getTempCByIndex(0));
}
/////////////
//--Dvere--//
/////////////
CAYENNE_OUT(2){
if (digitalRead(Dvere) == LOW) {
Cayenne.virtualWrite(2, 1, "digital_sensor", "d");
Serial.println("Dvere: zavreno...");
}
else {
Cayenne.virtualWrite(2, 0, "digital_sensor", "d");
Serial.println("Dvere: otevreno...");
}
}
////////////
//--Rele--//
////////////
CAYENNE_IN(3){
// Write value to turn the relay switch on or off. This code assumes you wire your relay as normally open.
if (getValue.asInt() == 1) {
digitalWrite(Rele, HIGH);
Cayenne.virtualWrite(3, 1, "digital_sensor", "d");
}
else {
digitalWrite(Rele, LOW);
Cayenne.virtualWrite(3, 0, "digital_sensor", "d");
}
}
/////////////
//--Wi-Fi--//
/////////////
CAYENNE_OUT_DEFAULT(){
Cayenne.virtualWrite(4, WiFi.RSSI()); //zobrazeni signalu WiFi
}
Tady fotky:
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 11 bře 2023, 11:04
od kiRRow
Problém je tady
itoa( 100*(timeClient.getHours()+0) + timeClient.getMinutes(), waktu, 10);
převádí to číslo na řetězec, takže když je 1hodina ráno a 23 minut, tak to udělá 100*1+0+23 a pošle to na displej řetězec 123, ty ale potřebuješ 0123 tento příkaz budeš muset nahradit vlastní funkcí, který udělá z čísla řetězec ale když bude počet hodin menší než 10, tak na první znak vloží 0
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 11 bře 2023, 11:20
od kiRRow
ps umělá inteligence poradila :
Ano, máte pravdu, funkce itoa nepřidává nulu na začátek času, který je menší než 10 hodin. Například pro čas "09:30" by funkce itoa vrátila číslo 9 pro hodiny a 30 pro minuty, ale nevložila by tam nulu na začátek. To může být problém při dalším zpracování řetězce.
Existuje však několik způsobů, jak tento problém vyřešit. Jedním z nich je použít funkci sprintf, která umožní vytvořit řetězec s formátovanými daty včetně nul na začátku, pokud jsou potřeba. Například:
Kód: Vybrat vše
int hodiny = 9;
int minuty = 30;
char cas[6]; // pole pro ukládání řetězce
sprintf(cas, "%02d:%02d", hodiny, minuty); // vytvoření řetězce s nulami na začátku
V tomto příkladě funkce sprintf vytvoří řetězec cas o délce 6 znaků s hodnotou "09:30", která obsahuje nuly na začátku pro hodiny a minuty.
Další možností je vytvořit si vlastní funkci pro převod času na řetězec, která bude přidávat nuly na začátek, pokud jsou potřeba.
edit:
akorát jsem jí neřeknul, že nepotřebuji tu dvojtečku, takže char cas[5]; // pole pro ukládání řetězce a sprintf(cas, "%02d%02d", hodiny, minuty); // vytvoření řetězce s nulami na začátku
Re: Wifi hodiny esp8266 + TM1650 + 8025T
Napsal: 11 bře 2023, 11:29
od kiRRow
takže v podstatě bys měl tohle :
Kód: Vybrat vše
itoa( 100*(timeClient.getHours()+0) + timeClient.getMinutes(), waktu, 10);
nahradit tímhle
Kód: Vybrat vše
sprintf(waktu, "%02d%02d", timeClient.getHours(), timeClient.getMinutes());