Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Example for sending temperature and humidity
- * to the cloud using the DHT22 and ESP8266
- *
- * Copyright (c) 2016 Losant IoT. All rights reserved.
- * https://www.losant.com
- */
- #include "DHT.h"
- #include <ESP8266WiFi.h>
- #include <ESP8266HTTPClient.h>
- #include <Losant.h>
- #define DHTPIN 4 // what digital pin the DHT22 is conected to
- #define DHTTYPE DHT22 // There are multiple kinds of DHT sensors
- DHT dht(DHTPIN, DHTTYPE);
- // WiFi credentials.
- const char* WIFI_SSID = "Bozboi";
- const char* WIFI_PASS = "fiuieee18";
- // Losant credentials.
- const char* LOSANT_DEVICE_ID = "5e19ec6e299a850006146958";
- const char* LOSANT_ACCESS_KEY = "3a04702d-062a-49e0-b73a-49e3c3fc94d7";
- const char* LOSANT_ACCESS_SECRET = "b97e085146ae33c0706296a533cb63a9c00c36ef2f266f35346e266f2abc7b61";
- WiFiClientSecure wifiClient;
- LosantDevice device(LOSANT_DEVICE_ID);
- void connect() {
- // Connect to Wifi.
- Serial.println();
- Serial.println();
- Serial.print("Connecting to ");
- Serial.println(WIFI_SSID);
- // WiFi fix: https://github.com/esp8266/Arduino/issues/2186
- WiFi.persistent(false);
- WiFi.mode(WIFI_OFF);
- WiFi.mode(WIFI_STA);
- WiFi.begin(WIFI_SSID, WIFI_PASS);
- unsigned long wifiConnectStart = millis();
- while (WiFi.status() != WL_CONNECTED) {
- // Check to see if
- if (WiFi.status() == WL_CONNECT_FAILED) {
- Serial.println("Failed to connect to WIFI. Please verify credentials: ");
- Serial.println();
- Serial.print("SSID: ");
- Serial.println(WIFI_SSID);
- Serial.print("Password: ");
- Serial.println(WIFI_PASS);
- Serial.println();
- }
- delay(500);
- Serial.println("...");
- // Only try for 5 seconds.
- if(millis() - wifiConnectStart > 5000) {
- Serial.println("Failed to connect to WiFi");
- Serial.println("Please attempt to send updated configuration parameters.");
- return;
- }
- }
- Serial.println();
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- Serial.println();
- Serial.print("Authenticating Device...");
- HTTPClient http;
- http.begin("http://api.losant.com/auth/device");
- http.addHeader("Content-Type", "application/json");
- http.addHeader("Accept", "application/json");
- /* Create JSON payload to sent to Losant
- *
- * {
- * "deviceId": "575ecf887ae143cd83dc4aa2",
- * "key": "this_would_be_the_key",
- * "secret": "this_would_be_the_secret"
- * }
- *
- */
- StaticJsonBuffer<200> jsonBuffer;
- JsonObject& root = jsonBuffer.createObject();
- root["deviceId"] = LOSANT_DEVICE_ID;
- root["key"] = LOSANT_ACCESS_KEY;
- root["secret"] = LOSANT_ACCESS_SECRET;
- String buffer;
- root.printTo(buffer);
- int httpCode = http.POST(buffer);
- if(httpCode > 0) {
- if(httpCode == HTTP_CODE_OK) {
- Serial.println("This device is authorized!");
- } else {
- Serial.println("Failed to authorize device to Losant.");
- if(httpCode == 400) {
- Serial.println("Validation error: The device ID, access key, or access secret is not in the proper format.");
- } else if(httpCode == 401) {
- Serial.println("Invalid credentials to Losant: Please double-check the device ID, access key, and access secret.");
- } else {
- Serial.println("Unknown response from API");
- }
- }
- } else {
- Serial.println("Failed to connect to Losant API.");
- }
- http.end();
- // Connect to Losant.
- Serial.println();
- Serial.print("Connecting to Losant...");
- device.connectSecure(wifiClient, LOSANT_ACCESS_KEY, LOSANT_ACCESS_SECRET);
- while(!device.connected()) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("Connected!");
- Serial.println();
- Serial.println("This device is now ready for use!");
- }
- void setup() {
- Serial.begin(9600);
- Serial.setTimeout(2000);
- // Wait for serial to initialize.
- while(!Serial) { }
- Serial.println("Device Started");
- Serial.println("-------------------------------------");
- Serial.println("Running DHT!");
- Serial.println("-------------------------------------");
- connect();
- }
- void report(double humidity, double tempC, double tempF, double heatIndexC, double heatIndexF) {
- StaticJsonBuffer<500> jsonBuffer;
- JsonObject& root = jsonBuffer.createObject();
- root["humidity"] = humidity;
- root["tempC"] = tempC;
- root["tempF"] = tempF;
- root["heatIndexC"] = heatIndexC;
- root["heatIndexF"] = heatIndexF;
- device.sendState(root);
- Serial.println("Reported!");
- }
- int timeSinceLastRead = 0;
- void loop() {
- bool toReconnect = false;
- if (WiFi.status() != WL_CONNECTED) {
- Serial.println("Disconnected from WiFi");
- toReconnect = true;
- }
- if (!device.connected()) {
- Serial.println("Disconnected from MQTT");
- Serial.println(device.mqttClient.state());
- toReconnect = true;
- }
- if (toReconnect) {
- connect();
- }
- device.loop();
- // Report every 2 seconds.
- if(timeSinceLastRead > 2000) {
- // Reading temperature or humidity takes about 250 milliseconds!
- // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
- float h = dht.readHumidity();
- // Read temperature as Celsius (the default)
- float t = dht.readTemperature();
- // Read temperature as Fahrenheit (isFahrenheit = true)
- float f = dht.readTemperature(true);
- // Check if any reads failed and exit early (to try again).
- if (isnan(h) || isnan(t) || isnan(f)) {
- Serial.println("Failed to read from DHT sensor!");
- timeSinceLastRead = 0;
- return;
- }
- // Compute heat index in Fahrenheit (the default)
- float hif = dht.computeHeatIndex(f, h);
- // Compute heat index in Celsius (isFahreheit = false)
- float hic = dht.computeHeatIndex(t, h, false);
- Serial.print("Humidity: ");
- Serial.print(h);
- Serial.print(" %\t");
- Serial.print("Temperature: ");
- Serial.print(t);
- Serial.print(" *C ");
- Serial.print(f);
- Serial.print(" *F\t");
- Serial.print("Heat index: ");
- Serial.print(hic);
- Serial.print(" *C ");
- Serial.print(hif);
- Serial.println(" *F");
- report(h, t, f, hic, hif);
- timeSinceLastRead = 0;
- }
- delay(100);
- timeSinceLastRead += 100;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement