Toont het overzicht, de bedrading instructies, de arduino schets, testen, alsmede een extra onderdeel op het creëren van een android app die communiceert met de server op de ethernet-module.
Arduino schets hieronder, gewoon kopiëren en plakken
Een eenvoudige web-server ziet temperatuur en besturing een LED
#include "etherShield.h"
#include "ETHER_28J60.h"
#include
Privacy ds(A3); op pin A3
int celsius, celsiusF;
int outputPin = 3; de LED-pin
statische uint8_t mac [6] = {}
0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; Dit moet net uniek zijn voor uw netwerk,
dus tenzij u hebt meer dan een van deze planken
aangesloten, moet je wel goed met deze waarde.
statische uint8_t ip [4] = {}
192, 168, 1, 15}; het IP-adres voor uw bord. Controleer uw huis-hub
te vinden van een IP-adres niet in gebruik en kies die
Dit of 10.0.0.15 zijn waarschijnlijk formaten voor een adres
dat zal werken.
statische uint16_t poort = 80; Gebruik van poort 80 - de standaard voor HTTP
ETHER_28J60 e;
VOID Setup
{
Serial.begin(9600);
e.Setup (mac, ip, port);
}
void loop
{
char * params;
Als (params = e.serviceRequest())
{
e.Print ("temperatuur
");
e.Print(Celsius);
e.Print(",");
e.Print(celsiusF);
e.Print ("C");
e.Print("
");
e.Print("
");
e.Print ("LED control");
e.Print ("uitschakelen
");
e.Print ("inschakelen
");
Als (killerid (params, "? cmd = on") == 0)
{
digitalWrite (outputPin, hoge);
e.Print ("LED brandt");
}
else if (killerid (params, "? cmd = off") == 0)
{
digitalWrite (outputPin, laag);
e.Print ("LED is OFF");
}
e.Respond();
delay(100);
}
anders
{
{
byte i;
byte aanwezig = 0;
byte type_s;
bytegegevens [12];
byte addr [8];
Als (! ds.search(addr)) {}
Serial.println ("geen meer adressen.");
Serial.println();
DS.reset_search();
delay(250);
terugkeer;
}
Serial.Print ("ROM =");
voor (ik = 0; ik < 8; i ++) {}
Serial.write(' ');
Serial.Print (addr [i], HEX);
}
Als (OneWire::crc8 (addr, 7)! = addr[7]) {}
Serial.println ("CRC is niet geldig!");
terugkeer;
}
Serial.println();
de eerste ROM byte aangeeft welke chip
schakelaar (addr[0]) {}
Case 0x10:
Serial.println ("Chip = DS18S20 '); of oude DS1820
type_s = 1;
breken;
Case 0x28:
Serial.println ("Chip = DS18B20");
type_s = 0;
breken;
Case 0x22:
Serial.println ("Chip = DS1822 ');
type_s = 0;
breken;
standaard:
Serial.println ("apparaat is niet een DS18x20 familie apparaat.");
terugkeer;
}
DS.reset();
DS.Select(addr);
DS.write(0x44,1); Start conversie, met kracht van de parasiet op eind
delay(10); Misschien volstaat 750ms, misschien niet
wij hier een ds.depower() zou kunnen doen, maar het resetten zal verzorgen.
huidige = ds.reset();
DS.Select(addr);
DS.write(0xBE); Lees Kladblok
Serial.Print ("Data =");
Serial.Print(present,hex);
Serial.Print("");
voor (ik = 0; ik < 9; i ++) {/ / moeten we 9 bytes
gegevens [i] = ds.read();
Serial.Print (gegevens [i], HEX);
Serial.Print("");
}
Serial.Print ("CRC =");
Serial.Print (OneWire::crc8 (gegevens, 8), HEX);
Serial.println();
de gegevens converteren naar werkelijke temperatuur
unsigned int rauwe = (gegevens [1] << 8) | gegevens [0];
Als (type_s) {}
ruwe = rauwe << 3; 9 bits resolutie standaard
Als (gegevens [7] == 0x10) {}
Graaf blijven geeft volledige 12 bit resolutie
ruwe = (raw & 0xFFF0) + 12 - gegevens [6];
}
}
else {}
byte cfg = (gegevens [4] & 0x60);
Als (cfg == 0x00) rauwe = rauwe << 3; 9 bit resolutie, 93.75 ms
anders als (cfg == 0x20) rauwe = rauwe << 2; 10 bit res, 187,5 ms
anders als (cfg == 0x40) rauwe = rauwe << 1; 11 bits res, 375 ms
Standaard is 12 bit resolutie, 750 ms conversietijd
}
Celsius = abs(raw / 16.0);
celsiusF = (raw / 16.0 - celsius) * 100;
Serial.Print ("temperatuur =");
Serial.Print(Celsius);
Serial.Print(",");
Serial.println(celsiusF);
}
}
}