duinozone.cz - Arduino a Raspberry fórum

Poslední příspěvky

Stran: 1 [2] 3 4 ... 10
11
Vědátorna / Sestaveni dinamického pole a načítání ruzně velkých dat do něj
« Poslední příspěvek od ijacek.007 kdy Prosinec 08, 2018, 21:03:54 odpoledne »
Zdravím nějakou dobu se mi nedaří elegantně vyřešit problém dinamického přiřazení do pole. Najde se někdo kdo by mi byl schopný pomoci?

V ESP8266 načítám pomocí
<ESP8266HTTPClient.h>
<ArduinoJson.h>

data z webu ktere chci poté zobrazit na displeji mudulu

řetězec vypada nějak takto

{"rychlost":"5000","opakovani":"3","pocet":"4","n1":"Anetka","d1":"25.70°C +","n2":"kotel","d2":"57.56°C +","n3":"venku","d3":"3.20°C","n4":"Cas","d4":"20:41"}

Posilam parametry rychlost , opakovani , pocet a poté již samotné informace na displej kdy je vždy tvar nazev je n+číslo data z něj jsou d+číslo

na displeji tedy chci zobrazit 4 udaju z ukázky a to presneji teploty a cas ktere se co 5 vteřin překleslý a co 3 opakování načtou znovu.

Umím programem zobrazit všechny zaslane proměné problém je že je musím definovat ručně. Nemužu tedy na straně serveru ovlivnit že bych chtěl aktuálně posílat jen 3 místo 4 obrazovek aniž bych zase nepřeprogramoval celý displej.

Kód: [Vybrat]
       Serial.println("Vypisuji hodnoty na e-ink displej");
        float rychlost = json["rychlost"].as<float>();
        byte opakovani = json["opakovani"].as<byte>();
        byte pocet = json["pocet"].as<byte>();
/**/
        String  n1 = json["n1"].as<String>();
        String  d1 = json["d1"].as<String>();
        String  n2 = json["n2"].as<String>();
        String  d2 = json["d2"].as<String>();
        String  n3 = json["n3"].as<String>();
        String  d3 = json["d3"].as<String>();
        String  n4 = json["n4"].as<String>();
        String  d4 = json["d4"].as<String>();

/*
 
        int jmeno[pocet];
        int data[pocet];
       
        for(poc=0;poc<pocet;poc++){

        String text1 = String(poc) ;   
        String text2 = String("n");       
        String text3 = text2 + text1;   // spojeni retezcu

        String text4 = String("d");       
        String text5 = text4 + text1;   // spojeni retezcu


        String  ndp = json[text3].as<String>();
        String  ddp = json[text5].as<String>();
           
        char jmeno[poc] =  ndp;
        char data[poc] = ddp;
       
        }
         
*/

         for(poc=0;poc<opakovani;poc++){ 
         
          // předelat na ciklus !

  /**/
         display.clear();  // clear the display
         display.setTextAlignment(TEXT_ALIGN_RIGHT);
         lcddata(String(n1),String(d1));
         display.display();
         delay(rychlost);
       
         display.clear();  // clear the display
         display.setTextAlignment(TEXT_ALIGN_RIGHT);
         lcddata(String(n2),String(d2));
         display.display();
         delay(rychlost);

         display.clear();  // clear the display
         display.setTextAlignment(TEXT_ALIGN_RIGHT);
         lcddata(String(n3),String(d3));
         display.display();
         delay(rychlost);

          display.clear();  // clear the display
         display.setTextAlignment(TEXT_ALIGN_RIGHT);
         lcddata(String(n4),String(d4));
         display.display();
         delay(rychlost);
   
   
    /**/   
       
        }

Má otázka tedy zní jak dinamicky načítat data do pole a poté je z něj jednoduše zobrazovat? nejsem schoplný udělat cykl který by dinamicky vytvářel proměné a do nich načítal obsah ty poté vložil do pole. Mohl by mi někdo proísm poradit kde proklatě dělám chybu ?


