The project uses ultrasonic sensor and ESP8266 to monitor tank water level at any point of time.
The monitoring aspect has 2 objectives:
To check water level at any given point (achieved with the help of cloud connectivity through Thingspeak)
To send an alert message when tank is filled or empty (achieved with the help of Notify My Android app)
2. Summary
• The project uses ultrasonic sensor and ESP8266 to monitor tank water
level at any point of time.
• The monitoring aspect has 2 objectives:
• To check water level at any given point (achieved with the help of cloud connectivity through Thingspeak)
• To send an alert message when tank is filled or empty (achieved with the help of Notify My Android app)
3. Things needed
6Pin USB 2.0 to TTL
UART Module Serial
Converter
HARDWARE
ESP8266 – 01
Microcontroller with
WiFi capability
HCSR-04
Ultrasonic Sensor
Multi Power Supply
(5V and 3.3V)
Jumper wires Male to
Male
Jumper wires Female
to Female
Jumper wires Male to
Female
12V adaptor (1Amp)
Bread Board
Laptop
Breadboard Adapters
(optional)
WiFi connection
Any android mobile
4. Things needed
SOFTWARE
NodeMCU firmware (free)
Scripting language (free)
Account on Thingspeak (free)
Account on NMA (free)
Premium one at $5
Windows (any other
also would do)
5. Costing
• ESP8266 Rs300
• UART Rs180
• HCSR 04 Rs180
• Multipower supply Rs90
• 12V adapter Rs100
• Jumper wires(12) Rs30
• Bread board Rs70
• Premium NMA membership Rs350
TOTAL COST ~Rs 1400
Note: The price quoted is as per what I got on SP road in Bangalore,India. It may be cheaper online/offline at other places so cost can come down further.
Assumptions:
1. WiFi connection already exists
2. Laptop with windows is available
3. Android Mobile phone available
7. 1.ESP8266
microcontroller from Chinese manufacturer Espressif that includes Wi-Fi capability
Cadence Tensilica LX106 microcontroller
• Operates at 3.3V
• Firmware upgrade is needed as first step after purchase
• GPIO 0 should be grounded for firmware upgrade mode
• RST and GPIO2 to be left open
• Connect RX of ESP8266 to TX of FT232RL
• Connect TX of ESP8266 to RX of FT232RL
• Supply external voltage of 3.3V to VCC and CH_PD
• GND to be connected to ground (FT232RL and ESP8266 ground should be
common)
Once the connections are done. RED LED on ESP8266 should be on. BLUE LED
will flash momentarily.
PIN PIN Description
VCC 3.3V
RST Reset (low active)
CH_PD Chip Power down (low active)
TXD Transmit data (3.3V level)
RXD Receive data (3.3V level)
GPIO 0 General Purpose Input / Output
GPIO 2 General Purpose Input / Output
GND Ground
Steps for firmware upgrade: http://www.whatimade.today/loading-the-nodemcu-firmware-on-the-esp8266-windows-guide/
8. 2. Lua
powerful, fast, lightweight, embeddable scripting language
What is Lua?
Lua is a powerful, fast, lightweight, embeddable scripting language.
Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and
extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has
automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid
prototyping.
Where does Lua come from?
Lua is designed, implemented, and maintained by a team at PUC-Rio, the Pontifical Catholic University of Rio de Janeiro in
Brazil. Lua was born and raised in Tecgraf, formerly the Computer Graphics Technology Group of PUC-Rio in 1993. Lua is
now housed at LabLua, a laboratory of the Department of Computer Science of PUC-Rio.
What's in a name?
"Lua" (pronounced LOO-ah) means "Moon" in Portuguese. As such, it is neither an acronym nor an abbreviation, but a noun.
More specifically, "Lua" is a name, the name of the Earth's moon and the name of the language. Like most names, it should
be written in lower case with an initial capital, that is, "Lua".
9. 3. NodeMCU firmware upgrade
Lua based firmware for wifi-soc esp8266
• http://benlo.com/esp8266/esp8266QuickStart.html
• Plug the USB to serial adapter into your PC. Most adapters are automatically recognized by
Windows 7 and 8. Users of XP or older versions of Windows may need a driver which should be
supplied by the manufacturer of the USB adapter. The adapter will appear as a new COM port
on your system. Check the Device Manager if necessary.
• Run ESP8266Flasher.exe
• NodeMcuFlasher
• If you only have one COM device, the port will appear automatically. If you have more than one,
select the correct one from the drop down menu.
• The flasher program comes with default NodeMCU firmware in memory. This is unlikely to be
the latest version, but to get started quickly, use the default internal image. Later, you can
download the latest firmware, then select the [Config] tab and choose the new .bin file. Select
the 0x7C000 default and 0x7E000 blank sections. Uncheck the box for the 0x10000 IROM
section.
• Click on Flash(E) to start the programming process.
• https://www.youtube.com/watch?v=Gh_pgqjfeQc
• https://github.com/nodemcu/nodemcu-firmware
• https://bigdanzblog.wordpress.com/2015/04/14/installing-nodemcu-lua-firmware-on-esp8266-wifi-module/
• http://www.roboremo.com/flashing-nodemcu-firmware-to-esp8266.html
Videos:
10. Sketch for ESP8266 firmware upgrade
ESP 8266-01FT232RL
TXD
TXD
RXD
RXD
GND GND
GPIO 0
GPIO 2
+3.3V
Multi-Power
Supply
VCC CH_PD
GND
USBconnectiontoLaptop
3 pins used 7 pins used
Note: use a bread board to get connections in place.
A
11. 4.HC SR04 Ultrasonic Sensor
0 of ESP8266
2 of ESP8266
along with ESP8266 and FT232 ground pins
External power supply
• The sensor emits a short ultrasonic burst and then
"listens" for the echo.
• Under control of a host microcontroller (trigger pulse), the
sensor emits a short 40 kHz (ultrasonic) burst.
• This burst travels through the air at about 1130 feet per
second, hits an object and then bounces back to the
sensor.
• The sensor provides an output pulse to the host that will
terminate when the echo is detected, hence the width of
this pulse corresponds to the distance to the target.
Basic working principle:
12. 5. ThingSpeak
The open data cloud platform for the Internet of Things
ThingSpeak API Quick Start
1. Sign Up for a ThingSpeak account
2. Go to Channels, and click New Channel
3. Complete the channel settings, and click Save Channel.
4. Update your Channel via URL:
5. https://api.thingspeak.com/update?api_key=YOUR_CHANN
EL_API_KEY&field1=7
6. View your Channel feed:
7. https://api.thingspeak.com/channels/YOUR_CHANNEL_ID/f
eeds.json
Video Link: https://www.youtube.com/watch?v=I_Jm6Q4z7ig
13. 6. Notify My Android(NMA)
platform that allows you to deliver push notifications from virtually any application to your Android device
NMA API Quick guide
1. Sign Up for a NMA account
2. Go to Manage API Keys and Generate New Key
3. Key details will appear in Key Description field.
4. Update NMA alerts via URL:
conn:send("GET /publicapi/notify?apikey=YOUR API KEY
&application=ESP8266&event=TANK_EMPTY&description=text
1%20text2%20text3&priority=2rn HTTP/1.1rn")
14. 7. ESPlorer
Integrated Development Environment (IDE) for ESP8266 developers
• The essential multi-platforms
tools for any ESP8266 developer
from luatool author’s, including
a LUA for NodeMCU and
MicroPython.
• Download link :
• https://github.com/4refr0nt/ESPlorer
• http://esp8266.ru/esplorer/#download
15. Code (init.lua)
print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings
wifi.sta.config(“SSID",“PASSWORD")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavailable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
dofile("hcsr04.lua")
device = hcsr04.init()
tmr.alarm(0, 30000, 1, function() notify() end)
end
end)
16. Code (hcsr04.lua) function notify()
if device.measure() < 10 then
print("ALERT: TANK IS FULL")
if n == 1 then
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
conn:connect(80,"50.116.34.97")
conn:send("GET
/publicapi/notify?apikey=YOURAPIKEY&application=ESP8266&event=TANK_FULL&description=Tank%20is%20full%20now&priority=2rn
HTTP/1.1rn")
conn:send("Host: notifymyandroid.comrn")
conn:send("Accept: */*rn")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)rn")
conn:send("rn")
n = 0
else n = 1
end
elseif device.measure() > 150 then
print("ALERT: TANK IS EMPTY")
if m == 1 then
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
conn:connect(80,"50.116.34.97")
conn:send("GET
/publicapi/notify?apikey=YOURAPIKEY&application=ESP8266&event=TANK_EMPTY&description=Tank%20is%20empty%20now&priority=2rn
HTTP/1.1rn")
conn:send("Host: notifymyandroid.comrn")
conn:send("Accept: */*rn")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)rn")
conn:send("rn")
m = 0
else m = 1
end
else
print("TANK OK")
print (device.measure())
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
-- api.thingspeak.com 184.106.153.149
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=YOURAPIKEY&field1="..device.measure().."HTTP/1.1rn")
conn:send("Host: api.thingspeak.comrn")
conn:send("Accept: */*rn")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)rn")
end
end
--https://github.com/loiphin/ESP8266/blob/master/hcsr04.lua
n=0
m=0
hcsr04 = {};
function hcsr04.init(pin_trig, pin_echo)
local self = {}
self.time_start = 0
self.time_end = 0
-- Choose the correct GPIO pins for the trigger and echo of the HC-SR04 module
self.trig = pin_trig or 3
self.echo = pin_echo or 4
gpio.mode(self.trig, gpio.OUTPUT)
gpio.mode(self.echo, gpio.INT)
function self.echo_cb(level)
if level == 1 then
self.time_start = tmr.now()
gpio.trig(self.echo, "down")
else
self.time_end = tmr.now()
end
end
function self.measure()
gpio.trig(self.echo, "up", self.echo_cb)
gpio.write(self.trig, gpio.HIGH)
tmr.delay(100)
gpio.write(self.trig, gpio.LOW)
tmr.delay(100000)
if (self.time_end - self.time_start) < 0 then
return -1
end
return (self.time_end - self.time_start) / 58
end
return self
end
17. Sketch for SW update and working model
ESP 8266-01FT232RL
HC-SR04
Ultrasonic Sensor
TXD
TXD
RXD
RXD
GND GND GND
GPIO 0
GPIO 2
TRIG
ECHO
+5V+3.3V
Multi-Power
Supply
VCC CH_PD
VCC
GND
USBconnectiontoLaptop
3 pins used 7 pins used 4 pins used
Note: use a bread board to get connections in place.
B
18. Important for software upload on ESP8266
• FIRST UPLOAD hcsr04.lua on ESP8266
by clicking on Save to ESP in ESplorer.
• NEXT UPLOAD init.lua on ESP8266 by
clicking on Save to ESP in ESplorer.
• Wait for 1-2 min after upload. The setup
should work and updated data points
available on Thingspeak channel and
alerts on Notify My Android as per
distance monitored.
19. Sketch for post software update on ESP8266
ESP 8266-01
HC-SR04
Ultrasonic Sensor
TXD
RXD
GND GND
GPIO 0
GPIO 2
TRIG
ECHO
+5V+3.3V
Multi-Power
Supply
VCC CH_PD
VCC
GND
5 pins used 4 pins used
C
21. In a Nutshell
• Get ESP8266 upgraded with NodeMCU firmware with help of UART (Sketch A)
• Open accounts on Thingspeak and Notify My Android App and get the API keys to be used
in code
• Connect HCSR-04 to ESP8266 and upload the code on ESP8266 using ESPlorer (Sketch B)
• Check the working of init.lua on serial monitor:
• Check Tank Full condition alert on mobile
• Check Tank Empty condition alert on mobile
• Check Tank OK and Charts on Thingspeak scenario
• Remove UART connections and check standalone working of ESP8266 and HCSR-04
(Sketch C)
22. Next Steps
• Get the things working on circuit board with minimal size
• Implement it in real tank environment
• Look for alternate economical battery sources for powering ESP8266
and HCSR04