I have constant problem with that program im total newbie,
hardware nodeMCU 1.0 firmware v3
password ssid etc changed for safety.
I would be very happy to get any
advice.
Code:
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Losant.h>
#define DHTPIN 6 // 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 = "123";
const char* WIFI_PASS = "123";
// Losant credentials.
const char* LOSANT_DEVICE_ID = "123";
const char* LOSANT_ACCESS_KEY = "123";
const char* LOSANT_ACCESS_SECRET = "123";
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.println(device.mqttClient.state());
Serial.print(".");
}
Serial.println("Connected!");
Serial.println();
Serial.println("This device is now ready for use!");
}
void setup() {
Serial.begin(115200);
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;
delay(1000);
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;
}