Stap 5: De code van de steekproef
/*
Voorbeeld van de schakelaar van de macht van de client van het sensor van Yeelink * / #include #include #include #include byte buff [2]; voor yeelink api #define APIKEY "537ef1cef1b8726b39347abb8c0c809a" / / Vervang uw api-sleutel van de yeelink hier #define DEVICEID 7931 / / Vervang uw Apparatenidentiteitskaart #define SENSORID 12568 / / Vervang uw ID sensor / / toewijzen van een MAC-adres voor de ethernet-controller. byte mac [] = {0 × 00, 0x1D, 0x9D, 0 × 72, 0 × 82, 0 × 35}; initialiseren van de aanleg van de bibliotheek: EthernetClient cliënt; char [server] = "api.yeelink.net"; naam adres voor yeelink API unsigned long lastConnectionTime = 0; laatste keer dat u verbinding met de server hebt, in milliseconden Boole lastConnected = false; status van de verbinding van de laatste tijd door de belangrijkste lus const unsigned long postingInterval = 3 * 1000; de wachttijd tussen de 2 datapoints, 30s String returnValue = ""; Boole ResponseBegin = false; void setup {pinMode (7, OUTPUT); Wire.begin(); Start van de seriële poort: Serial.begin(57600); Start van de Ethernet-verbinding met DHCP: als (Ethernet.begin(mac) == 0) {Serial.println ("Failed to Ethernet via DHCP configureren"); for(;;);} else {Serial.println ("Ethernet configuratie OK");}} void loop {/ / als er binnenkomende gegevens uit de netto verbinding. / / het afgeven van de seriële poort. Dit is voor foutopsporing / / doeleinden: als (client.available()) {char c = client.read(); / / Serial.print(c); als (c == ' {") ResponseBegin = true; anders als (c == '}") ResponseBegin = false; als (ResponseBegin) returnValue += c;} als (returnValue.length()! = 0 & & (ResponseBegin == false)) {Serial.println(returnValue); als (returnValue.charAt(returnValue.length()-1) == ' 1′) {Serial.println ("turn op de LED"); digitalWrite (7, hoog);} anders if(returnValue.charAt(returnValue.length()-1) == ' 0) {Serial.println ("zet de LED"); digitalWrite (7 LAAG); returnValue} = "";} Als er geen netto verbinding is, maar er een laatste keer was / / door de lus, dan stoppen de client: als (! client.connected() & & lastConnected) {Serial.println(); Serial.println("disconnecting."); client.stop(); } / / Als u niet verbonden bent, en tien seconden zijn verstreken sinds / / uw laatste verbinding, vervolgens opnieuw verbinding maken en verzenden van gegevens: if(!client.connected() & & (millis()-lastConnectionTime > postingInterval)) {/ / sensorgegevens lezen, vervang met uw code //int sensorReading = readLightSensor(); Serial.Print("yeelink:"); gegevens ophalen uit server getData(); } / / de status van de verbinding voor de volgende keer via winkel / / de lus: lastConnected = client.connected(); } / / Deze methode maakt een HTTP-verbinding met de server en krijg gegevens terug nietig getData(void) {/ / als er een succesvolle verbinding: als (client.connect (server, 80)) {Serial.println("connecting..."); Stuur het HTTP GET-verzoek: client.print ("GET /v1.0/device/"); client.Print(DEVICEID); client.Print("/sensor/"); client.Print(SENSORID); client.Print("/datapoints"); client.println ("HTTP/1.1); client.println ("Host: api.yeelink.net"); client.Print ("Accept: *"); client.Print("/"); client.println("*"); client.Print ("U-ApiKey:"); client.println(APIKEY); client.println ("Content-Length:" 0 "); client.println ("verbinding: sluiten"); client.println(); Serial.println ("afdrukken krijgen gedaan."); } else {/ / als u een verbinding kon het niet maken: Serial.println ("verbinding mislukt"); Serial.println(); Serial.println("disconnecting."); client.stop(); } / / Let op de tijd die de verbinding werd gedaan of geprobeerd: lastConnectionTime = millis(); }