Den billigaste och enklaste metoden att kontrollera arduino via ethernet
Visas översikt, ledningar instruktioner, arduino skiss, testning samt en extra del på att skapa en android app som kommunicerar med servern på ethernet-modul.
Arduino skiss nedan, kopiera bara och klistra in
En enkel webbserver som visar temperatur och kontroller en LED
#include "etherShield.h"
#include "ETHER_28J60.h"
#include
OneWire ds(A3); på stift A3
int celsius, celsiusF;
int outputPin = 3; den LED stiftet
statisk uint8_t mac [6] = {
0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; Detta måste bara vara unika för ditt nätverk,
så om du inte har mer än en av dessa styrelser
ansluten, ska du vara bra med detta värde.
statisk uint8_t ip [4] = {
192, 168, 1, 15}; IP-adressen för din styrelse. Kontrollera ditt hem nav
att hitta en IP-adress är inte i bruk och plocka
Detta eller 10.0.0.15 är sannolikt format för en adress
kommer det att fungera.
statiska uint16_t port = 80. Använda port 80 - standarden för HTTP
ETHER_28J60 e;
void setup()
{
Serial.BEGIN(9600);
e.Setup (mac, ip, port);
}
void loop()
{
char * params;
om (params = e.serviceRequest())
{
e.Print ("temperatur
");
e.Print(Celsius);
e.Print(",");
e.Print(celsiusF);
e.Print ("C").
e.Print("
");
e.Print("
");
e.Print ("LED control");
e.Print ("stänga av
");
e.Print ("vända på
");
om (strcmp (params, "? cmd = på") == 0)
{
digitalWrite (outputPin, hög);
e.Print ("LED är på");
}
annars om (strcmp (params, "? cmd = off") == 0)
{
digitalWrite (outputPin, låg);
e.Print ("LED är OFF");
}
e.respond();
Delay(100);
}
annat
{
{
byte i.
byte närvarande = 0;
byte type_s;
byte data [12].
byte addr [8].
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(10); 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(present,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
unsigned int rå = (data [1] << 8) | data [0];
om (type_s) {
rå = rå << 3. 9 bit upplösning standard
om (data [7] == 0x10) {
greve förbli ger full 12 bitars upplösning
rå = (rå & 0xFFF0) + 12 - data [6].
}
}
annat {
byte cfg = (data [4] & 0x60);
om (cfg == 0x00) rå = rå << 3. 9 bit upplösning, 93.75 ms
annars om (cfg == 0x20) rå = rå << 2. 10 bitars res, 187.5 ms
annars om (cfg == 0x40) rå = rå << 1. 11 bitars res, 375 ms
standard är 12 bitars upplösning, 750 ms omvandlingstid
}
Celsius = abs(raw / 16.0);
celsiusF = (rå / 16,0 - celsius) * 100;
Serial.Print ("temperatur =");
Serial.Print(Celsius);
Serial.Print(",");
Serial.println(celsiusF);
}
}
}