12
Poptávka / Re:Vývoj pro Arduino - poptávka
« Poslední příspěvek od WilliamKristen kdy Listopad 26, 2018, 05:39:27 dopoledne »
kt je komplexni reseni Mereni a regulac
13
Vědátorna / Re:binarne odstupnované LED a LCD displej
« Poslední příspěvek od WilliamKristen kdy Listopad 26, 2018, 05:36:04 dopoledne »
Potreboval by som pre celých 255 posúvaných tlačítkom UP a DOWN
14
Projekty / Webscraper - Arduino + Ethernet / ESP6266 / ESP32
« Poslední příspěvek od martinius96 kdy Listopad 24, 2018, 21:29:52 odpoledne »
Dnes sa budeme baviť o spôsobe, akým som z mikrokontroléru spravil webscraper. (Ak sa to tak dá nazvať pri spracovaní informácii vlastným backendom)
Ako mnohí z vás viete, web scraper je zariadenie, ktoré plní úlohu získavania informácii z danej webovej lokality.  Medzi najžiadanejšie informácie z webových lokalít sú e-mailové adresy, telefónne čísla. V poslednej dobe sa ale tento fenomén používa aj na rôzne štatistické úlohy, kedy web scraper získava údaje o produktoch, ich cene a tie vyhodnocuje.

Dokonca sa podobné zariadenia využívajú a to ako roboty na obchodovanie s kryptomenami, či bežnými menami. Robot v najvhodnejší čas(štatisticky) pedal a nakúpil inú - vhodnú menu so stúpajúcou tendenciou. V mojom prípade som sa zaujímal o získavanie informácii z webov a to konkrétne telefónnych čísel a e-mailových adries.

Prejdem teda priamo k realizácii. Využil som 3 druhy mikrokontrolérov. Pre weby na nešifrovanom HTTP protokole som použil Arduino s Ethernet shieldom (podporuje iba HTTP spojenia), pre weby pod HTTPS protokolom som použil dosku NodeMCU s integrovaným čipom ESP8266 a taktiež aj ESP32 Devkit v1 DOIT. ESP32 má oproti ESP8266 výhodu v tom, že disponuje dvomi jadrami, rýchlejšími o 160MHz, má o takmer 400kB viac RAM a je možné túto dosku napojiť aj do podnikových sietí pod protokolom 802.1x (WPA/WPA2 Enterprise).

Funkčnosť všetkých troch menovaných dosiek je až morbídne jednoduchá. Ich úlohou je iba pripojiť sa na cieľový web, odkiaľ chceme informácie získať a zdrojový kód po riadkoch posielajú na môj web, kde sa tieto informácie spracujú a za pomoci regulárneho výrazu získam informácie, ktoré potrebujem. Nakoľko dosky nedokážu spustiť client-side script, teda Javascript, tak sú chránené pre JS aplikáciami na vyhľadávanie scraperov, iné zariadenia typu Rpi dokážu zaznamenať, pretože pri emulácii prehliadača tieto scripty spustia. Moje dosky sa nezobrazia v Google Analytics, či sledovanom nástroji Smartlook a pod.

Jediná možnosť zaznamenať informácie o doske, že na stránke bola (vykonala GET request)je cez PHP kód, alebo iný serverovo orientovaný jazyk, na ktorý bol request vykonaný.  Je možné pristupovať na rôzne verzie HTTP hlavičiek od 1.0 cez 1.1 a s novšími doskami ESP32 aj na HTTP /2 - podľa podpory cieľového webu. Na mojom webe spracúvavam riadky zdrojového kódu iného webu cez PHP, kde mám vyskladaný requlárny výraz, ktorý som postupne vylepšoval a dnes som schopný zaznamenať tieto druhy e-mailových adries, ktoré sa na weboch vyskytujú v rôznych formátoch, ktoré ich majú uchrániť pred získaním robotmi, scrapermi, crawlermi.

Doskám neprekáža ani obsah za prihlásením, dokážu sa prihlásiť na web ako štandardný používateľ prostredníctvom HTTP Autentizácie - ak to host povoľuje. Postupom času je možné vytvoriť aj pokročilé aplikácie na záznam štatistických údajov z daného webu. Napríklad teplota z niektorej meteo stránky, kurz bitcoinu, štatistika športových zápasov a pracovať s týmito dátami je možné po celé roky.

