Monday, August 17, 2020

NTP server

first, get NTP client library for ESP32, and save in Arduino library folder 

https://randomnerdtutorials.com/esp32-ntp-client-date-time-arduino-ide/

Then set time, GMT +5.5 to view Sri Lanka time 

Then upload the code and view serial monitor using Arduino IDE, that should indicate as follows 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <WiFi.h>

#include <NTPClient.h>

#include <WiFiUdp.h>


// Replace with your network credentials

const char* ssid     = "Your SSD"; // 

const char* password = "Your Password";


// Define NTP Client to get time

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP);


// Variables to save date and time

String formattedDate;

String dayStamp;

String timeStamp;


void setup() {

  // Initialize Serial Monitor

  Serial.begin(115200);

  Serial.print("Connecting to ");

  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  // Print local IP address and start web server

  Serial.println("");

  Serial.println("WiFi connected.");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());


// Initialize a NTPClient to get time

  timeClient.begin();

  // Set offset time in seconds to adjust for your timezone, for example:

  // GMT +1 = 3600

  // GMT +8 = 28800

  // GMT -1 = -3600

  // GMT 0 = 0

  timeClient.setTimeOffset(19800);

}

void loop() {

  while(!timeClient.update()) {

    timeClient.forceUpdate();

  }

  // The formattedDate comes with the following format:

  // 2018-05-28T16:00:13Z

  // We need to extract date and time

  formattedDate = timeClient.getFormattedDate();

  Serial.println(formattedDate);


  // Extract date

  int splitT = formattedDate.indexOf("T");

  dayStamp = formattedDate.substring(0, splitT);

  Serial.print("DATE: ");

  Serial.println(dayStamp);

  // Extract time

  timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);

  Serial.print("HOUR: ");

  Serial.println(timeStamp);

  delay(1000);

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Unix Time 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <TimeLib.h>

unsigned long offset_days = 3;    // 3 days
unsigned long t_unix_date1, t_unix_date2;

void setup() {
  Serial.begin(115200);
  t_unix_date1 = 1564398600;
  Serial.print("t_unix_date1: ");
  Serial.println(t_unix_date1);
  offset_days = offset_days * 86400;    // convert number of days to seconds
  t_unix_date2 = 1564398600 + offset_days;
  Serial.print("t_unix_date2: ");
  Serial.println(t_unix_date2);
  printf("Date1: %4d-%02d-%02d %02d:%02d:%02d\n", year(t_unix_date1), month(t_unix_date1), day(t_unix_date1), hour(t_unix_date1), minute(t_unix_date1), second(t_unix_date1));
  printf("Date2: %4d-%02d-%02d %02d:%02d:%02d\n", year(t_unix_date2), month(t_unix_date2), day(t_unix_date2), hour(t_unix_date2), minute(t_unix_date2), second(t_unix_date2));
}

void loop() {



}

Sunday, August 16, 2020

OLED interface with ESP8266

This code used to interface with OLED, 

1.54 inch White OLED Display Module 128x64 SPI Interface OLED ...

bit map code was generated using http://javl.github.io/image2cpp/ 


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 #include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels


// Declaration for SSD1306 display connected using software SPI (default case):

#define     OLED_MOSI        D7

#define     OLED_CLK          D5

#define     OLED_DC             D2

#define     OLED_CS             D8

#define     OLED_RESET      D3

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,

  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);




