Nextion-UNO-PC

mato
Příspěvky: 49
Registrován: 18 říj 2019, 20:24
Reputation: 0

Nextion-UNO-PC

Příspěvek od mato » 06 úno 2020, 18:24

Ahoj...,
snažím se o docházkový systém,kde Nextion odesílá data na UNO(přes SoftwareSerial),ten je ukládá na SD kartu
a po druhé lince(0,1) je případně načítám z SD karty do PC,kde mám vytvořenou aplikaci ve vb NET a s daty pracuji dále.
Celkem to chodí...,ale!!!!

1.První co mě zarazilo je,že zápis na kartu funguje i když mám CS pin zapojený na jiný pin v arduinu než je deklarovaný!?!?
Omylem jsem ho zapojil na jiný pin a přesto to fungovalo... co vlastně CS pin dělá...??
2.Před zápisem na kartu musím nejdříve kartu zavřít ( myFile.close()) ,jinak mi karta pravidelně po 12-ti zápisech
zůstávala(zřejmě) otevřená a další zápisy prostě nefungovali! A to zřejmě způsobilo,že veškerá data do té doby uložené na kartě byli zničené
viz.příloha... Pokud tam mám ještě před zápisem zavření karty,tak je to OK.
Ale proč je tohle potřeba?? Co dělám špatně??
3.Potřeboval bych ošetřit jeden výpis,který odesílá Nextion pokaždé na linku,když jde do režimu "spánku".
Když ho probudím,tak to jsem schopen ošetřit,ale při přechodu do spánku odesílá data v HEX 0x68 a tam je příkazem
readString() nejsem schopen ošetřit.Je nějaký způsob jakým to udělat příkazem readString...?
4.Když odesílám data na Nextion,tak zároveň odesílám kontrolní zprávu i na druhou linku(PC),která mi vlastně vypíše,zda se zápis podařil.
Pokud ovšem tuto linku(do PC) mám vypnutou,tak mi na arduinu TX led svítí při každém zápisu z displeje na kartu snad 8sec.
Pokud mám linku PC-UNO spuštěnou tak jen TX problikne a hotovo. To samé pokud ty kontrolní výpisy smáznu.Proč tak dlouho??
5.Použitím funkce substring kontroluji poslední znak při příjmu zprávy(ID10 P02 R 04 06/02/20 17:58 L0 K),tím znakem je "K" a je na pozici 32
a dalším parametrem je počet znaků,tím by měla být přeci 1,ale mě to funguje pokud mu dám 33 !!!????
Proč??
Trošku jsem se rozepsal,ale snad srozumitelně :roll:
Děkuji....


Kód: Vybrat vše

/* SD KARTA
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 10
 */

#include <SPI.h>
#include <SD.h>

//komunikace Nextion-UNO
#include <SoftwareSerial.h>
SoftwareSerial swSerial(6, 7);//RX-pin=6 TX-pin=7

File myFile;
File myFile_1;
String slozka="";
String zprava_1 ="";
void setup() {
pinMode(10, OUTPUT);
 
   Serial.begin(9600);//komunikace UNO-PC
   swSerial.begin(9600);//komunikace Nextion-UNO
  while (!Serial) {;}

   if (!SD.begin(10)) {//CS na SD čtečce - na pinu 10 arduino
    Serial.println("Inicializace SD karty neuspesna");
    while (1);
  }else {Serial.println("Inicializace SD karty uspesna");}
       }

