Wifi hodiny esp8266 + TM1650 + 8025T

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od johnyhol » 05 dub 2022, 21:58

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.
Přílohy
1803103702-178878191.jpg
20220402_224838.jpg
-1087823199-1657895631.jpg
-1087823199-1657895631.jpg (21.43 KiB) Zobrazeno 3423 x

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od Caster » 05 dub 2022, 23:05

Pomohlo by dát sem odkaz na AliExpress, kde jsi je koupil ;) .

johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od johnyhol » 06 dub 2022, 08:31


johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od johnyhol » 06 dub 2022, 09:56

Jenom číňan poslal jiný typ než byl deklarovaný, tzn. nemá např. tlačítko set pro párování wifi atd.

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od Caster » 06 dub 2022, 11:36

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".

johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od johnyhol » 06 dub 2022, 20:25

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. :cry:

johnyhol
Příspěvky: 33
Registrován: 07 pro 2017, 21:17
Reputation: 0

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od johnyhol » 11 bře 2023, 10:31

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:
Obrázek
Obrázek
20230311_101456.jpg
Přílohy
20230311_102512.jpg

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od kiRRow » 11 bře 2023, 11:04

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

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od kiRRow » 11 bře 2023, 11:20

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

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Wifi hodiny esp8266 + TM1650 + 8025T

Příspěvek od kiRRow » 11 bře 2023, 11:29

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());

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 15 hostů