const unsigned char myBitmap [] PROGMEM = {

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0x80, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x03, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x03, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x01, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x80, 0xc0, 0x0e, 0x00, 0x0e, 0x00, 0x61, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0x87, 0xf8, 0x7f, 0xc0, 0xff, 0xf8, 0x71, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0x9f, 0xfc, 0xff, 0xe3, 0xf0, 0xf8, 0x31, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0x90, 0xff, 0x07, 0xf3, 0xe0, 0x70, 0x19, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf3, 0xf0, 0x20, 0x19, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf3, 0xf8, 0x00, 0x1d, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf1, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf0, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0x80, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf0, 0x1f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xc0, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf0, 0x03, 0xf8, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf0, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0x80, 0x7e, 0x03, 0xf0, 0x00, 0xf8, 0x3f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xc0, 0xff, 0x03, 0xf8, 0x01, 0xf8, 0x7f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf1, 0xff, 0x8f, 0xfe, 0x03, 0xe0, 0xef, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0e, 0x03, 0x9f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0f, 0x1f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x0f, 0x00, 0x7f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x7c, 0x00, 0x7f, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1c, 0x0f, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xc1, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x7e, 0x7f, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff

};


void setup() {

  Serial.begin(9600);


  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally

  if(!display.begin(SSD1306_SWITCHCAPVCC)) {

    Serial.println(F("SSD1306 allocation failed"));

    for(;;); // Don't proceed, loop forever

  }


  // Show initial display buffer contents on the screen --

  // the library initializes this with an Adafruit splash screen.

  //display.display();

  //delay(2000); // Pause for 2 seconds


  // Clear the buffer

  display.clearDisplay();

  testscrolltext();


  // Clear the buffer.

  display.clearDisplay();


  // Display bitmap

  display.drawBitmap(0, 0,  myBitmap, 128, 64, BLACK, WHITE);

  display.display();


}


void loop() {

}


void testscrolltext(void) {

  display.clearDisplay();


  display.setTextSize(2); // Draw 2X-scale text

  display.setTextColor(WHITE);

  display.setCursor(0, 0);

  display.println(F("Asanka"));

  display.println(F("Lakmal"));

  display.println(F("Morawaka"));

  display.display();      // Show initial text

  delay(100);


  // Scroll in various directions, pausing in-between:

  display.startscrollright(0x00, 0x0F);

  delay(2000);

  display.stopscroll();

  delay(1000);

  display.startscrollleft(0x00, 0x0F);

  delay(2000);

  display.stopscroll();

  delay(1000);

  display.startscrolldiagright(0x00, 0x07);

  delay(2000);

  display.startscrolldiagleft(0x00, 0x07);

  delay(2000);

  display.stopscroll();

  delay(1000);

}

Monday, August 3, 2020

IOT project ( ESP8266 / MQTT- Rpi / Node-red- dashboard )

1. install putty to communicate with pi using SSH, put Host Name IP which is IP obtain by the PI when it connected 
 


pi@raspberry:~ $ bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

pi@raspberry:~ $ sudo systemctl enable nodered.service

pi@raspberry:~ $ sudo reboot

test your installation http://YOUR_RPi_IP_ADDRESS:1880





pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients

pi@raspberry:~ $ sudo systemctl enable mosquitto.service

test your installation > pi@raspberry:~ $ mosquitto -v


6. prepare Arduino IDE for ESP8266
File>preperences>Additional Board Manager URLs,

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

Tools>MAnage Libries> 

add ESP8266, Then install following libraries 

7. Install PubSubClient library 

8. Install DHT library 

9. Install Adafruit_sensor library 

Then use the following code. 

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"

// Uncomment one of the lines bellow for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Change the credentials below, so your ESP8266 connects to your router
const char* ssid = "Dialog 4G";
const char* password = "YJNHQ102RD8";

// Change the variable to your Raspberry Pi IP address, so it connects to your MQTT broker
const char* mqtt_server = "192.168.0.100";

// Initializes the espClient. You should change the espClient name if you have multiple ESPs running in your home automation system
WiFiClient espClient;
PubSubClient client(espClient);

// DHT Sensor - GPIO 5 = D1 on ESP-12E NodeMCU board
const int DHTPin = 5;

// Lamp - LED - GPIO 4 = D2 on ESP-12E NodeMCU board
const int lamp = 4;

// Lamp - LED - GPIO 12 = D6 on ESP-12E NodeMCU board
const int lamp1 = 12 ;

// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Timers auxiliar variables
long now = millis();
long lastMeasure = 0;

// Don't change the function below. This functions connects your ESP8266 to your router
void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("WiFi connected - ESP IP address: ");
  Serial.println(WiFi.localIP());
}

// This functions is executed when some device publishes a message to a topic that your ESP8266 is subscribed to
// Change the function below to add logic to your program, so when a device publishes a message to a topic that 
// your ESP8266 is subscribed you can actually do something
void callback(String topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;
  
  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  // Feel free to add more if statements to control more GPIOs with MQTT
  if(topic=="room/lamp1"){
      Serial.print("Changing Room lamp1 to ");
      if(messageTemp == "on"){
        digitalWrite(lamp1, HIGH);
        Serial.print("On");
      }
      else if(messageTemp == "off"){
        digitalWrite(lamp1, LOW);
        Serial.print("Off");
      }
  }
  Serial.println();
  // If a message is received on the topic room/lamp, you check if the message is either on or off. Turns the lamp GPIO according to the message
  if(topic=="room/lamp"){
      Serial.print("Changing Room lamp to ");
      if(messageTemp == "on"){
        digitalWrite(lamp, HIGH);
        Serial.print("On");
      }
      else if(messageTemp == "off"){
        digitalWrite(lamp, LOW);
        Serial.print("Off");
      }
  }
  Serial.println();
}

// This functions reconnects your ESP8266 to your MQTT broker
// Change the function below if you want to subscribe to more topics with your ESP8266 
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    /*
     YOU MIGHT NEED TO CHANGE THIS LINE, IF YOU'RE HAVING PROBLEMS WITH MQTT MULTIPLE CONNECTIONS
     To change the ESP device ID, you will have to give a new name to the ESP8266.
     Here's how it looks:
       if (client.connect("ESP8266Client")) {
     You can do it like this:
       if (client.connect("ESP1_Office")) {
     Then, for the other ESP:
       if (client.connect("ESP2_Garage")) {
      That should solve your MQTT multiple connections problem
    */
    if (client.connect("ESP8266Client")) {
      Serial.println("connected");  
      // Subscribe or resubscribe to a topic
      // You can subscribe to more topics (to control more LEDs in this example)
      client.subscribe("room/lamp");
      client.subscribe("room/lamp1");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

// The setup function sets your ESP GPIOs to Outputs, starts the serial communication at a baud rate of 115200
// Sets your mqtt broker and sets the callback function
// The callback function is what receives messages and actually controls the LEDs
void setup() {
  pinMode(lamp, OUTPUT);
   pinMode(lamp1, OUTPUT);
  
  dht.begin();
  
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

}

// For this project, you don't need to change anything in the loop function. Basically it ensures that you ESP is connected to your broker
void loop() {

  if (!client.connected()) {
    reconnect();
  }
  if(!client.loop())
    client.connect("ESP8266Client");

  now = millis();
  // Publishes new temperature and humidity every 30 seconds
  if (now - lastMeasure > 30000) {
    lastMeasure = now;
    // 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!");
      return;
    }

    // Computes temperature values in Celsius
    float hic = dht.computeHeatIndex(t, h, false);
    static char temperatureTemp[7];
    dtostrf(hic, 6, 2, temperatureTemp);
    
    // Uncomment to compute temperature values in Fahrenheit 
    // float hif = dht.computeHeatIndex(f, h);
    // static char temperatureTemp[7];
    // dtostrf(hic, 6, 2, temperatureTemp);
    
    static char humidityTemp[7];
    dtostrf(h, 6, 2, humidityTemp);

    // Publishes Temperature and Humidity values
    client.publish("room/temperature", temperatureTemp);
    client.publish("room/humidity", humidityTemp);
    
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t Temperature: ");
    Serial.print(t);
    Serial.print(" *C ");
    Serial.print(f);
    Serial.print(" *F\t Heat index: ");
    Serial.print(hic);
    Serial.println(" *C ");
    // Serial.print(hif);
    // Serial.println(" *F");
  }


Search This Blog