void loop() {

   while(swSerial.available()>0) {
    zprava_1 ="";
    zprava_1 = swSerial.readString();
    myFile.close();  // musí být, jinak po 12-ti zápisech se to sekne...!!
    
  if (zprava_1.substring(0,2)=="DO"){slozka=(zprava_1);} //pokud jsou jsou první dva znaky "DO"
  if(!SD.exists(slozka + String("test.txt"))){SD.mkdir(slozka); Serial.println(" slozka vytvorena");}//když uvedená složka neexistuje tak ji vytvoří 

  myFile = SD.open(slozka + String("test.txt"), FILE_WRITE);//otevře kartu
  
  if (myFile) { // zapíše data
     if (zprava_1.substring(0,2)=="ID" && zprava_1.substring(32,33)=="K"){//pokud zprava_1 obsahuje zadaná kritéria zapíše je
     myFile.println(zprava_1);  //zapíše na SD kartu
     
    Serial.println(zprava_1 + String("  karta ulozena"));/po zápisu na kartu odesláno potvrzení na PC
     swSerial.print(F("page1.n2.val="));swSerial.print(1);SerialFFF();//kontrola příjmu zprávy odeslaná na displej
     swSerial.print(F("page0.n0.val="));swSerial.print(1);SerialFFF();
    
   myFile.close();//zavře SD kartu
    }else if(zprava_1==slozka){;
    }else if(zprava_1.substring(0,1)=="h"){Serial.println("display-rezim probuzeni");
    } else { //vše ostatní při zápisu na SD kartu ignoruje
      }  } }

   
    while(Serial.available()>0) {
       zprava_1 = Serial.readString();
       slozka=zprava_1.substring(0,18);
               if (zprava_1.substring(18)=="n1")  {SD.remove(slozka + String("test.txt"));} //vymaže data v uvedené složce na SD kartě
              if (zprava_1.substring(0,5)=="karta")  {nacti_kartu();}
     } zprava_1=""; 
      }  //konec loop

  

         void nacti_kartu() {  //načte data z SD karty
    slozka=zprava_1.substring(5);
      myFile_1 = SD.open(slozka + String("test.txt"),FILE_READ);
  if (myFile_1) { //když je SD karta otevřená pro čtení
      while (myFile_1.available()) {
      Serial.write(myFile_1.read());
     // Serial.println(slozka + String("  karta nactena"));
      }
   myFile_1.close();
  }else if(SD.exists(slozka)==false){ Serial.println("slozka neexistuje");
  }else if(myFile_1==0){ Serial.println("karta je prazdna");
  } else {Serial.println("karta je prazdna");  //pokud je při čtení z SD karty problém
     
   }   myFile_1.close(); zprava_1=""; }


      void SerialFFF(void) {
    swSerial.write(0xff);
    swSerial.write(0xff);
    swSerial.write(0xff);
    //swSerial.println("");
    delay(5); 
      }
Přílohy
Poznámka 2020-02-03 183924.png

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od pavel1tu » 07 úno 2020, 06:26

SD karta je špatná volba, nesnese moc přepisů a nikdy jsem nebyl spokojen s tím jak funguje když se zapisuje často,
na BananaPi kde jsem sbíral data, a system běží na SD kartě, při zápisu 1x za 15min - odkráčela za 6 měsíců.

Já třeba u meteostanice s komunikací po GSM datech, dávám data do PCF8570 (I2C SRAM) a pak to odešlu jako balík.
Je tam ale potřeba baterka pro zálohu a v případě ztráty napájení do dát nouzově na tu SD nebo vysypat do PC.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od ArduXPP » 07 úno 2020, 09:22

Tak místo sram jde použít fram - https://www.aliexpress.com/item/3305158 ... 4c4dLk8jrx , tahle verze je podporována v arduinu, tedy když si stáhneš plugin. 100 Trillion (1014) Read/Writes :) 38 year Data Retention (@ +75ºC). Wide Voltage Operation 2.7V-5.5V. 100 uA Active Current (100 kHz). 15 uA Standby Current (typ.).

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od pavel1tu » 07 úno 2020, 09:52

ArduXPP píše:
07 úno 2020, 09:22
Tak místo sram jde použít fram - https://www.aliexpress.com/item/3305158 ... 4c4dLk8jrx , tahle verze je podporována v arduinu, tedy když si stáhneš plugin. 100 Trillion (1014) Read/Writes :) 38 year Data Retention (@ +75ºC). Wide Voltage Operation 2.7V-5.5V. 100 uA Active Current (100 kHz). 15 uA Standby Current (typ.).
ArduXPP - super, díky ... opět něco nového a vypadá to skvěle
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od ArduXPP » 07 úno 2020, 10:38


