Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, använder ENC28J60 Ethercard (2 / 2 steg)
Steg 2: Koden
Programmet. Instructables är inte stor i publicering koden, föreslår jag för att använda filen som jag har lagt till
Fulla utveckling historia i denna kod är i den bifogade filen
#include < EtherCard.h > / / om detta bibliotek försvunnit, det är EtherCard.h
#include < Wire.h > / / det är Wire.h
#include < Adafruit_BMP085.h > / / det är Adafruit_BMP085.h
#include < dht11.h > / / det är dht11.h
#define DHT11PIN 2
Adafruit_BMP085 bmp;
dht11 DHT11;
#define APIKEY "QTRR4654FRE3" / / sätta din nyckel här
#define ethCSpin 10 / / sätta CS/SS PIN-koden här.
mac-adress Ethernet-gränssnitt, måste vara unika på LAN
statiska byte mymac [] = {0x75, 0x68, 0x68, 0x68, 0x68, 0x68};
CONST char webbplats [] PROGMEM = "api.thingspeak.com";
byte Ethernet::buffer [700];
uint32_t timer;
Stash stash;
byte session.
timing variabel
int res = 100; var 0
Ogiltiga inställningar () {
Serial.BEGIN(9600);
Serial.println ("\n [ThingSpeak exempel]");
Initiera Ethernet
initialize_ethernet();
}
Ogiltig loop () {
---DHT11---
int chk = DHT11.read(DHT11PIN);
int t=(DHT11.temperature);
int h=(DHT11.humidity);
---BMP180---
BMP.BEGIN();
flyta p = (bmp.readPressure () / 100,0); //this är för trycket i hektoPascal
flyta m=(bmp.readPressure()/133.3); / / Detta är för trycket i mmHG
float t2=(bmp.readTemperature());
---ENC28J60---
om rätt svar inte är fått sedan initiera om ethernet-modul
om (res > 220) {
initialize_ethernet();
}
Res = res + 1.
ether.packetLoop(ether.packetReceive());
200 res = 10 sekunder (50 ms varje res)
om (res == 200) {
Fält1 = (fält 1 Data) & Fält2 = (fält 2 Data) & field3 = (fält 3 Data) & field4 = (fält 4 Data) & field5 = (fält 5 Data) & field6 = (fält 6 Data) & field7 = (fält 7 Data) & field8 = (8 fältdata) & lat = (latitud i decimalgrader) & länge = (longitud i decimalgrader) & höjd = (höjd i meter) & status = (140 tecken meddelande)
byte sd = stash.create();
stash.Print("Field1=");
stash.Print(t);
stash.Print ("& Fält2 =");
stash.Print(h);
stash.Print ("& field3 =");
stash.Print(p);
stash.Print ("& field4 =");
stash.Print(T2);
stash.Print ("& field5 =");
stash.Print(t);
stash.Print ("& field6 =");
stash.Print(h);
stash.Print ("& field7 =");
stash.Print(p);
stash.Print ("& field8 =");
stash.Print(T2);
stash.Save();
generera i huvudet med payload - Observera att stash storlek används,
och att en "stash deskriptorn" skickas i som argumentet med "$H"
Stash::prepare (PSTR ("POST update HTTP/1.0" "\r\n"
"Värd: $F" "\r\n"
"Anslutning: Stäng" "\r\n"
"X-THINGSPEAKAPIKEY: $F" "\r\n"
"Content-Type: application/x-www-formuläret-urlencoded" "\r\n"
"Content-Length: $D" "\r\n"
"\r\n"
"$H"),
hemsida, PSTR(APIKEY), stash.size(), sd);
Skicka paket - även detta befriar alla stash buffertar en gång gjort
session = ether.tcpSend();
från: http://jeelabs.net/boards/7/topics/2241
int allokerade = stash.freeCount();
om (allokerade < = 3) {Stash::initMap(56);}
}
CONST char * svar = ether.tcpReply(session);
om (svar! = 0) {
Res = 0;
Serial.println (F (">>> erhållit svar..."));
Serial.println(reply);
}
Delay(300);
}
void initialize_ethernet(void) {
for(;;) {/ / fortsätta att försöka tills du lyckas
Initiera om ethernet-modul
Serial.println ("nollställa Ethernet...");
digitalWrite (5, låg).
Delay(1000);
digitalWrite 5, hög,
Delay(500);
om (ether.begin (sizeof Ethernet::buffer, mymac, ethCSpin) == 0) {
Serial.println F ("kunde inte komma åt Ethernet controller").
fortsätta;
}
om (! ether.dhcpSetup()) {
Serial.println F ("DHCP misslyckades").
fortsätta;
}
ether.printIp ("IP:", ether.myip);
ether.printIp ("GW:", ether.gwip);
ether.printIp ("DNS:", ether.dnsip);
om (! ether.dnsLookup(website))
Serial.println F ("DNS misslyckades").
ether.printIp ("SRV:", ether.hisip);
återställa init värde
Res = 180;
bryta;
}
}
----------------