IoT_NodeMCU_ESP8266
This repository contains source code necessary to launch an Node.js server and NodeMCU with ESP8266 and DHT22.
http://szustakowses.nazwa.pl/
Our server domain:http://szustakowses.nazwa.pl/saveData?temp=[some_value]&humidity=[some_value]
Our server address to save data:Simple diagram of our system:
Nginx
HTTP proxy server that redirects all requests from the address "szustakowses.nazwa.pl" on port 80 to the address of the Node.js server implemented on port 3400.
Node.js
This is a design environment based on Google's V8 JavaScript engine. In this environment, we create a web server, server scripts and any auxiliary functions of web applications.
Express
This module acts as a web server and extends the Node.js environment to provide several key components to handle web requests.
MongoDB
It is an efficient NoSQL database with very efficient scalability. In this database we collect data such as temperature and humidity, which are sent from the NodeMCU module by HTTP request - GET.
ESP8266 NodeMCU
NodeMCU is an open source IoT platform. It includes firmware which runs on the ESP8266 Wi-Fi SoC.
How to program NodeMCU by Arduino IDE
- Firstly download and open the Arduino IDE
- Go to files and click on the preference in the Arduino IDE
- Copy the below code in the Additional boards Manager http://arduino.esp8266.com/stable/package_esp8266com_index.json click OK to close the preference Tab.
- After completing the above steps , go to Tools and board, and then select board Manager
- Navigate to esp8266 by esp8266 community and install the software for Arduino.
- Program NodeMCU_ESP8266 with Arduino IDE using our code in folder NodeMCU.
Module collects data from the DHT22 sensor and sends them with a GET request to the WWW server. The correct data recording is signaled by blinking of the green diode and failure by red. In addition, the current temperature status is signaled by the color of the RGB diode.
GET Request
...
const char* nodejs_ip = "szustakowses.nazwa.pl";
....
res_status = send_get(cl, "saveData?temp=" + temperature + "&humidity=" + humidity);
...
bool send_get(WiFiClient cl, String msq_GET){
HTTPClient http;
http.begin("http://" + (String)nodejs_ip + "/" + (String)msq_GET);
http.addHeader("Content-Type", "text/plain");
int httpCode = http.GET(); //Get the server response (if correct -> httpCode=200)
http.end();
...
Board scheme:
DHT22
Temperature and Humidity Sensor. Here are the pin definitions:
Pin | Symbol | NodeMCU pin | Descriptions |
---|---|---|---|
1 | VCC | 3V3 | Power supply 3.3V from NodeMCU |
2 | DOUT | D1 + 3V3 | D1 - Data output, 3V3 - 4,7kΩ Resistor to Power |
3 | NC | - | Not use |
4 | GND | G | Ground |
Led RGB
RGB diode with common anode is activated by pwm signal on particular pins corresponding to the color of light.
void setup() {
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
//Only red color is powered
analogWrite(red, 0);
analogWrite(green, 1000);
analogWrite(blue, 1000);
Pin | Symbol | NodeMCU pin | Descriptions |
---|---|---|---|
1 | RED | D3 | Resistor 150Ω |
2 | GND | G | Ground |
3 | BLUE | D5 | Resistor 100Ω |
4 | GREEN | D4 | Resistor 100Ω |
Server environment
How to install
- Install Nginx on your server and copy our configuration file "Nginx/conf.d/szustakowses.nazwa.pl.conf" to your conf.d folder.
- Install Node JS and ExpressJS via npm
- Install MongoDB
- Install and use FusionChart Library
- Copy our files from Node.js folder to your server
- Run and send some data from NodeMCU