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

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:
Obrázek
Obrázek
20230311_101456.jpg

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