Jednu stránku môže prehliadať aj niekoľko dosiek súčasne, obecne používam jednu návštevu raz za 6 - 24 hodín, ak sa jedná napríklad o stránky týkajúce sa správ, z čoho je možné následne tvoriť RSS feed, ktorý sa dá umiestniť na môj web, alebo mať podobné využitie. Spracované údaje sa môžu okamžite ukladať do databázy, tabuliek v xml, či csv formáte a tie použiť prakticky ihneď.

Dúfam, že sa vám článok páčil a naučili ste sa jedno z nových využití Arduina, ESP dosiek a otvoreného hardvéru celkovo. Získavanie dát je dnes žiadané a možno tento spôsob získavania dát bude mať za následok v budúcnosti vybudovanie fariem, kde sa podobný hardvér na získavanie využije a spracovanie dát prebehne už v backende danej farmy, ktorá môže s dátami obchodovať, tvoriť miliónové zoznamy e-mailových adries, telefónnych čísel.
*Použitie dát z iného webu a ich sťahovanie musí byť povolené aj z druhej strany :)
Niečo viac o mojom scraperi na NodeMCU: https://arduino.php5.sk/web-scraper.php
Na čítanie obsahu webu stačí použiť príklad Webclienta (Arduino) a upraviť si ho podľa seba: https://www.arduino.cc/en/Tutorial/WebClient
(ESP8266 HTTP): https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiClient/WiFiClient.ino
(ESP8266 HTTPS): https://gist.github.com/9SQ/200c796672b0f4db173e
(ESP32 HTTP): https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClient/WiFiClient.ino
(ESP32 HTTPS): https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFiClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino
(ESP32 pod 802.1x HTTP): https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClientEnterprise/WiFiClientEnterprise.ino
Na podobnom princípe si môžete postaviť vlastné riešenie s celou farmou mikrokontrolérov.
15
Projekty / Ovládanie závlahy cez internet s Arduinom podľa času so zohľadnením počasia
« Poslední příspěvek od martinius96 kdy Listopad 24, 2018, 20:58:35 odpoledne »
Rád by som vás uviedol do projektu, ktorý som realizoval počas tohto roka cez prázdniny. Tvoril som webovo orientovaný systém pre záhradníctvo, ktoré sa špecializuje na predaj a pestovanie rôznych druhov rastlín, stromčekov, kvetov...

Webovo orientovaný systém bol navrhnutý, aby spĺňal tieto požiadavky:
    Záznam teploty, úrovne dažďa, záznam aktivity výstupov
    Riadenie vykurovania/chladenia na základe teploty
    Riadenie závlahy v nastavených časoch, alebo na vyžiadanie so započítaním stavu počasia
    Štatistiky
    Vzdialený reštart dosky
    Logy
    Login systém

Ako riadiaci mikrokontróler sa použilo Arduino Mega, nakoľko Uno bolo na hrane s pamäťou a výrazne sa zasekávalo. Arduino Mega bola výborná voľba vďaka dostatočnému počtu pinov a najmä veľkej pamäti pre program s rozsiahlejšou RAM pamäťou.
Arduino posiela údaje o teplote a daždi na web prostredníctvom Ethernet shieldu Wiznet W5100. Teplota je vyčítaná digitálne zo senzoru DS18B20 a údaj o daždi prostredníctvom analógovej hodnoty. Po odoslaní dát doska spustí PHP skript logiky, čo aktualizuje všetky výstupy.

Doska si následne už len sťahuje stavy ZAP/VYP pre každý výstup, ktorý aplikuje. Na strane mikrokontroléru neprebieha žiadna operácia, ktorá by dosku zaťažovala. Celková odozva systému je do 6 sekúnd. Teplotné čidlo je v sklenníku, kde je nutné udržiavať teplotu. Počas horúcich letných dní sa chladí na nastavenú teplotu s volitelnou hysterézou, počas zimných mesiacov sa vykuruje so stanovenou teplotou a hysterézou.  Zvolenie vykurovania/chladenia je nutné v systéme spraviť manuálne. Je možné manuálne aj chladiť/vykurovať (ZAP/VYP) na dobu neurčitú.

Riadenie okruhov pozostáva zo štyroch fyzických okruhov, ktoré sú riadené na základe času so zvolením dní v týždni, kedy majú tieto časy platiť. Ak nie je tento režim navolený, výstup je stále vypnutý a zapne sa na vyžiadanie používateľa z webu na nastavenú dobu v minútach. Ak počas vyžiadania prší, systém sa vypne a už nezapne. Ak je však nastavený automatický režim s časom a počas tohto času začne pršať, okruh sa vypne a ak prestane pršať pred koncom staveného intervalu, opäť sa zapne.

Do Arduina bol implementovaný watchdog pre bezporuchový chod, kedy je Arduino reštartované, ak sa zasekne. V prípade vypadnutia internetu, alebo nedostupnosti webu, napríklad z dôvodu údržby sú okruhy aj relé kúrenia a chladenia po dvoch minútach automaticky vypnuté do nadviazania spojenia s webom. Po reštarte Arduina sú všetky výstupy vypnuté. Logy zaznamenávajú neúspešné prihlásenie do rozhrania (zlé meno alebo heslo) so zápisom IP adresy klienta, ktorý sa o pripojenie pokúsil. Logy zaznamenávajú aj údaje o neplatných dátach zo senzoru DS18B20 85.00, alebo -127.00, čo sú typické poruchy senzoru v dôsledku zlého zapojenia, chyby CRC.


Súčasťou systému sú aj grafy, kde je možné prezerať vývoj teploty za 24 hodín od momentu načítania grafu a 7 dní dozadu, rovnako aj aktivitu okruhov a aktivitu chladenia/kúrenia. Aktivity sú zaznamenávané každú minútu a teplota raz za 5 minút do databázy (netýka sa práce s real-time dátami). Všetky vstupy/výstupy s ktorými systém pracuje je možné si nazvať podľa seba, pre prehľadnosť, kde sa daný okruh na závlahu používa. Ako výstupy na elmg relé použité v systéme je možné použiť solenoidy, čerpadlá s celkovým výkonom 2,3kW na jedno relé, t.j. 230V 10A. Prípadne pre ovládanie výkonovo nenáročných výstupov je možné použiť aj SSR relé OMRON, ktoré sa predávajú aj s modulmi priamo k Arduinu.

Celý systém je skrytý za loginom, ktorý je taktiež možné meniť z web rozhrania.
Systém je praktický, funkčný a pomáha záhradníctvu vo veciach pravidelného zavlažovania.
Ak vás zaujíma viac info o projekte: https://arduino.php5.sk/ovladanie-zavlahy.php
16
Projekty / DOMINATOR cez Arduino pre Airsoft / Paintball
« Poslední příspěvek od martinius96 kdy Listopad 24, 2018, 20:57:51 odpoledne »
Dnes by som vám rád predstavil už takmer prachom zapadnutý projekt, ktorý som kedysi vytváral pre airsoftový tím. Požiadavka bola naprogramovať DOMINATOR cez Arduino, ktorý by bol univerzálny a spĺňal náležitosti, ktoré by mal mať správny DOMINATOR a trošku ho zmenil, čo sa týka spôsobu ovládania.

Čo ten DOMINATOR vlastne je?
Jedná sa o zariadenie, ktoré sa používa pri hraní herného módu King of the Hill, teda kráľa kopca (bodu). Zariadenie by malo disponovať displejom s dvomi časmi pre oba herné tímy. Tím, ktorý sa k DOMINATORU dostane stlačí tlačidlo a čas sa začne pripočítavať jeho tímu. (Oba časy sú počiatočne nastavené na 00 hodín, 00 minút a 00 sekúnd). Čas sa pripočítava do momentu, kým bod neobsadí iný tím a tlačidlom nezmení pripočítavanie času na svoju stranu. Nakoľko som chcel projekt odlíšiť, využil som RFID čítačku, ktorá dokáže čítať karty a kľúčenky na 13.56MHz (existuje aj ekvivalent na 125kHz) a týmto spôsobom môžeme nahradiť mechanické tlačidlá.


Ako teda systém funguje s RFID čítačkou oproti mechanickým tlačidlám?
RFID čítačka dokáže čítať karty a kľúčenky na spomínanej frekvencii vo vzdialenosti do 3-5cm. Vyžaduje sa teda fyzická prítomnosť niektorého člena tímu. Každý člen tímu má kartu, alebo kľúčenku, ktorej kód je vopred zaznamenaný a uložený do programu. Každý kód je priradený k tímu. Načítanie karty signalizuje aj hlásič - buzzer, ktorý oznamuje zmenu. Čas sa začne pripočítavať tímu, ktorý kartu, alebo kľúčenku priložil. Okrem dvoch tímov som využil aj špeciálne kľúčenky pre organizátora, ktorý dokáže po priložení karty zapauzovať čas v prípade sťažnosti hráča na zásah, zranenie, alebo kvôli inej situácii v hre, ktorá by mohla inému tímu priniesť výhodu. Súčasťou systému je ešte jeden používateľ - tzv. eraser, ktorý dokáže časy vynulovať a zapauzovať zároveň. Používa sa napríklad pri neplatnom odštartovaní hry, neplatnom priložení kľúčenky (napríklad vyradený hráč). Systém nie je limitovaný počtom členov tímu, záleží najmä od pamäťovej náročnosti pre beh programu, nakoľko celý systém pracuje s interným timerom - millisom.

Aký hardvér bol využitý?
Riadiaci mikrokontróler - Arduino Nano pre prototyp/Atmega328P pre hotový projekt
    2x led diódy - indikácia, ktorému tímu sa pripočítava čas (modrá/červená)
    20x4 LCD displej - displej s real-time časmi tímov
    2x relé  - pre pripojenie svetiel na 230V (SSR/elmg.) - napríklad v noci - funkčnosť na základe ledky
    1x hlásič
    1x RFID čítačka RC522 na 13.56MHz
    12x karty/kľúčenky (5x pre tímy, 1x organizátor, 1x eraser)
Princíp programu:
Program pracuje s millisom, čo je procesorový čas od zapnutia. V pravidelných intervaloch, raz za 0.01 sekundy sa vykoná logika systému, ktorá overuje, či sa už niektorému tímu má pripočítavať čas, ak áno, čas sa počíta a vyobrazuje, teda 100x sa vypíše na LCD displej za sekundu, teda 100x refresh/sekunda. Pri využití intervalu 0.001 sekundy bol systém nepresný a komunikácia s rýchlosťou 1000x refresh/sekunda po I2C zbernici na displej nefungovala korektne, nakoľko nejaký čas zaberalo aj samotné čítanie kariet. Knižnica RFID pre čítačku RC522 dokáže prerušením indikovať záznam karty, čo aktivuje hlásič. Na základe výsledku overenia cez jednoduchú if podmienku s adresami kariet (fyzickými) aktivujeme premennú, ktorá pracuje s časom a má v sebe logiku - desatiny, sekundy, minúty a hodiny.

V systéme sú 2 podprogramy, ktoré sú tvorené bool premennými. Každá bool premenná je pre jeden tím. Ak sa nastaví na true, začne sa vykonávať logika pre ten daný tím. Ak sa priloží kľúčenka rovnakého tímu, nič sa nezmení. Ak sa priloží kľúčenka iného tímu, bool pre tím, ktorému sa počítač čas sa zmení na false a pre tím, ktorému sa začne počítať čas na true. Ak kľúčenku priloží organizátor, obe bool premenné sa nastavia na false. Hodnoty - sekundy, minúty a hodiny sú uložené v dynamických globálnych premenných, s ktorými sa vo vnútrie true boolových hodnôt pracuje. Ak kľúčenku priloží eraser, obe bool premenné sa nastavia na false a všetky globálne premenné na 0.
Incializácia premenných

Prevod načítanej karty na jedinečný tvar v DEC tvare + zapnutie hlásiča na 4kHz po dobu 1s

Snippet logiky kariet pre tím 1 - jeho bool premenná nastavená na true

Logika systému bežiaca každých 10ms

Logika systému pre prvý tím:

Vykreslenie výsledkov na displej

