Kyl övervakning med Arduino MKR1000 och thethings.iO (7 / 12 steg)
Steg 7: Ladda upp skissen Arduino MKR1000
Ladda ner skissen från denna tutorial.
#include < WiFi101.h >
#include < WiFiClient.h >
#include < OneWire.h >
#include < thethingsiO_mkr1000.h >
OneWire ds(2);
#define WIFI_AP "ditt ESSID här
#define WIFI_PWD "Ditt lösenord här"
int status = -1;
int millis_start;
#define TOKEN "din TOKEN här"
thethingsiOWiFi thing(TOKEN);
void setup(void) {
millis_start = millis();
Serial.BEGIN(115200);
startWifi();
}
void loop(void) {
byte i.
byte närvarande = 0;
byte type_s;
byte data [12].
byte addr [8].
flyta celsius, fahrenheit;
om (! ds.search(addr)) {
Serial.println ("inga fler adresser.");
Serial.println();
DS.reset_search();
Delay(250);
hemkomst.
}
Serial.Print ("ROM =");
för (jag = 0; jag < 8; i ++) {
Serial.write(' ');
Serial.Print (addr [i], HEX);
}
om (OneWire::crc8 (addr, 7)! = addr[7]) {
Serial.println ("CRC är inte giltig!");
hemkomst.
}
Serial.println();
den första ROM byten indikerar vilket chip
Switch (addr[0]) {
fall 0x10:
Serial.println ("Chip = DS18S20"); eller gamla DS1820
type_s = 1;
bryta;
fall 0x28:
Serial.println ("Chip = DS18B20");
type_s = 0;
bryta;
fall 0x22:
Serial.println ("Chip = DS1822");
type_s = 0;
bryta;
standard:
Serial.println ("enheten är inte en DS18x20 familj enhet.");
hemkomst.
}
DS.Reset();
DS.Select(addr);
DS.write(0x44, 1); Starta konvertering, med parasit driver på i slutet
Delay(1000); kanske är 750ms nog, kanske inte
Vi skulle göra en ds.depower() här, men Återställ tar hand om den.
Nuvarande = ds.reset();
DS.Select(addr);
DS.write(0xBE); Läs Scratchpad
Serial.Print ("Data =");
Serial.Print (idag, HEX);
Serial.Print("");
för (jag = 0; jag < 9; i ++) {/ / vi behöver 9 byte
data [i] = ds.read();
Serial.Print (data [i], HEX);
Serial.Print("");
}
Serial.Print ("CRC =");
Serial.Print (OneWire::crc8 (data, 8), HEX);
Serial.println();
Konvertera data till faktisk temperatur
eftersom resultatet är en 16-bitars heltal, bör det
lagras till en "int16_t" typ, som alltid är 16 bitar
även när sammanställt på en 32-bitars processor.
int16_t rå = (data [1] << 8) | data [0];
om (type_s) {
rå = rå << 3. 9 bit upplösning standard
om (data [7] == 0x10) {
"räkna fortfarande" ger full 12 bitars upplösning
rå = (rå & 0xFFF0) + 12 - data [6].
}
} annat {
byte cfg = (data [4] & 0x60);
vid lägre res, de låg bitarna är odefinierat, så låt oss noll dem
om (cfg == 0x00) rå = raw & ~ 7. 9 bit upplösning, 93.75 ms
annars om (cfg == 0x20) rå = raw & ~ 3. 10 bitars res, 187.5 ms
annars om (cfg == 0x40) rå = raw & ~ 1. 11 bitars res, 375 ms
standard är 12 bitars upplösning, 750 ms omvandlingstid
}
Celsius = (float) raw / 16,0;
Fahrenheit = celsius * 1,8 + 32,0;
Serial.Print ("temperatur =");
Serial.Print(Celsius);
Serial.Print ("Celsius,");
Serial.Print(Fahrenheit);
Serial.println ("Fahrenheit");
om (millis() > = millis_start + 10000) {
thing.addValue ("Temperatur", celsius);
Thing.send();
millis_start = millis();
}
}
void startWifi() {
Serial.println ("ansluta MKR1000 till nätet...");
WiFi.begin();
försök att ansluta till Wifi-nätverk:
medan (status! = WL_CONNECTED) {
Serial.Print ("försöker ansluta till WPA SSID:");
Serial.println(WIFI_AP);
WiFi.begin (WIFI_AP, WIFI_PWD);
vänta 10 sekunder för anslutning:
Delay(10000);
status = WiFi.status();
}
}
Du måste ändra tre saker i koden, fylla i:
- Essid nätverkets
- Lösenord för nätverket
- Din token (få det genom att klicka på din produkt på thethings.iO)
Spara den och ladda upp den till Arduino.
Om du klickar på den seriella bildskärmen bör du den uppmätta temperaturen.