mato
Příspěvky: 49
Registrován: 18 říj 2019, 20:24
Reputation: 0

Re: Nextion-UNO-PC

Příspěvek od mato » 07 úno 2020, 20:55

Nooo..,tak to jste mě moc nepotěšili. Měl jsem za to, že ty karty patří mezi ty spolehlivější!!! :o
Spíš mě zaráží ,že se kolem toho ukládání/čtení dějí takové záhady a čekal,že mi tam najdete nějakou chybu!
Zapisovalo by se na ní tak cca 30x denně.
To co uvádíte jako alternativu je pro mě asi složitější.
Spíš jsem už dříve uvažoval o ukládání do externí EEprom,něco takového.
https://arduino-shop.cz/arduino/1359-i2 ... o-pic.html
Použil bych třeba i dva moduly. Stačí mi víceméně zálohat 2 měsíce.Další měsíc by se ten první
už přemazával.Žádné závratné rychlosti od toho neočekávám. Nějakých 4s pro jednotlivý zápis ta EEprom snad dá..,ne?
Je i tohle nějaké řešení.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od pavel1tu » 07 úno 2020, 22:07

EEPROM je každá buňka paměti omezena počtem přepisů/zápisů/mazání - rychlost je dostačující.
Jsou to údajně 100.000 a více přepisů, tak je na tobě zvážit jestli ti to stačí, ale pokud to bude ta externí, tak ji prostě za rok vyhodíš a je to.
Já EEPROM využívám jen na uložení nějakých nastavení třeba přes klávesnici a tak.

Ta FRAM se prodává úplně stejný modul jako ta EEPROM, jen jsem ho nenašel v čechách.

PS: test na Arduinu UNO (český článek), zkoušel kolikrát jde přepsat 1 buňka EEPROM než se zničí:
Počítadlo mého Arduina UNO skončilo na 12.421.920 zápisech. To přišla první chyba. Evidentně vadný kus. Kolik vydrží to vaše?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Nextion-UNO-PC

Příspěvek od AstroMiK » 08 úno 2020, 10:56

Další alternativa k FRAM je EERAM.

Za normálních podmínek se chová jako RAM s neomezeným počtem zápisů a čtení.
Když ale vypadne napájení, tak se z posledních zbytků energie z přídavného kondenzátoru provede automatické zkopírování celé RAM do vnitřní EEPROM.
Když pak napájení zase naběhne, provede se kopírování zpátky z EEPROM do RAM.

Proti FRAM je stejná kapacita zhruba za poloviční cenu:
https://www.tme.eu/cz/details/47c16-i_s ... echnology/
https://www.tme.eu/cz/details/fm24cl16b ... y/cypress/

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Nextion-UNO-PC

Příspěvek od ArduXPP » 08 úno 2020, 11:29

Záleží kde se koupí, na aliexpressu je fram za 13Kč za 32K × 8. Přesto eeram je taky zajímavý. A u fram (ten co já uvádím) je od 2.7 do 5.5V

mato
Příspěvky: 49
Registrován: 18 říj 2019, 20:24
Reputation: 0

Re: Nextion-UNO-PC

Příspěvek od mato » 08 úno 2020, 14:13

Děkuji za info. O tom počtu zápisů vím.Vzhledm k tomu,že by se nejspíš na stejné místo zapisovalo,tak jednou
za 2-3 měsíce by to asi nebyl problém.
Nicméně docela mě mrzí,že s tou SD kartou jsou takovéto problémy. Protože pro mě to je nejjednodušší řešení.
Zrovna tak můžu v nejhorším 1xročně vyhodit SD kartu a dát novou.
Ještě jsem našel jednu kartu s prodlouženou životností,tam dokonce
dávají doživotní záruku. Je sice o něco dražší,ale pokud by byla odolnější....
https://www.cnews.cz/kingston-pametove- ... z-odolnost
https://www.czc.cz/kingston-micro-sdhc- ... 93/produkt
Co vy na to.Máte někdo zkušenosti i s touto kartou? A podporuje UNO potažmo čtečka takovouto kapacitu?

Odpovědět

Kdo je online

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