Aký je maximálny časový rozsah systému?
Maximálny časový rozsah pri aktuálnom nastavení pozície na LCD displeji je maximálny rozsah 99 hodín, 59 minút, 59 sekúnd. V skutočnosti ale systém dokáže bežať až takmer 50 dní do pretečenia millisu.
Pre koho je systém vhodný?
Systém je vhodný pre tímy, amatérskych hráčov, ktorí si chcú hru prikrášliť, taktiež aj pre niekoľko-dňové akcie typu Fort Benning, možnosť využiť v externých i interných priestoroch, vhodné aj pre športový areál prevádzkujúci Airsoft/Paintball. Nastavenie adries a program sa nahrá iba raz a funguje nepretržite, až ho hráči "zodrú"  I keď... Skôr zničia.. Celý systém je možné osadiť i na DPS. Rozmer závisí najmä od použitého displeja, dá sa použiť 20x4 ako na foto vyššie, alebo 16x2, ktorý dokáže výrazne zmenšiť výsledný rozmer DPS.

Niečo z testovania: - princíp funkčnosti
Video: https://www.youtube.com/watch?v=cx90uJY1UUM
Wiring Arduino pin --> periféria (kompatibilné pre R3 dosky + Nano)

Arduino a prepojenie s LCD s I2C prevodníkom
    A4 --> SDA
    A5 --> SCK/SCL
    5V --> Vcc
    GND --> GND

Arduino a prepojenie s čítačkou RC522
    3.3V --> 3.3V
    GND --> GND
    D9 --> RST
    D10 --> CS
    D11 --> MOSI
    D12 --> MISO
    D13 --> SCK

Arduino a prepojenie hlásiča - v prípade 3-pinového treba priviesť ešte 5V z Arduina
    D5 --> INPUT
    GND --> GND

Arduino a prepojenie  LED + relé
    5V --> 5V relé
    GND --> GND
    D3--> Anóda dióda + relé IN2
    D4 --> Anóda dióda + relé IN1

Knižnice:
RFID - https://github.com/miguelbalboa/rfid
I2C pre LCD - https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Ak vás projekt zaujal, navštívte i môj web, kde sa môžete o projekte dozvedieť viac: https://arduino.php5.sk/airsoft-dominator.php
Cieľom článku bolo ukázať využitie Arduina ako herného prvku - DOMINATORA pre extrémne športy typu Airsoft, Paintball, Nerf Wars.
17
Software / Re:Operační systém
« Poslední příspěvek od Maradon kdy Listopad 16, 2018, 05:47:51 dopoledne »
Get a good idea as an example.
18
Hardware / Re:Raspberry a VGA monitor
« Poslední příspěvek od Maradon kdy Listopad 16, 2018, 05:39:50 dopoledne »
Will try to test it.
19
Bastlírna / Problém s ESP8266-01 modulom
« Poslední příspěvek od noki kdy Říjen 28, 2018, 12:58:33 odpoledne »
PříspěvekZaslal: so říjen 27, 2018 3:13 pm    Předmět: Digitrónové hodiny, problém s ESP8266-01 modulom   Citovat Upravit/Odstranit tento příspěvek Odstranit tento příspěvek
Dobrý deň.
Mám postavené tieto hodiny: https: https://www.nixieclock.biz/StoreClassicRev5.html Po čase som ku nim chcel pripojiť aj WiFi modul. (ovládanie a časový sync. z netu) Modul som naprogramoval. Kompilácia prebehla v poriadku, aj samotné nahranie. Avšak modul nevysiela ssid "NixieTimeModule". Tak ako by mal a je to popísané v tomto manuále: https://www.nixieclock.biz/Downloads/WiFiTimeproviderInstructionManualRev1V2.pdf
Modrá Led na ňom bliká rýchlo, ale neviem nijako docieliť aby vysielal ssid "NixieTimeModule". GPIO 0 pin som samozrejme odpojil od - pólu po úspešnom naprogramovaní.
Poprosím vás, ak by ste mi vedeli poradiť... v čom by mohol byť "pes zakopaný" budem vám vďačný.
Je možné že niekto z vás už túto konštrukciu robil a vedel by mi poradiť.
20
Projekty / Re:Hodiny pro astronomická pozorování
« Poslední příspěvek od Nattapron kdy Říjen 23, 2018, 11:21:09 dopoledne »
Tôi rất thích nó.
Stran: 1 [2] 3 4 ... 10