Skip to content

Instantly share code, notes, and snippets.

@LosantGists
Last active March 5, 2022 19:35
Show Gist options
  • Save LosantGists/75d23af3e2272997e4876f0edd8e0fa2 to your computer and use it in GitHub Desktop.
Save LosantGists/75d23af3e2272997e4876f0edd8e0fa2 to your computer and use it in GitHub Desktop.
Example for sending temperature and humidity to the cloud using the DHT22 and ESP8266
/**
* 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 = "wifi-ssid";
const char* WIFI_PASS = "wifi-password";
// Losant credentials.
const char* LOSANT_DEVICE_ID = "device-id";
const char* LOSANT_ACCESS_KEY = "access-key";
const char* LOSANT_ACCESS_SECRET = "access-secret";
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) { }
dht.begin();
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;
}
@LuizCAzevedo
Copy link

I need help, connect the wifi correctly, say that the device is authorized, but in the connect part to Losant, gets stuck in "Connecting Losant ..............." does not show any messages of error, it only stays in these points, what will be this, can someone help me?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment