Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, via kabel eller WiFi (ESP8266) (2 / 5 steg)
Steg 2: Programmet
Nedan finner du den fullständiga koden.
Bara några anmärkningar:
BMP180 är en uppdaterad version av BMP085. De BMP085 biblioteken är kompatibla med BMP180.
AdaFruit har 2 versioner av den libray. Jag plockade version 1 som jag fann det lättare att arbeta med. Version 2 kräver också installation av "Sensor" biblioteket.
I koden jag också presentera en extra float: är ". som ger trycket i "mmHg" som jag inte har använt det för nu finns det ingen sträng konvertering ännu och det läggs inte till datastream, men att lägga till det bör nu vara så enkelt som 1 + 1
/*
Arduino -> ThingSpeak kanal via Ethernet
ThingSpeak klient skissen är utformad för Arduino och Ethernet.
Denna skiss uppdaterar en kanal matar med en analog ingång läsning via den
ThingSpeak API (http://community.thingspeak.com/documentation/)
använda HTTP POST. Arduino använder DHCP och DNS för en enklare nätverksinstallation.
Skissen innehåller också en vakthund / Reset-funktion för att se till att den
Arduino förblir kopplad och/eller återfår anslutning efter en nätverk avbrott.
Använda följetong bildskärmen på Arduino IDE för att se utförligt nätverk feedback
och ThingSpeak anslutning status.
Komma igång med ThingSpeak:
* Registrera dig för nytt användarkonto - < en href = "https://www.thingspeak.com/users/new" rel = "nofollow" > https://www.thingspeak.com/users/new
< /a >
* Ange en MAC-adress i denna skiss under "Inställningar för lokalt nätverk"
* Skapa en ny kanal genom att välja kanaler och sedan skapa nya kanal
* Ange skriver API-nyckel i denna skiss under "ThingSpeak inställningar"
Arduino krav:
* Arduino med Ethernet Shield eller Arduino Ethernet
* Arduino 1.0 IDE
Nätverkskraven:
* Ethernet-porten på routern
* DHCP aktiverat på routern
* Unika MAC-adressen för Arduino
Skapad: Oktober 17, 2011 av Hans Scharler (http://www.iamshadowlord.com)
Extra poäng:
Exempel skisser från Arduino team, Ethernet av Adrian McEwen
Lade till dht11/BMP180 visade dtostrf funktion av diy_bloke 22/11/2014
*/
#include < SPI.h >
#include < Ethernet.h >
#include < dht11.h >
#include < Wire.h >
#include < Adafruit_BMP085.h > / / det här är version 1 biblioteket
#define DHT11PIN 4 / / The temperatur/hygrometergivare
Adafruit_BMP085 bmp;
dht11 DHT11;
Inställningar för lokalt nätverk
byte [mac] = {0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1}; Måste vara unika på lokala nätverket
ThingSpeak inställningar
char thingSpeakAddress [] = "api.thingspeak.com";
String writeAPIKey = "REPLACE_THIS_BY_YOUR_API_BUT_KEEP_THE_QUOTES";
CONST int updateThingSpeakInterval = 16 * 1000; Tidsintervall i millisekunder för att uppdatera ThingSpeak (antal sekunder * 1000 = intervall)
Variabelinställningar
lång lastConnectionTime = 0;
booleska lastConnected = false;
int failedCounter = 0;
Initiera Arduino Ethernet-klient
EthernetClient klient;
void setup()
{
Start följetong för felsökning på Serial Monitor
Serial.BEGIN(9600);
Starta Ethernet på Arduino
startEthernet();
}
void loop()
{
Läsa värdet från Analog Input stift 0
String analogPin0 = String(analogRead(A0), DEC);
Skriva ut uppdateringen svar på Serial Monitor
om (client.available())
{
char c = client.read();
Serial.Print(c);
}
---DHT11---
int chk = DHT11.read(DHT11PIN);
char t_buffer [10].
char h_buffer [10].
float t=(DHT11.temperature);
Sträng temp=dtostrf(t,0,5,t_buffer);
Serial.Print(temp);
Serial.Print("");
float h=(DHT11.humidity);
Sträng humid=dtostrf(h,0,5,h_buffer);
Serial.println(humid);
---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());
char p_buffer [15].
char t2_buffer [10];
Sträng pres=dtostrf(p,0,5,p_buffer);
Sträng temp2=dtostrf(t2,0,5,t2_buffer);
Serial.println(pres);
// }
//----------------
Koppla från ThingSpeak
om (! client.connected() & & lastConnected)
{
Serial.println("...Disconnected");
Serial.println();
client.stop();
}
Uppdatera ThingSpeak
IF(!client.Connected() & & (millis() - lastConnectionTime > updateThingSpeakInterval))
{
updateThingSpeak ("Fält1 ="+ temp +"& Fält2 ="+ fuktigt +"& field3 ="+ pres +"& field4 =" + temp2);
}
Kontrollera om Arduino Ethernet måste startas
om (failedCounter > 3) {startEthernet();}
lastConnected = client.connected();
}
void updateThingSpeak(String tsData)
{
om (client.connect (thingSpeakAddress, 80))
{
client.Print ("POST /update HTTP/1.1\n");
client.Print ("Host: api.thingspeak.com\n");
client.Print ("anslutning: close\n");
client.Print ("X-THINGSPEAKAPIKEY:" + writeAPIKey + "\n");
client.Print ("Content-Type: application/x-www-formuläret-urlencoded \n");
client.Print ("Content-Length:");
client.Print(tsData.length());
client.Print("\n\n");
client.Print(tsData);
lastConnectionTime = millis();
om (client.connected())
{
Serial.println ("ansluter till ThingSpeak...");
Serial.println();
failedCounter = 0;
}
annat
{
failedCounter ++;
Serial.println ("anslutning till ThingSpeak misslyckades ("+ String(failedCounter, DEC) +")");
Serial.println();
}
}
annat
{
failedCounter ++;
Serial.println ("anslutning till ThingSpeak misslyckades ("+ String(failedCounter, DEC) +")");
Serial.println();
lastConnectionTime = millis();
}
}
void startEthernet()
{
client.stop();
Serial.println ("ansluta Arduino att nätet...");
Serial.println();
Delay(1000);
Ansluta till nätverk amd en IP-adress med DHCP
om (Ethernet.begin(mac) == 0)
{
Serial.println ("DHCP misslyckades, Nollställ Arduino att försöka igen");
Serial.println();
}
annat
{
Serial.println ("Arduino ansluten till nätverket via DHCP");
Serial.println();
}
Delay(1000);
}