Arduino WebClient

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 20:13

Dobrý deň, chcem odosielať API stránky z arduina cez ethernet shield. Ako sú príklady z knižnice Ethernet -> Webclient kde sa odosiela GET na server http://www.google.com/search/arduino. Tak som to prepísal client.println("GET http://www.bittrex.com/api/v1.1/public/getmarkets HTTP/1.1"); ale server mi hlási že zle zadaná požiadavka... ako som čítal na serveri Bittrex( https://bittrex.com/home/api ) tak požiadavky majú byť vo formáte application/json a to už neviem v akom formáte odosiela. Potreboval by som poradiť v prílohe pošlem nejaké printscreeni. Za odpoveď vopred Ďakujem.

Kód: Vybrať všetko

/*
  Web client

 This sketch connects to a website (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe, based on work by Adrian McEwen

 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.bittrex.com";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 443)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET www.bittrex.com/api/v1.1/public/getmarkets HTTP/1.1");
    client.println();
    
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}
ako vidíte na obr. ked odošlem nejaký takýto príkaz https://www.bittrex.com/api/v1.1/public/getmarkets/:443 tak mi stránka vypíše Bad Request takže nie som uplne daleko od pravdy
Prílohy
1.png
2.png
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 20:54

Obavam sa, ze arduino nevie HTTPS requesty. Mozno po nejakom tuningu, ale nativne nie. Nema dost vykonu.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 21:04

Nie je veľa príspevkov na túto tému tak je to dosť možné našiel som napr. thingspeak ktoré robí s API ale vrámci svojho serveru... napr. odosielanie infromácii napr. teploty ešte pekne aj do grafu v Matlabe to ukladá ;) ale len na ich server .... a ten výkon podla mňa nie je problém... samozrejme neuvažujem odosielať/spracovávať informácie v priebehu 1ms. Na to by bolo asi Arduino prikrátke. Aj tak ďakujem za odpoveď
Nepočul som to slovo request tak som teraz vygooglil nejaké reques arduino a natrafil so na jedno https://github.com/esp8266/Arduino/blob ... equest.ino
vypadá to celkom zaujímavo táto časť programu

Kód: Vybrať všetko

String url = "/repos/esp8266/Arduino/commits/master/status";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n\r\n");

  Serial.println("request sent");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("headers received");
      break;
    }
idem to skúsiť
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 21:12

Hned prvy na googli.

https://arduino.stackexchange.com/quest ... on-arduino

Zalezi, ake Arduino. Ale vo vseobecnosti to bezny 8bit nevie.

Ano, ten priklad je fajn, ale pre ESP, cize wifi modul. Ten by uz mal HTTPS zvladat.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 21:18

Aj ESP mám doma ... ale fakt je to rozdiel.. ved to je v podstate to isté iba že to je sprované cez wifi a nie napriamo cez LAN ? či sa mýlim ?
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino WebClient

Príspevok od používateľa peterple » 09 Jan 2018, 21:21

samozrejme že sa nájdu šialenci čo to implementujú aj na arduino. Videl som aj linux na AVR (emuloval 32bit procesor)

Kód: Vybrať všetko

Arduino UNO       16Mhz AVR               ==> 12596 ms*   8504 ms#
Arduino Leonardo  16Mhz AVR               ==> 12682 ms*   8563 ms#
Arduino Mega      16Mhz AVR               ==> 12596 ms*   8504 ms#
Arduino Due       84Mhz ARM               ==>  1032 ms*
Arduino Yún       16Mhz AVR + 400Mhz MIPS ==>   707 ms*
Intel Galileo     400Mhz x86              ==>   192 ms*
http://evothings.com/is-it-possible-to- ... ithin-iot/
Druhá vec je že to nemá komplet a pochybujem že to narveš ešte celý komunikačný stack.
Treba si uvedomiť že tá vec má 4kiBy SRAM pamäte na všetko. Tak sa mi to zdá dosť nereálne už aj preto, ak ti nevadia tie dlhé časy. Teda neviem čo by na ne povedal TCP protokol.

Prečo chcete nereálne veci po arduine keď je tu mraky iných dostatočne výkonných MCU. Z neznalosti?
ESP a arduino je sakra rozdiel. si porovnaj technické parametre ako pracovná frekvencia, pamäť programu, pamäť dát.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 21:32

Nie medzi arduinom a ESP ale ESP a Ethernet shieldom ;) No potom ako pracuje Webclient ? ved ked som odosial do google.com/ search tak mi vypísalo HTML co mi stačí ... v podsate aj zo serveru bittrex mi vypísalo iba to že " nerozmie požiadavke" ja by som len potreboval informáciu dostať do arduina a spracovať ich.
toto vypadá zaujimvao https://diyprojects.io/esp8266-web-clie ... lUo3VXibIW
zajtra to skúsim čo to povie ... či mi odpovie na API :D
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 21:54

Kym nebude bittrex vediet HTTP, tak to na ethernet shielde nerozbehnes.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 21:57

Z ESP by mohol vydiet HTTP ? https://www.arduino.cc/en/Tutorial/HttpClient Arudino YUN by to zvládlo teda áno ?
0
Naposledy upravil/-a palo399 v 09 Jan 2018, 21:59, upravené celkom 1 krát.

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 21:59

Eh? Nerozumiem.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 22:03

No či cez ESP dokážem odoslať HTTP serveru bittrex ... ja som mu cez ethernet shield aj odosielal HTTP
client.println("GET http://www.bittrex.com/api/v1.1/public/getmarkets HTTP/1.1");
0
Naposledy upravil/-a palo399 v 09 Jan 2018, 22:09, upravené celkom 1 krát.

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 22:04

HTTP vie aj ethernet shield.

Len ty si do poziadavky pchal port 443, tam je ten problem.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino WebClient

Príspevok od používateľa peterple » 09 Jan 2018, 22:08

palo399 napísal:No potom ako pracuje Webclient ? ved ked som odosial do google.com/ search tak mi vypísalo HTML co mi stačí ... v podsate aj zo serveru bittrex mi vypísalo iba to že " nerozmie požiadavke" ja by som len potreboval informáciu dostať do arduina a spracovať ich.
záleží na akom protokole. Ak na http tak klient pošle požiadavku na server (to môže byť tak do 50byte textu) A server pošle odpoveď povedzme tak 100byte textu ak je to jednoduchá stránka.
V prípade https to máš na tom obrázku z linku čo sme ti to už dvaja poslali
Obrázok
Na požiadavku si server vymyslí privátny a verejný kľúč. Ten verejný ti pošle, Ti si vymyslíš privátny a verejný kľúč a svoj verejný mu pošleš. No a potom to čo sa v http prenášalo ako čitatelný text tak obe strany musia pred odoslaním zašifrovať svojim privátnym kľúčom a odpovede dešifrovať verejným kľúčom protistrany. Takže tie kľuče musíš mať niekde odložené (v SRAM, jeden kúč má 128byte a máš štyri) a to šifrovanie je sakra komplikovaná pesnička. Okrem toho musíš vytvárať pakety pre Ethernet. IP, TCP vrstvu - to sa volá komunikačný stack. To všetko koštuje nejakú SRAM. Máš 4kiBy a 1kiBy si minul len na klúče. A tie ostatné veci uložíš do 3kiBy? Lenže to by si musel mať predstavu čo ktorá vrstva potrebuje za datové štruktúry.

Tvoja požiadavka na arduino a HTTPS je ako by si chcel íst na jednej kolečkovej brusli po dialnici do anglicka. A čudoval by si sa že ťa všade policajti vyhadzujú a vodiči idúci po tej dialnici nevychádzajú z údivu a zdesenia.

Ešte sa divíš že ti server pri https na druhej stane nerozumie, keď mu ani nepošleš svoj verejný kľúč.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 22:17

Riesenie:
Pouzit nieco vykonnejsie (raspberry, orangepi, bananapi napriklad), alebo sa trapit a vymyslat s kadejakymi YUN duinami.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 22:26

Dakujem za pekný poučný príspevok. Tak ethernet shield s arduinom v podstate môže pracovať len cez HTTP serveri nie na HTTPS lebo to šifrovanie je náročné na RAM ROM, pamäť.... Tak isto aj ESP8266 môžem vylúčiť ...
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 22:31

Keby si hned na zaciatku trosku viac vysvetlil, co z toho bude, mozno by sme sa ubrali inym smerom a nasli nieco vhodnejsie.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino WebClient

Príspevok od používateľa peterple » 09 Jan 2018, 22:34

ESP8266 je už trochu silnejšia mašina. To je niečo ako trabant na tej dialnici. Nie je to žiadne super fáro, ale zvládne to.
https://github.com/esp8266/Arduino/blob ... equest.ino
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 22:47

Áno to je celkom dobrý návrh :) Niesom nejaký informatik ale rád pogramujem v Arduine takže iné programovacie jazyky mi moc nehovoria preto som to chcel implementovať do Arduina. ale vidím že dneska mi môj sen s Arduinom zhasol :D :D.
V podstate chcem získavať hodnoty cca každú 1s zo stránky dosielanim API https://bittrex.com/api/v1.1/public/get ... et=eth-ltc
Hodnoty ukladať a prepočítavať ich.

Urobil som to cez Apache dostal som sa aj k hodnotám, že mi ich ukladá do textového súboru ale ďalej neviem čo s nimi. chcelo by ich do arduina prepočítať a poslať naspäť do .txt :D :D :D
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino WebClient

Príspevok od používateľa alidedko » 09 Jan 2018, 22:58

Ak mas k dispozicii webovy server (nieco seriozne), preco nie. Ale to by som uz robil vsetko priamo na nom :)

Co ma byt vystup z toho celeho? Naozaj to ideme z teba tahat ako z chlpatej deky?
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

palo399
Nový člen
Nový člen
Príspevky: 62
Dátum registrácie: 24 Máj 2015, 22:08

Re: Arduino WebClient

Príspevok od používateľa palo399 » 09 Jan 2018, 23:09

Co chceš počuť nič viac :D len získavať tie čísla čo som ti poslal vyššie zaznamenať ich asi tak 1000 hodnôt aktualizovať vždy o novú hodnotu a vypočítavať kolko stupa a kolko klesá voči času .... v podstate ako graf vždy aktualizovať a prepočítavať ...
To Raspberry Pi bude asi dobrá volba aspon sa naučím niečo nové :applause:

Išlo mi o to že Arduino si vie pamätať informácie napr. ako zo senzoru a VEDEL by som ich spracovať už som mal nejaké predstavy .. ale v Apache ...neviem ako to funguje celé keby som mal aspoň nejaký návod alebo dobré informácie ...
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok