De code voor andere WiFi- of Ethernet Shields/Boards is vergelijkbaar. Het verschil zit alleen in de gebruikte bibliotheek.
Alternatief bij gebruik van Ethernet:
Of u kunt de volgende kits kopen:
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Wanneer u een website opent op uw pc of smartphone, typt u simpelweg het webadres (URL) in de browser, wacht een moment en dan wordt de webpagina weergegeven op uw pc/smartphone. U ziet niet wat er achter de schermen gebeurt. Dit is wat er achter de schermen plaatsvindt:
Uw pc/smartphone (als webclient) verstuurt een HTTP-request naar een webserver
De webserver stuurt een HTTP-response terug naar uw pc/smartphone
Uw pc/smartphone ontvangt de HTTP-response en toont deze op het scherm
In deze handleiding laten we de Arduino fungeren als webclient die iets soortgelijks doet als uw pc/smartphone.
Een URL bestaat uit twee delen: hostname en pathname. Het hostname kan vervangen worden door het IP-adres van de webserver. Bijvoorbeeld: example.com/test
In een HTTP GET-verzoek kan de URL ook een query string bevatten. Bijvoorbeeld: example.com/test?temperature=20&humidity=70.
De query string is een reeks naam-waardeparen die in het HTTP-request worden meegestuurd om gegevens van de webclient naar de webserver te sturen.
Naam en waarde zijn gescheiden door "="-teken. Naam-waardeparen zijn gescheiden door "&"-teken.
Bijvoorbeeld: temperature=26&humidity=70&state=2
Een HTTP-request bestaat uit:
HTTP-request header en body zijn gescheiden door twee combinaties van carriage return (ASCII 13, '\r') en newline (ASCII 10, '\n').
Er zijn veel HTTP request-methodes. Twee veelgebruikte methodes zijn: GET en POST. Gewoonlijk gebruiken we GET om data op te halen van een webserver en POST om data naar een webserver te sturen. Echter, GET kan ook gebruikt worden om data te versturen en ontvangen.
We moeten de volgende waarden bepalen:
Webadres (URL)
Request-methode (POST of GET)
HTTP-poort die de webserver gebruikt (meestal poort 80 voor HTTP)
(Optioneel) Data die naar de webserver wordt gestuurd (query string). In deze handleiding gaan we ervan uit dat we temperatuur en luchtvochtigheid sturen naar een webserver in het formaat ?temperature={t-waarde}&humidity={h-waarde}.
Het webadres (URL) wordt opgesplitst in hostname en pathname.
In dit gedeelte wordt alleen code toegelicht die te maken heeft met HTTP. De volledige code per shield staat in het laatste deel.
Declareer request-methode, HTTP-poort, hostname, pathname, query string
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "example.phpoc.com";
String PATH_NAME = "";
| |
| Arduino Ethernet Shield | EthernetClient client; |
| Arduino Uno WiFi | WiFiClient client; |
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
} else {
Serial.println("connection failed");
}
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.available())
{
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
Serial.println("disconnected");
client.stop();
}
U kunt data opnemen in een HTTP-request. Het dataformaat is afhankelijk van de HTTP request-methode:
HTTP GET-request
HTTP POST-request
Kan data verzenden NIET ALLEEN in query string, maar ook in andere formaten zoals JSON, XML, afbeelding, etc.
Data is de HTTP-body van het request
We moeten alleen de code aanpassen die het HTTP-request verstuurt:
int temp =
int humi =
String queryString = String("?temperature=") + String(temp) + String("&humidity=") + String(humi);
Pas de code aan voor het versturen van data in het HTTP-request
client.println("GET " + PATH_NAME + queryString + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println("POST " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println(queryString);
while(client.available())
{
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
Serial.println("disconnected");
client.stop();
}
Hieronder staat de complete Arduino-code voor het maken van HTTP GET/POST requests
#include <WiFiS3.h>
const char ssid[] = "YOUR_WIFI_SSID";
const char pass[] = "YOUR_WIFI_PASSWORD";
WiFiClient client;
int status = WL_IDLE_STATUS;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
void setup() {
Serial.begin(9600);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true)
;
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
if (client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <WiFiS3.h>
const char ssid[] = "YOUR_WIFI_SSID";
const char pass[] = "YOUR_WIFI_PASSWORD";
WiFiClient client;
int status = WL_IDLE_STATUS;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";
;
void setup() {
Serial.begin(9600);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true)
;
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
if (client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <WiFiS3.h>
const char ssid[] = "YOUR_WIFI_SSID";
const char pass[] = "YOUR_WIFI_PASSWORD";
WiFiClient client;
int status = WL_IDLE_STATUS;
int HTTP_PORT = 80;
String HTTP_METHOD = "POST";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";
;
void setup() {
Serial.begin(9600);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true)
;
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
if (client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println(queryString);
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "POST";
char HOST_NAME[] = "maker.ifttt.com";
String PATH_NAME = "/trigger";
String queryString = "?value1=26&value2=70";;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
if(client.connect(HOST_NAME, HTTP_PORT)) {
Serial.println("Connected to server");
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println();
client.println(queryString);
while(client.connected()) {
if(client.available()){
char c = client.read();
Serial.print(c);
}
}
client.stop();
Serial.println();
Serial.println("disconnected");
} else {
Serial.println("connection failed");
}
}
void loop() {
}
※ Notiz:
Deze handleiding gaat uit van een dynamisch IP-adres (via DHCP). Wilt u een statisch IP-adres gebruiken:
WARNING
Let op: deze tutorial is nog niet compleet. We zullen een bericht plaatsen op onze Facebook-pagina wanneer de tutorial compleet is. Like de pagina om op de hoogte te blijven.