Hardware components | ||||||
| × | 1 | ||||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
Software apps and online services | ||||||
| ||||||
Here we are using gold-plated pins, 4.75K ohm 2 resistors and Wemos D1 microcontroller.
- 11 digital input/output pins, all pins have interrupt/pwm/I2C/one-wire supported(except for D0)
- 1 analog input(3.2V max input)
- Micro USB connection
- Power jack, 9-24V power input.
- Compatible with Arduino
- Compatible with nodemcu
Microcontroller --> ESP-8266EX
Operating Voltage --> 3.3V
Digital I/O Pins --> 11
Analog Input Pins --> 1(Max input: 3.2V)
Clock Speed --> 80MHz/160MHz
Flash --> 4M bytes
Length --> 68.6mm
Width --> 53.4mm
Weight --> 25g
PinsPin | Function | ESP-8266
TX | TXD | TXD
RX | RXD | RXD
A0 | Analog input, max 3.3V input | A0
D0 | IO | GPIO16
D1 | IO, SCL | GPIO5
D2 | IO, SDA | GPIO4
D3 | IO, 10k Pull-up | GPIO0
D4 | IO, 10k Pull-up, BUILTIN_LED | GPIO2
D5 | IO, SCK | GPIO14
D6 | IO, MISO | GPIO12
D7 | IO, MOSI | GPIO13
D8 | IO, 10k Pull-down, SS | GPIO15
G | Ground | GND
5V | 5V | -
3V3 | 3.3V | 3.3V
RST | Reset | RST
#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include "WiFiManager.h" //https://github.com/tzapu/WiFiManager
#include <WiFiClientSecure.h>
int count=0,i,m,j,k;
#define sensorPin A0
#define port1 D5
#define port2 D6
int sensorValue1,sensorValue2,sensorValue3,sensorValue4;
int delaytime = 1000;
//////////////////////////////////////// ALL DECLARATIONS for CLOUD //////////////////////////////
const char* host = "api.thingsai.io"; // OR host = devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // OR /api/v2/thingscloud2/_table/data_ac
const char* time_server = "baas.thethingscloud.com"; //this is to convert timestamp
const int httpPort = 80;
const int httpsPort = 443;
const char* server = "api.thingsai.io"; // Server URL
char timestamp[10];
WiFiClient client;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void configModeCallback (WiFiManager *myWiFiManager)
{
Serial.println("Entered config mode"); //*-*-*-*-*-*-*-*-*-*-*-*-*-*if control enters this function then net is not connected
Serial.println(WiFi.softAPIP()); // "WiFi.softAPIP() is for AP" , "WiFi.localIP() is for STA",
Serial.println(myWiFiManager->getConfigPortalSSID()); //if you used auto generated SSID, print it
}
/////////////////////////////////////// TIMESTAMP CALCULATION function///////////////////////////////////////
int GiveMeTimestamp()
{
unsigned long timeout = millis();
while (client.available() == 0)
{
if (millis() - timeout > 50000)
{
client.stop();
return 0;
}
}
while (client.available())
{
String line = client.readStringUntil('\r'); //indexOf() is a funtion to search for smthng , it returns -1 if not found
int pos = line.indexOf("\"timestamp\""); //search for "\"timestamp\"" from beginning of response got and copy all data after that , it'll be your timestamp
if (pos >= 0)
{
int j = 0;
for(j=0;j<10;j++)
{
timestamp[j] = line[pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(115200); //(19200,SERIAL_8E1) - data size = 8 bits , parity = Even , stop bit = 1bit
mySerial.begin(115200);
WiFiManager wifiManager;
wifiManager.setAPCallback(configModeCallback);
if(!wifiManager.autoConnect("DDIK Makadia","kidd123456789")) //wifiManager.autoConnect("AP-NAME", "AP-PASSWORD"); (OR) wifiManager.autoConnect("AP-NAME"); only ID no password (OR) wifiManager.autoConnect(); this will generate a ID by itself
{
Serial.println("failed to connect and hit timeout"); //control comes here after long time of creating Access point "NodeMCU" by NodeMCU and still it has not connected
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(1000);
}
//if you come here you have connected to the WiFi
Serial.println("connected...");
pinMode(port1,OUTPUT);
pinMode(port2,OUTPUT);
}
void loop()
{
/////////////////////////////////////// SEND THE QUERY AND RECEIVE THE RESPONSE///////////////////////
// start
digitalWrite(LED_BUILTIN, HIGH);
//port LL
digitalWrite(port1, LOW);
digitalWrite(port2, LOW);
sensorValue1 = analogRead(sensorPin);
delay(delaytime);
//port LH
digitalWrite(port1, LOW);
digitalWrite(port2, HIGH);
sensorValue2 = analogRead(sensorPin);
delay(delaytime);
digitalWrite(LED_BUILTIN, LOW);
//port HH
digitalWrite(port1, HIGH);
digitalWrite(port2, HIGH);
sensorValue3 = analogRead(sensorPin);
delay(delaytime);
//port HL
digitalWrite(port1, HIGH);
digitalWrite(port2, LOW);
sensorValue4 = analogRead(sensorPin);
delay(delaytime);
Serial.print(sensorValue1);
Serial.print(",");
Serial.print(sensorValue2);
Serial.print(",");
Serial.print(sensorValue3);
Serial.print(",");
Serial.print(sensorValue4);
Serial.println();
Serial.print("connecting to ");
Serial.println(host); //defined upside :- host = devapi2.thethingscloud.com or 139.59.26.117
///////////////////////////////////// TIMESTAMP CODE SNIPPET /////////////////////////
Serial.println("inside get timestamp\n");
if (!client.connect(time_server, httpPort))
{
return; //*-*-*-*-*-*-*-*-*-*
}
client.println("GET /api/timestamp HTTP/1.1"); //Whats this part doing, i didnt get
client.println("Host: baas.thethingscloud.com");
client.println("Cache-Control: no-cache");
client.println("Postman-Token: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
client.println();
GiveMeTimestamp(); //it'll call the function which will get the timestamp response from the server
Serial.println("timestamp receieved");
Serial.println(timestamp);
///////////////////////////////////////////////////////////////////////////////
Serial.println("inside ThingsCloudPost");
String PostValue = "{\"device_id\": 61121696034, \"slave_id\": 2";
PostValue = PostValue + ",\"dts\":" +timestamp;
PostValue = PostValue +",\"data\":{\"SensorValue1\":" + sensorValue1 +",\"SensorValue2\":" + sensorValue2 +",\"SensorValue3\":" + sensorValue3 +",\"SensorValue4\":" + sensorValue4 +"}"+"}";
Serial.println(PostValue);
/* create an instance of WiFiClientSecure */
WiFiClientSecure client;
Serial.println("Connect to server via port 443");
if (!client.connect(server, 443)){
Serial.println("Connection failed!");
} else {
Serial.println("Connected to server!");
/* create HTTP request */
client.println("POST /devices/deviceData HTTP/1.1");
client.println("Host: api.thingsai.io");
//client.println("Connection: close");
client.println("Content-Type: application/json");
client.println("cache-control: no-cache");
client.println("Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2PNTkXs9PKy6_m9tdW5AG7ajfVlY");
client.print("Content-Length: ");
client.println(PostValue.length());
client.println();
client.println(PostValue);
//////////////////////////////////POSTING the data on to the cloud is done and now get the response form cloud server//////////////////
Serial.print("Waiting for response ");
while (!client.available()){
delay(50); //
Serial.print(".");
}
/* if data is available then receive and print to Terminal */
while (client.available()) {
char c = client.read();
Serial.write(c);
}
/* if the server disconnected, stop the client */
if (!client.connected()) {
Serial.println();
Serial.println("Server disconnected");
client.stop();
}
}
Serial.println("////////////////////// THE END /////////////////////");
delay(3000);
}










Comments