Stap 6: Uitvoering - verzenden een HTTP-verzoek met Edison
Edison's Ardurino milieu levert alle functies die u moet uitvoeren van een http-verzoek. Gewoon opnemen < Ethernet.h > en het maken van een exemplaar van EthernetClient in mijn voorbeeld aangegeven als "cliënt". Neem een kijkje op de voorbeelden van de vermelding "Ethernet" in het geval dat u meer wilt weten over de bibliotheek.
Hier gewoon wat code fragmenten te tonen u de basisfunctionaliteit. Ik aangesloten de hele broncode in het einde - dit hier is alleen voor jou inzicht - ik hoop het zelf uit te leggen:
char readstring [5000];
EthernetClient de klant;
int i = 0;
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IP-adres server(195,30,121,20); Server is efa.mvv-muenchen.de
Ethernet.begin(Mac);
client.println(cmd); cmd is het verzoek dat u wilt verzenden als een tekenreeks
if(client.available()) {}
char c = client.read(); lezen van een char
readstring [i ++] = c; Zet het aan de char-array
}
Als u nog vragen, bezoek: http://www.arduino.cc/en/reference/ethernet
De tekenreeks "cmd" moet dezelfde structuur als de tekenreeks die we in netcat vóór gebruikten.
cmd = GET /xhr_departures? locationServerActive = 1 & staatloze = 1 & type_d... HTTP/1.0 "
Zorg ervoor dat de juiste tijd en datum binnen de tekenreeks (in het juiste formaat!) behandelen. Ik voegde een ' HTTP / 1.0' op het einde als het werd gedaan in de voorbeelden.
Allereerst moet u controleren als u dezelfde resultaten als met netcat door te drukken van de tekens naar de seriële console. Als u niet - je deed iets verkeerd;). Controleren op typefouten en zorg ervoor om te verzenden dat een regelinvoer '\n' in het einde.
Neem aan dat werkt - Gefeliciteerd! U bent bijna klaar! De rest van uw werk is de informatie die je echt nodig hebt om uit te halen de ontvangen tekenreeks. Je moet dat volgens de gegevens die u ontvangt door de server. Ik deed het in een "quick and dirty" manier en kan je het veel eleganter.
Ik gooi alle tekens voordat ik een begin van het lichaam te zien. U hoeft niet te doen - maar het voelde ongemakkelijk om te houden van alle nutteloze gegevens;). Ik gebruikte "als (strstr (readstring, TBODY" <->")) {" om te controleren.
-Ik keek voor gemeenschappelijk patroon uitpakken van de informatie die ik nodig. Met "j" en "k" Markeer ik de index vlak voor en na de tekens die ik nodig. Gebruik "indexOf" om het te vinden. In mijn geval was het regelnummer omgeven door "... afdrukbare > "en"< \span >". Gebruik "subtekenreeks" om op te slaan van de lijn nummer zelf in een aparte reeks. Herhaal dat voor alle informatie die je nodig hebt.
j = bodyString.indexOf ("\"printable\">", j) + strlen ("\"printable\">");
k = bodyString.indexOf ("</span >", j);
inhoud = bodyString.substring(j,k)