Bygga en väderstation av MediaTek Linkit en (7 / 10 steg)
Steg 7: Min väderstation kod
#include < LTask.h >
#include < LWifi.h >
#include < LWiFiClient.h >
#include < HttpClient.h >
#include < LDateTime.h >
#define WIFI_AP "12345" //my wifi ap
#define WIFI_PASSWORD "2222222222" //my wifi ap lösenord
#define WIFI_AUTH LWIFI_WPA //the typ av myndigheten i min wifi som är WPA2
#define per 50
#define per1 3
#define DEVICEID "DVViF3eK" //the enhets-id från molnet sandlåda
#define DEVICEKEY "yWHbtj3nxy0T4OFQ" //the enhet nyckel givit vid moln sandlåda
#define SITE_URL "api.mediatek.com" //the webbplats av API
LWiFiClient c; WiFi-klient
LWiFiClient c2;
HttpClient http(c2); http-klient
unsigned int rtc; realtidsklocka
unsigned int lrtc;
unsigned int rtc1;
unsigned int lrtc1;
char port [4] = "";
char connection_info [21] = "";
char ip [21] = "";
int portnum;
int val = 0;
String tcpdata = String(DEVICEID) + "," + String(DEVICEKEY) + ", 0";
String TCPCMD_LED_ON = "LED_controller, 1"; TCP befalla till controll LED på/av
String TCPCMD_LED_OFF = "LED_controller, 0";
#include < dht11.h > //include bibliotek med DHT11 sensor
dht11 DHT11;
#define DHT11PIN 2
#include < Wire.h > //include tråd bibliotek att aktivera Grove
#include < Barometer.h > //include bibliotek med Barometer sensor
Barometer myBarometer;
float luftfuktighet;
float temperatur;
float tryck;
float atm;
float höjd;
void setup() {
initiera
Serial.BEGIN(9600);
LTask.begin();
LWiFi.begin();
myBarometer.init();
pinMode (13, OUTPUT);
tag (!. Seriell);
Serial.println ("ansluter till AP");
medan (0 == LWiFi.connect (WIFI_AP, LWiFiLoginInfo (WIFI_AUTH, WIFI_PASSWORD)))
Delay(1000);
Serial.println ("WiFi lyckas");
Serial.println ("calling anslutning");
medan (! c2.connect (SITE_URL, 80))
Delay(1000);
Serial.println ("anslutning till plats lyckas");
getconnectInfo();
Serial.println ("getConnectionInfo lyckas");
connectTCP();
Serial.println("connectTCP() lyckas");
}
void loop() {
int chk = DHT11.read(DHT11PIN); Kolla DHT11 och läsa värden
fukt = DHT11.humidity;
temperatur = myBarometer.bmp085GetTemperature(myBarometer.bmp085ReadUT()); Läs värden från Barometer sensor
Tryck = myBarometer.bmp085GetPressure(myBarometer.bmp085ReadUP());
höjd = myBarometer.calcAltitude(pressure); beräkna den idealiska höjden
ATM = tryck / 101325;
Serial.Print ("Läs sensor:");
Switch(CHK)
// {
fall 0: Serial.println("OK"); bryta;
i mål -1: Serial.println ("Checksum error"); bryta;
i mål -2: Serial.println ("Time out fel"); bryta;
standard: Serial.println ("okänt fel"); bryta, en
// }
Skriv ut några information om seriell monitor
Serial.println("===");
Serial.Print ("luftfuktighet:");
Serial.println(humidity);
Serial.Print ("temperatur:");
Serial.println(temperature);
Serial.Print ("höjd:");
Serial.println(Altitude);
Serial.Print ("tryck:");
Serial.println(Pressure);
Serial.println("===");
Delay(3000);
String tcpcmd = "";
Läs tcp kommando från molnet att avgöra om LED är ON eller OFF
While(c.available())
{
int v = c.read();
om (v! = -1);
{
Serial.Print((Char)v);
tcpcmd += (char) v.
IF(tcpcmd.substring(40).equals(TCPCMD_LED_ON))
{
digitalWrite 13, hög.
tcpcmd = "";
}
annat if(tcpcmd.substring(40).equals(TCPCMD_LED_OFF))
{
digitalWrite 13, låg.
tcpcmd = "";
}
}
}
LDateTime.getRtc(&rtc);
om ((rtc-lrtc) > = per) {
heartBeat();
lrtc = rtc;
}
Kontrollera om rapporten datapoint status intervall
LDateTime.getRtc(&rtc1);
om ((rtc1-lrtc1) > = per1) {
uploadstatus();
lrtc1 = rtc1;
}
}
void getconnectInfo() {
anropar RESTful API att få TCP socketanslutning
C2.Print ("GET /mcs/v2/devices /");
C2.Print(DEVICEID);
C2.println ("/connections.csv HTTP/1.1");
C2.Print ("Host:");
C2.println(SITE_URL);
C2.Print ("deviceKey:");
C2.println(DEVICEKEY);
C2.println ("anslutning: Stäng");
C2.println();
Delay(500);
int errorcount = 0;
medan (! c2.available())
{
Serial.println ("väntar på HTTP-svar:");
Serial.println(errorcount);
errorcount + = 1;
om (errorcount > 10) {
C2.stop();
hemkomst.
}
Delay(100);
}
int err = http.skipResponseHeaders();
int bodyLen = http.contentLength();
Serial.Print ("innehåll längd är:");
Serial.println(bodyLen);
Serial.println();
char c;
int ipcount = 0;
int count = 0;
int separater = 0;
medan (c2)
{
int v = c2.read();
om (v! = -1)
{
c = v;
Serial.Print(c);
connection_info [ipcount] = c;
IF(c==',')
separater = ipcount;
ipcount ++;
}
annat
{
Serial.println (inte mer innehåll, koppla bort");
C2.stop();
}
}
Serial.Print ("Anslutningsinfo:");
Serial.println(connection_info);
int i;
för (jag = 0; jag < separater; i ++)
{ip [i] = connection_info [i];
}
int j = 0;
separater ++;
för (jag = separater; i < 21 & & j < 5; i ++)
{port [j] = connection_info [i];
j ++;
}
Serial.println ("The TCP-Socket anslutning instruktioner:");
Serial.Print ("IP:");
Serial.println(IP);
Serial.Print ("Port:");
Serial.println(port);
portnum = atoi (hamn).
Serial.println(portnum);
} //getconnectInfo
void connectTCP() {
fastställa TCP-anslutning med TCP Server med utnämnt IP och Port
c.stop();
Serial.println ("ansluta till TCP");
Serial.println(IP);
Serial.println(portnum);
medan (0 == c.connect (ip, portnum))
{
Serial.println ("åter ansluta till TCP");
Delay(1000);
}
Serial.println ("Skicka TCP förbinda");
c.println(tcpdata);
c.println();
Serial.println ("väntar på TCP-svar:");
} //connectTCP
void heartBeat() {
Serial.println ("Skicka TCP heartBeat");
c.println(tcpdata);
c.println();
} //heartBeat
void uploadstatus() {
anropar RESTful API att ladda upp datapoint till MCS (Meditek Cloud Sandbox)
Serial.println ("calling anslutning");
LWiFiClient c2;
char bufferH [5].
char bufferT [5].
char bufferA [7].
char bufferP [7].
sprintf (bufferH, "%.2f", fuktighet);
sprintf (bufferT, "%.2f", temperatur);
sprintf (bufferA, "%.2f", höjd);
sprintf (bufferP, "%.0f", tryck);
Sträng uploadLED;
String uploadHumidity = "humidity_display",, + String(bufferH);
String uploadTemperature = "temperature_display",, + String(bufferT);
String uploadAltitude = "altitude_display",, + String(bufferA);
String uploadPressure = "pressure_display",, + String(bufferP);
medan (! c2.connect (SITE_URL, 80))
{
Serial.println ("åter ansluter till webbplatsen");
Delay(1000);
}
Delay(100);
IF(digitalRead(13)==1)
uploadLED = "LED_display,, 1";
annat
uploadLED = "LED_display,, 0";
String uploadData = uploadLED + "\n" +
uploadHumidity + "\n" +
uploadTemperature + "\n" +
uploadAltitude + "\n" +
uploadPressure;
HttpClient http(c2);
C2.Print ("POST /mcs/v2/devices /");
C2.Print(DEVICEID);
C2.println ("/datapoints.csv HTTP/1.1");
C2.Print ("Host:");
C2.println(SITE_URL);
C2.Print ("deviceKey:");
C2.println(DEVICEKEY);
C2.Print ("Content-Length:");
C2.println(uploadData.length());
C2.println ("Content-Type: text/csv");
C2.println ("anslutning: Stäng");
C2.println();
C2.println(uploadData);
Ladda upp data
Delay(500);
int errorcount = 0;
medan (! c2.available())
{
Serial.Print ("väntar på HTTP-svar:");
Serial.println(errorcount);
errorcount + = 1;
om (errorcount > 10) {
C2.stop();
Serial.println ("uploadStatus misslyckades");
hemkomst.
}
Delay(100);
}
int err = http.skipResponseHeaders();
int bodyLen = http.contentLength();
Serial.Print ("innehåll längd är:");
Serial.println(bodyLen);
Serial.println();
medan (c2)
{
int v = c2.read();
om (v! = -1)
Serial.Print(Char(v));
annat
{
Serial.println (inte mer innehåll, koppla bort");
C2.stop();
}
}
}