Required Hardware ESP8266 with Programmer (or) NodeMCU Dev Kit
Required Software Tools Arduino IDE with ESP8266 Core
Code
/*
http://www.ArunEworld.com/Embedded/ESPressif/ESP8266/ESP8266_Arduino-core/ESP8266-Arduino-Core-Interface-Button
Tested By : Arun(20170219)
Example Name : AEW_ADC-Interface.ino
*/
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
This example code is in the public domain.
*/
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
Required Hardware ESP8266 with Programmer (or) NodeMCU Dev Kit, LED- 3v3 or 5v,
Required Software Tools ESPlorer IDE Tool
ESP8266 with LED Connection Diagram
Will Add Soon
NodeMCU Lua code
-- http://www.ArunEworld.com/embedded/ESPressif/ESP8266/ESP82266_NodeMCU
--[[ Required NodeMCU Modules
Timer Module
GPIO Module
]]--
LED_Pin = 1 -- GPIO-5
LED_Blink_Time = 1000 -- ms
gpio.mode(LED_Pin, gpio.OUTPUT)
local function Blink()
if ( 0 == gpio.read(LED_Pin)) then
gpio.write(LED_Pin, gpio.HIGH)
elseif( 1 == gpio.read(LED_Pin)) then
gpio.write(LED_Pin, gpio.LOW)
end
end
tmr.alarm(0,LED_Blink_Time,1,function() Blink() end)
Follow steps
Connect the circuit as per the connection diagram
Save the above code as “AEW_LED-Blink.lua”
Open ESPlorer and upload the file “AEW_LED-Blink.lua”
Run the file [ dofile(“AEW_LED-Blink.lua”) ]
Done.!(LED will Blink based on blink time)
LED Blink uisng While loop and Timer delay function
Use
-- http://www.ArunEworld.com/embedded/ESPressif/ESP8266/ESP82266_NodeMCU
--[[ Required NodeMCU Modules Timer Module GPIO Module ]]--
LED_Pin = 1 -- GPIO-5
LED_Blink_Time = 1000 -- ms
gpio.mode(LED_Pin, gpio.OUTPUT)
while true do
tmr.delay(1000000)
if ( 0 == gpio.read(LED_Pin)) then
gpio.write(LED_Pin, gpio.HIGH)
elseif( 1 == gpio.read(LED_Pin)) then
gpio.write(LED_Pin, gpio.LOW)
end
end
LED Fade using PWM
Use this code
pin = 1
------ PWM setup --------------
pwm.setup(pin, 999, 512) -- pwm.setup(pin, clock, duty) | set pin index 1 as pwm output, frequency is 100Hz, duty cycle is half.
pwm.start(pin) -- pwm.start(pin)
duty = 1000
for i=1000,0,-1 do
--print(i)
duty = i
pwm.setduty(pin, duty) -- pwm.setduty(pin, duty)
tmr.delay(1000)
end
Playing the Imperial March ringtone on an ESP8266 NodeMCU involves using the NodeMCU’s capabilities to generate sound or control an external sound module. One common method is using a piezo buzzer to generate tones. Here’s a basic example of “ESP8266 Imperial March Ringtone play” using the NodeMCU and a piezo buzzer to play the Imperial March:
The ESP8266 NodeMCU Tutorial – Web Server provides a comprehensive guide on how to set up a web server using the NodeMCU development board powered by the ESP8266 microcontroller.
Simple web server display heap, ip, mac address some other details ..
First need to connect ESP8266 with WiFi Router. then access the web server using ip address
print("****** Wifi data's Initializing *********")
mode = wifi.STATION
ssid = "ArunEworld"
password = "Arun"
print("****** Setup Wifi Settings *********")
wifi.setmode(mode)
wifi.sta.config(ssid, password)
function Wif_Connect()
WC = wifi.sta.status() --WC Wifi_Connect
print("Wifi Status is : " .. WC)
if WC == 0 then
print("0.Satation is Idle ??")
wifi.sta.autoconnect(auto)
elseif WC == 1 then
print("1.Satation Connecting....Wait a moment")
elseif WC == 2 then
print("2.password is wrong !")
elseif WC == 3 then
print("3.No Access Point Found !")
elseif WC == 4 then
print("4.Station connecting fail !")
elseif WC == 5 then
print("IP :" .. wifi.sta.getip())
tmr.stop(0)
-- dofile("AEW_Webserver.lua")
-- print("IP :"..wifi.sta.getip())
-- dofile("File_name.lua")
-- please write your file name
end
end
print("**** Webserver Running........ ****")
srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
conn:on("receive", function(client, request)
buf = buf .. "<h1>Arun Eworld</h1>"
buf = buf .. "Chip ID :<b>" .. node.chipid() .. "</b><BR>"
--[[
buf = buf.."Heap :<b>".. node.heap() .. "</b><BR>";
buf = buf.."Station Mac Address :<b>".. wifi.sta.getmac() .. "</b><BR>";
buf = buf.."AP Mac Address :<b>".. wifi.ap.getmac() .. "</b><BR>";
buf = buf.."GetMode :<b>".. wifi.getmode() .. "</b><BR>";
buf = buf.."Status :<b>".. wifi.sta.status() .. "</b><BR>";
--buf = buf.."AP IP Address :<b>".. wifi.ap.getip() .. "</b><BR>";
buf = buf.."Station IP Address :<b>".. wifi.sta.getip() .. "</b><BR>";
buf = buf.."TMR.NOW :<b>" .. tmr.now() .. "</b><BR<BR><BR>";
]]--
client:send(buf)
client:close()
collectgarbage()
end)
end)
tmr.alarm(0, 5000, 1, Wif_Connect)
Code Explanation
Sure, here’s an explanation of the provided Lua code:
Wifi Initialization:
The code begins by printing a message indicating the initialization of WiFi data.
It sets the WiFi mode to Station mode.
Defines the SSID and password for the WiFi connection.
WiFi Connection Function (Wif_Connect):
This function is responsible for handling the WiFi connection process.
It retrieves the current WiFi connection status using wifi.sta.status().
Depending on the status, it performs different actions:
If the status is 0, it indicates that the station is idle, and it attempts to autoconnect.
If the status is 1, it indicates that the station is connecting.
If the status is 2, it indicates that the password is incorrect.
If the status is 3, it indicates that no Access Point (AP) is found.
If the status is 4, it indicates that the connection to the AP failed.
If the status is 5, it indicates a successful connection, and it prints the assigned IP address.
It also stops the timer (tmr.stop(0)), which triggers the connection attempt.
Webserver Setup:
The code prints a message indicating that the web server is running.
It creates a TCP server (srv) that listens on port 80.
Upon receiving a connection, it defines a callback function to handle incoming requests.
The callback function constructs an HTML response (buf) containing the header <h1>Arun Eworld</h1> and the chip ID.
The response is sent back to the client, and the connection is closed.
Timer Initialization:
A timer (tmr) is set to call the Wif_Connect function every 5 seconds (tmr.alarm(0, 5000, 1, Wif_Connect)).
This code initializes the WiFi connection, continuously attempts to connect to the configured network, and sets up a basic web server to handle incoming requests. (ESP8266 NodeMCU Tutorial Web Server)
TCP Server Listener
This code given below will configure the ESP to act as an Access Point and it has its own SSID=”ArunEworld” and Password=”Arun” and also act as the server which will continuously listen for a connection.
Code
This code initializes the ESP8266 module as an access point with the SSID “ArunEworld” and password “Arun”. It then creates a TCP server that listens on port 80. When a connection is established, it prints any received data and releases resources after sending a response.
This code initializes the ESP8266 module as an access point with the SSID “ArunEworld” and password “Arun”, creates a TCP server listening on port 80, and defines callback functions to handle received and sent data.
Line
Code
Explanation
1
print("ArunEworld - ESP8266 Server")
Prints a message indicating the initialization of the ESP8266 server.
2
wifi.setmode(wifi.STATIONAP)
Sets the mode of the WiFi module to STATIONAP, enabling it to function as both a station and an access point.
3
wifi.ap.config({ssid="ArunEworld", pwd="Arun"})
Configures the access point with the SSID “ArunEworld” and password “Arun”.
4
print("Server IP Address:", wifi.ap.getip())
Prints the IP address assigned to the ESP8266 access point.
6
sv = net.createServer(net.TCP)
Creates a TCP server object.
7
sv:listen(80, function(conn)
Starts the server and listens for connections on port 80.
8
conn:on("receive", function(conn, receivedData)
Sets up a callback function to handle received data.
Welcome to the ESP8266 NodeMCU WiFi End User Module! The ESP8266 NodeMCU is a versatile and powerful microcontroller board that features built-in WiFi connectivity. This module aims to offer a user-friendly platform for IoT (Internet of Things) projects, facilitating the connection of devices to the Internet and enabling remote interaction with them.
With the ESP8266 NodeMCU, you can quickly prototype and deploy WiFi-enabled projects without the need for extensive hardware or networking expertise. Whether you’re a hobbyist, maker, or professional developer, this module offers a convenient solution for adding wireless connectivity to your applications.
In this module, we’ll explore the capabilities of the ESP8266 NodeMCU, learn how to configure WiFi settings, connect to wireless networks, and develop IoT applications. By the end of this module, you’ll have the knowledge and skills to create your own WiFi-enabled projects using the ESP8266 NodeMCU.
Let’s dive into the world of WiFi and IoT with the ESP8266 NodeMCU End User Module!
This table provides a comprehensive overview of the various functions available for configuring and interacting with WiFi on the ESP8266 module.
Note: ESP8266 does not support numbers as passwords in NodeMCU firmware
General Functions:
Function
Description
wifi.getchannel()
Gets the current WiFi channel.
wifi.getdefaultmode()
Gets default WiFi operation mode.
wifi.getmode()
Gets WiFi operation mode.
wifi.getphymode()
Gets WiFi physical mode.
wifi.nullmodesleep()
Configures whether or not WiFi automatically goes to sleep in NULL_MODE.
wifi.resume()
Wake up WiFi from suspended state or cancel pending wifi suspension.
wifi.setmode()
Configures the WiFi mode to use.
wifi.setphymode()
Sets WiFi physical mode.
wifi.startsmart()
Starts auto configuration, if successful sets up SSID and password automatically.
wifi.stopsmart()
Stops the smart configuring process.
wifi.suspend()
Suspend Wifi to reduce current consumption.
wifi.eventmon.register()
Register/unregister callbacks for WiFi event monitor.
wifi.eventmon.unregister()
Unregister callbacks for WiFi event monitor.
wifi.eventmon.reason
Table containing disconnect reasons.
Station Functions:
Function
Description
wifi.sta.autoconnect()
Auto connects to AP in station mode.
wifi.sta.changeap()
Select Access Point from list returned by wifi.
wifi.sta.clearconfig()
Clears the currently saved WiFi station configuration, erasing it from the flash.
wifi.sta.config()
Sets the WiFi station configuration.
wifi.sta.connect()
Connects to the configured AP in station mode.
wifi.sta.disconnect()
Disconnects from AP in station mode.
wifi.sta.eventMonReg()
Registers callbacks for WiFi station status events.
wifi.sta.eventMonStart()
Starts WiFi station event monitor.
wifi.sta.eventMonStop()
Stops WiFi station event monitor.
wifi.sta.getap()
Scans AP list as a Lua table into callback function.
wifi.sta.getapindex()
Get index of current Access Point stored in AP cache.
wifi.sta.getapinfo()
Get information of APs cached by ESP8266 station.
wifi.sta.getbroadcast()
Gets the broadcast address in station mode.
wifi.sta.getconfig()
Gets the WiFi station configuration.
wifi.sta.getdefaultconfig()
Gets the default WiFi station configuration stored in flash.
wifi.sta.gethostname()
Gets current station hostname.
wifi.sta.getip()
Gets IP address, netmask, and gateway address in station mode.
wifi.sta.getmac()
Gets MAC address in station mode.
wifi.sta.getrssi()
Gets the RSSI (Received Signal Strength Indicator) of the Access Point which ESP8266 station connected to.
wifi.sta.setaplimit()
Set Maximum number of Access Points to store in flash.
wifi.sta.sethostname()
Sets station hostname.
wifi.sta.setip()
Sets IP address, netmask, gateway address in station mode.
wifi.sta.setmac()
Sets MAC address in station mode.
wifi.sta.sleeptype()
Configures the WiFi modem sleep type to be used while station is connected to an Access Point.
wifi.sta.status()
Gets the current status in station mode.
Access Point Functions:
Function
Description
wifi.ap.config()
Sets SSID and password in AP mode.
wifi.ap.deauth()
Deauths (forcibly removes) a client from the ESP access point by sending a corresponding IEEE802.
wifi.ap.getbroadcast()
Gets broadcast address in AP mode.
wifi.ap.getclient()
Gets table of clients connected to device in AP mode.
wifi.ap.getconfig()
Gets the current SoftAP configuration.
wifi.ap.getdefaultconfig()
Gets the default SoftAP configuration stored in flash.
wifi.ap.getip()
Gets IP address, netmask and gateway in AP mode.
wifi.ap.getmac()
Gets MAC address in AP mode.
wifi.ap.setip()
Sets IP address, netmask and gateway address in AP mode.
wifi.ap.setmac()
Sets MAC address in AP mode.
wifi.ap.dhcp.config()
Configure the DHCP service.
wifi.ap.dhcp.start()
Starts the DHCP service.
wifi.ap.dhcp.stop()
Stops the DHCP service.
wifi.eventmon.register()
Register/unregister callbacks for WiFi event monitor.
wifi.eventmon.unregister()
Unregister callbacks for
Examples
Scan for available all station networks
Scans AP list as a Lua table into callback function. wifi.sta.getap()
This Lua code includes various functions related to scanning and retrieving information about available WiFi access points (APs) and their configurations. Each function defines itself separately for different purposes and formats itself for readability.
-- Print AP list in old format (format not defined)
function listap(t)
for k, v in pairs(t) do
print(k .. " : " .. v)
end
end
wifi.sta.getap(listap)
-- Print AP list that is easier to read
function listap(t)
-- (SSID : Authmode, RSSI, BSSID, Channel)
print("\n" .. string.format("%32s", "SSID") .. "\tBSSID\t\t\t\t RSSI\t\tAUTHMODE\tCHANNEL")
for ssid, v in pairs(t) do
local authmode, rssi, bssid, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]+)")
print(string.format("%32s", ssid) .. "\t" .. bssid .. "\t " .. rssi .. "\t\t" .. authmode .. "\t\t\t" .. channel)
end
end
wifi.sta.getap(listap)
-- Print AP list in new format
function listap(t)
for k, v in pairs(t) do
print(k .. " : " .. v)
end
end
wifi.sta.getap(1, listap)
-- Print AP list that is easier to read
function listap(t)
-- (SSID : Authmode, RSSI, BSSID, Channel)
print("\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL")
for bssid, v in pairs(t) do
local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)")
print(string.format("%32s", ssid) .. "\t" .. bssid .. "\t " .. rssi .. "\t\t" .. authmode .. "\t\t\t" .. channel)
end
end
wifi.sta.getap(1, listap)
-- Check for specific AP
function listap(t)
print("\n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL")
for bssid, v in pairs(t) do
local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)")
print(string.format("%32s", ssid) .. "\t" .. bssid .. "\t " .. rssi .. "\t\t" .. authmode .. "\t\t\t" .. channel)
end
end
scan_cfg = {}
scan_cfg.ssid = "myssid"
scan_cfg.bssid = "AA:AA:AA:AA:AA:AA"
scan_cfg.channel = 0
scan_cfg.show_hidden = 1
wifi.sta.getap(scan_cfg, 1, listap)
-- Get RSSI for currently configured AP
function listap(t)
for bssid, v in pairs(t) do
local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)")
print("CURRENT RSSI IS: " .. rssi)
end
end
ssid, tmp, bssid_set, bssid = wifi.sta.getconfig()
scan_cfg = {}
scan_cfg.ssid = ssid
if bssid_set == 1 then
scan_cfg.bssid = bssid
else
scan_cfg.bssid = nil
end
scan_cfg.channel = wifi.getchannel()
scan_cfg.show_hidden = 0
ssid, tmp, bssid_set, bssid = nil, nil, nil, nil
wifi.sta.getap(scan_cfg, 1, listap)
Sets the WiFi station configuration.
This Lua code demonstrates various configurations for connecting the ESP8266 to an access point (AP) using the wifi.sta.config() function. You can choose whether to save the configuration to flash memory, specify a MAC address for the AP, or configure the station without immediately connecting to an AP.
-- Connect to Access Point (DO NOT save config to flash)
station_cfg = {}
station_cfg.ssid = "NODE-AABBCC"
station_cfg.pwd = "password"
wifi.sta.config(station_cfg)
-- Connect to Access Point (DO save config to flash)
station_cfg = {}
station_cfg.ssid = "NODE-AABBCC"
station_cfg.pwd = "password"
station_cfg.save = true
wifi.sta.config(station_cfg)
-- Connect to Access Point with specific MAC address
station_cfg = {}
station_cfg.ssid = "NODE-AABBCC"
station_cfg.pwd = "password"
station_cfg.bssid = "AA:BB:CC:DD:EE:FF"
wifi.sta.config(station_cfg)
-- Configure station but don't connect to Access point
station_cfg = {}
station_cfg.ssid = "NODE-AABBCC"
station_cfg.pwd = "password"
station_cfg.auto = false
wifi.sta.config(station_cfg)
Connect ESP8266 to WiFi Router
This Lua code initializes the WiFi module, sets it to both station and access point mode, and then connects to a specified access point with the provided SSID and password without saving the configuration to flash memory.
print("wifi init")
wifi.set.mode(wifi.STATIONAP)
-- Connect to Access Point (DO NOT save config to flash)
station_cfg = {}
station_cfg.ssid = "ArunEworld"
station_cfg.pwd = "Arun"
wifi.sta.config(station_cfg)
wifi.sta.connect()
Disconnect ESP8266 from WiFi Router
Disconnects from AP in station mode. wifi.sta.disconnect()
View the ESP8266 Stored Access Point information
Retrieve information about the Access Points cached by the ESP8266 station using the function wifi.sta.getapinfo().
This Lua code prints the stored access point information obtained from the ESP8266 module in both a non-formatted and formatted manner.
-- Print stored access point info
do
for k, v in pairs(wifi.sta.getapinfo()) do
if (type(v) == "table") then
print(" " .. k .. " : " .. type(v))
for k, v in pairs(v) do
print("\t\t" .. k .. " : " .. v)
end
else
print(" " .. k .. " : " .. v)
end
end
end
-- Print stored access point info (formatted)
do
local x = wifi.sta.getapinfo()
local y = wifi.sta.getapindex()
print("\n Number of APs stored in flash:", x.qty)
print(string.format(" %-6s %-32s %-64s %-18s", "index:", "SSID:", "Password:", "BSSID:"))
for i = 1, x.qty, 1 do
print(string.format(" %s%-6d %-32s %-64s %-18s", (i == y and ">" or " "), i, x[i].ssid, x[i].pwd and x[i].pwd or type(nil), x[i].bssid and x[i].bssid or type(nil)))
end
end
Gets the WiFi station configuration.
This Lua code retrieves and prints the current station configuration of the ESP8266 module, both in new and old formats. It displays the SSID, password, and BSSID settings if available.
-- Get current Station configuration (NEW FORMAT)
do
local def_sta_config = wifi.sta.getconfig(true)
print(string.format("\tDefault station config\n\tssid:\"%s\"\tpassword:\"%s\"%s",
def_sta_config.ssid, def_sta_config.pwd,
(type(def_sta_config.bssid) == "string" and "\tbssid:\"" .. def_sta_config.bssid .. "\"" or "")))
end
-- Get current Station configuration (OLD FORMAT)
ssid, password, bssid_set, bssid = wifi.sta.getconfig()
print("\nCurrent Station configuration:\nSSID : " .. ssid .. "\nPassword : " .. password ..
"\nBSSID_set : " .. bssid_set .. "\nBSSID: " .. bssid .. "\n")
ssid, password, bssid_set, bssid = nil, nil, nil, nil
Clears the currently saved WiFi station configuration
Clears the currently saved WiFi station configuration, erasing it from the flash. This action may be useful for certain factory-reset scenarios when a full node.restore() is not desired, or to prepare for using End-User Setup so that the SoftAP can lock onto a single hardware radio channel.
Ex : wifi.sta.clearconfig()
WiFi station status events
This Lua code registers event callbacks for various WiFi states, starts and stops the WiFi event monitor with different intervals, and unregisters callbacks as needed.
-- Register callbacks
wifi.sta.eventMonReg(wifi.STA_IDLE, function() print("STATION_IDLE") end)
wifi.sta.eventMonReg(wifi.STA_CONNECTING, function() print("STATION_CONNECTING") end)
wifi.sta.eventMonReg(wifi.STA_WRONGPWD, function() print("STATION_WRONG_PASSWORD") end)
wifi.sta.eventMonReg(wifi.STA_APNOTFOUND, function() print("STATION_NO_AP_FOUND") end)
wifi.sta.eventMonReg(wifi.STA_FAIL, function() print("STATION_CONNECT_FAIL") end)
wifi.sta.eventMonReg(wifi.STA_GOTIP, function() print("STATION_GOT_IP") end)
-- Register callback: use previous state
wifi.sta.eventMonReg(wifi.STA_CONNECTING, function(previous_State)
if (previous_State == wifi.STA_GOTIP) then
print("Station lost connection with access point\n\tAttempting to reconnect...")
else
print("STATION_CONNECTING")
end
end)
-- Start WiFi event monitor with default interval
wifi.sta.eventMonStart()
-- Start WiFi event monitor with 100ms interval
wifi.sta.eventMonStart(100)
-- Stop WiFi event monitor
wifi.sta.eventMonStop()
-- Stop WiFi event monitor and unregister all callbacks
wifi.sta.eventMonStop(1)
-- Unregister callback
wifi.sta.eventMonReg(wifi.STA_IDLE)
Gets current station hostname.
Ex : print(“Current hostname is: \””..wifi.sta.gethostname()..”\””)
Sets station hostname.
This Lua code checks if the hostname was successfully changed using the wifi.sta.sethostname() function and prints the corresponding message.
if (wifi.sta.sethostname("ArunEworld") == true) then
print("hostname was successfully changed")
else
print("hostname was not changed")
end
Gets IP address, netmask, and gateway address in station mode.
This Lua code retrieves and prints the current IP address, netmask, and gateway information using the wifi.sta.getip() function. It demonstrates different ways to handle the returned values.
-- Print current IP address, netmask, gateway
print(wifi.sta.getip()) -- Output: 192.168.0.111 255.255.255.0 192.168.0.1
ip = wifi.sta.getip()
print(ip) -- Output: 192.168.0.111
ip, nm = wifi.sta.getip()
print(nm) -- Output: 255.255.255.0
Gets IP address, netmask and gateway in AP mode.
This Lua code retrieves and prints the current IP address, netmask, and gateway information for the Access Point (AP) mode using the wifi.ap.getip() function. It demonstrates different ways to handle the returned values.
Retrieve the RSSI (Received Signal Strength Indicator).
Retrieve the RSSI (Received Signal Strength Indicator) from the Access Point to which the ESP8266 station is currently connected.
RSSI=wifi.sta.getrssi() print(“RSSI is”, RSSI)
Retrieves a table of clients connected to the device in AP mode.
This Lua code retrieves the client MAC addresses and IPs connected to the Access Point (AP) and prints them. It demonstrates two ways to iterate over the table returned by wifi.ap.getclient().
-- Get client MAC addresses and IPs connected to the AP
table = wifi.ap.getclient()
-- Iterate over the table to print MAC addresses and IPs
for mac, ip in pairs(table) do
print(mac, ip)
end
-- Alternatively, using a shorter loop syntax
for mac, ip in pairs(wifi.ap.getclient()) do
print(mac, ip)
end
Gets the current SoftAP configuration.
This Lua code retrieves and prints the SoftAP configuration in both new and old formats. It demonstrates two different ways of handling the configuration data returned by wifi.ap.getconfig().
-- Get SoftAP configuration table (NEW FORMAT)
do
print("\n Current SoftAP configuration:")
for k, v in pairs(wifi.ap.getconfig(true)) do
print(" "..k.." :", v)
end
end
-- Get current SoftAP configuration (OLD FORMAT)
do
local ssid, password = wifi.ap.getconfig()
print("\n Current SoftAP configuration:\n SSID : "..ssid.. "\n Password :", password)
ssid, password = nil, nil
end
Retrieve the default SoftAP configuration stored in flash.
This Lua code retrieves and prints the default SoftAP configuration in both new and old formats. It demonstrates two different ways of handling the configuration data returned by wifi.ap.getdefaultconfig().
-- Get default SoftAP configuration table (NEW FORMAT)
do
print("\n Default SoftAP configuration:")
for k, v in pairs(wifi.ap.getdefaultconfig(true)) do
print(" "..k.." :", v)
end
end
-- Get default SoftAP configuration (OLD FORMAT)
do
local ssid, password = wifi.ap.getdefaultconfig()
print("\n Default SoftAP configuration:\n SSID : "..ssid.. "\n Password :", password)
ssid, password = nil, nil
end
End User Setup NodeMCU Lua
ESP8266 NodeMCU WiFi End User Module
Function
Description
enduser_setup.manual()
Controls whether manual AP configuration is used.
enduser_setup.start()
Starts the captive portal.
enduser_setup.stop()
Stops the captive portal.
Example
This Lua code sets up the ESP8266 to operate in both station and access point modes, configures the access point with the SSID “ArunEworld” and no password (open authentication), enables manual end-user setup, and starts the setup process with callbacks for success and failure.
//Configure the End User Setup
wifi.setmode(wifi.STATIONAP)
wifi.ap.config({ ssid = "ArunEworld", auth = wifi.OPEN })
enduser_setup.manual(true)
enduser_setup.start(
function()
print("Connected to wifi as: " .. wifi.sta.getip())
--enduser_setup.stop()
end,
function(err, str)
print("enduser_setup: Err #" .. err .. ": " .. str)
end
);
LCD stands for Liquid Crystal Display. It’s a type of flat-panel display technology commonly used in TVs, computer monitors, smartphones, and other electronic devices. This work by sandwiching a layer of liquid crystals between two transparent electrodes and two polarizing filters. When an electric current passes through the liquid crystals, they align to allow varying amounts of light to pass through, creating images or text on the screen. LCDs are known for their sharp image quality, energy efficiency, and relatively low cost compared to other display technologies like OLED (Organic Light Emitting Diode).
Energy Efficiency: LCDs typically consume less power compared to older display technologies like CRTs (Cathode Ray Tubes), making them more energy-efficient.
Slim Profile: LCD panels are generally thin and lightweight, making them suitable for slim and portable devices such as laptops, tablets, and smartphones.
Sharp Image Quality: LCDs can produce high-resolution images with excellent clarity and color accuracy, providing a visually pleasing viewing experience.
Versatility: LCD technology is versatile and can be used in various applications, including TVs, computer monitors, digital signage, and automotive displays.
Longevity: LCD panels have a relatively long lifespan compared to some other display technologies when properly maintained, providing years of reliable use.
Disadvantages:
Limited Viewing Angles: LCDs may exhibit color distortion or brightness loss when viewed from extreme angles, making them less suitable for applications where multiple viewers may be viewing the screen from different angles.
Potential Motion Blur: Some LCD displays, especially those with slower response times, may suffer from motion blur, resulting in less-than-optimal performance for fast-moving content such as gaming or sports.
Backlight Uniformity Issues: LCDs rely on a backlight source to illuminate the screen, and sometimes there can be issues with backlight uniformity, leading to uneven brightness or “clouding” in certain areas of the display.
Limited Contrast Ratio: While modern LCDs have improved contrast ratios, they may still not match the deep blacks and high contrast levels achievable with technologies like OLED.
Risk of Dead Pixels: LCD panels may develop dead pixels over time, resulting in small, permanently lit or unlit spots on the screen, which can be distracting, especially in high-resolution displays.
Despite these disadvantages, LCD technology remains widely used and continues to be improved upon with advancements in backlighting, panel technology, and image processing algorithms.
The ESP32 NodeMCU Module is a versatile development board known for its robust capabilities in IoT projects. With built-in Wi-Fi and Bluetooth connectivity, it offers seamless integration into networked environments. Its compact size and powerful features make it a preferred choice for various IoT applications, from home automation to industrial monitoring. here will discuss ESP32 NodeMCU Net Module.
Throttles data reception by placing a request to block the TCP receive function.
net.socket:on()
Registers callback functions for specific events.
net.socket:send()
Sends data to the remote peer.
net.socket:ttl()
Changes or retrieves the Time-To-Live value on the socket.
net.socket:unhold()
Unblocks TCP receiving data by revoking a preceding hold().
net.udpsocket:close()
Closes a UDP socket.
net.udpsocket:listen()
Listens on a port from an IP address.
net.udpsocket:on()
Registers callback functions for specific events.
net.udpsocket:send()
Sends data to a specific remote peer.
net.udpsocket:dns()
Provides DNS resolution for a hostname.
net.udpsocket:getaddr()
Retrieves the local port and IP of the socket.
net.udpsocket:ttl()
Changes or retrieves the Time-To-Live value on the socket.
net.dns.getdnsserver()
Gets the IP address of the DNS server used to resolve hostnames.
net.dns.resolve()
Resolves a hostname to an IP address.
net.dns.setdnsserver()
Sets the IP of the DNS server used to resolve hostnames.
Ex : Create a server Connection
The function net.createServer([type[, timeout]]) is used to create a server with an optional timeout parameter. When you specify a timeout value, it determines the duration for which the server will wait for activity from a client before considering it inactive and closing the connection.
For example, if you create a TCP server with a timeout of 30 seconds using
-- 30s time out for a inactive client
net.createServer(net.TCP, 30) -- 30s timeout
it means that if a client connects to this server but does not send any data within 30 seconds, the server will automatically close the connection to that client.
This timeout functionality is useful for managing server resources efficiently. It allows servers to automatically clean up inactive connections, preventing them from occupying resources indefinitely. In scenarios where maintaining active connections is crucial, such as in real-time communication applications, setting a timeout ensures that resources are available for active clients and that inactive ones do not unnecessarily consume server resources.
Ex : Receive function
function receiver(sck, data)
print(data)
sck:close()
end
Ex : Web server function
-- server listens on 80, if data received, print data to console and send "hello world" back to caller
if sv then
sv:listen(80, function(conn)
conn:on("receive", receiver)
conn:send("Arunworld")
end)
end
TCP Server Connection(Client)
here the code for ESP32 NodeMCU Net Module example
Connect the WiFi Station
Once got IP address then run Server_Run() Function
CAN, short for Controller Area Network, was developed by Robert Bosch. This protocol facilitates half-duplex communication. In active voice, it would be: “It operates as a multi-master protocol, allowing it to connect multiple nodes.” This protocol utilizes a two-wire configuration, consisting of CAN H (H-High) and CAN L (L-Low). In active voice, it would be: This two-wire bus interconnects all nodes within the network. The wires typically constitute a twisted pair with a nominal impedance of 120 Ω. CAN supports communication over relatively short distances, typically up to 40 meters at speeds of 1 Mbps
myDevices Cayenne allows you to quickly design, prototype, and visualize IoT solutions. You can use Cayenne as a tool to visualize real-time and historical data, sent over to The Things Network. Let’s discuss “ESP8266 Arduino-Core Cayenne – Get Start with Cayenne MyDevice“
Cayenne is a platform for building IoT (Internet of Things) projects that provides tools for creating dashboards, monitoring devices, and controlling connected devices remotely. The Cayenne platform supports various microcontrollers and single-board computers, including the ESP8266, through the use of Cayenne MQTT or Cayenne MQTT API.
Bosch Sensortec developed the BMP280 as a barometric pressure sensor. It’s designed with high accuracy and precision to measure atmospheric pressure and temperature. The sensor is commonly used in various applications such as weather stations, altitude measurement, indoor navigation, and IoT (Internet of Things) devices.
The BMP280 sensor utilizes a MEMS (Micro-Electro-Mechanical Systems) pressure sensor to detect atmospheric pressure changes. Additionally, an integrated temperature sensor provides temperature measurements. These measurements enable the calculation of altitude and provide data for weather forecasting, environmental monitoring, and other applications.
This sensor communicates with microcontrollers or other devices via standard interfaces like I2C (Inter-Integrated Circuit) or SPI (Serial Peripheral Interface). Consequently, it’s easy to integrate into a wide range of electronic systems.
ESP8266 NodeMCU – Pressure Measurement using BMP280 Sensor
Uses
The BMP280 sensor finds applications in various fields due to its ability to measure barometric pressure and temperature accurately. Consequently, here are some common uses:
Weather Stations: These stations often employ this sensor to monitor atmospheric pressure and temperature, providing data for weather forecasting and analysis.
Altitude Measurement: Altimeters use it to determine altitude above sea level by measuring changes in atmospheric pressure with elevation.
Indoor Navigation: In combination with other sensors, this device contributes to indoor navigation systems by providing altitude and temperature data for positioning and orientation.
Drones and UAVs: These unmanned aerial vehicles (UAVs) use the BMP280 for altitude control and navigation, enabling precise altitude hold and flight stabilization.
Environmental Monitoring: Environmental monitoring systems use the sensor to measure atmospheric conditions in indoor and outdoor environments, including air quality assessment and pollution monitoring.
IoT (Internet of Things) Devices: Various applications integrate the BMP280 into IoT devices, including smart home automation, agricultural monitoring, and industrial control systems.
Automotive Applications: In automotive applications, the BMP280 can monitor cabin pressure, compensate for altitude in navigation systems, and control climate.
The ESP32 NodeMCU module supports the I2C (Inter-Integrated Circuit) communication protocol. With its built-in hardware support for I2C, the ESP32 NodeMCU module can easily interface with various I2C devices such as sensors, displays, and other peripherals. This allows for efficient data exchange between the ESP32 and I2C devices, enabling a wide range of applications in IoT, robotics, automation, and more.
Send (SW) or queue (HWx) I²C address and read/write mode for the next transfer.
i2c.read()
Read (SW) or queue (HWx) data for a variable number of bytes.
i2c.setup()
Initialize the I²C interface for master mode.
i2c.start()
Send (SW) or queue (HWx) an I²C start condition.
i2c.stop()
Send (SW) or queue (HWx) an I²C stop condition.
i2c.transfer()
Starts a transfer for the specified hardware module.
i2c.write()
Write (SW) or queue (HWx) data to the I²C bus.
i2c.slave.on()
Registers or unregisters an event callback handler.
i2c.slave.setup()
Initialize the I²C interface for slave mode.
i2c.slave.send()
Writes send data for the master into the transmit buffer.
Code of ESP32 I2C Scanner
In this code used to can the i2c Devices
Used Software i2c and GPIO-23 as SDA and GPIO-22 as SCL of I2C Device
Connected DS3231 Device and check i2c address of DS3231
-- setup
id = i2c.SW -- Software
pinSDA = 23 -- 1~12, IO index
pinSCL = 22 -- 1~12, IO index
speed = i2c.SLOW -- only i2c.SLOW supported
--Initialize
i2c.setup(id, pinSDA, pinSCL, speed) -- Initialize the I²C module.
print("Scanning Started....")
for count = 0,127 do
i2c.start(id) -- Send an I²C start condition.
Status = i2c.address(id, count, i2c.TRANSMITTER) -- Setup I²C address and read/write mode for the next transfer.
i2c.stop(id) -- Send an I²C stop condition.
if Status == true then
print("Addrss - "..count.." Detected device address is 0x" .. string.format("%02x", count) .. " (" .. count ..")")
elseif Status == false then
print("Addrss - "..count.." nil")
end
end
print("Scanning End")
This table format provides a structured breakdown of each section of the code along with its explanation.
Section
Explanation
Setup Section
id
Defines the I2C interface as software-based.
pinSDA
Specifies the GPIO pin used for the data line (SDA) of the I2C interface.
pinSCL
Specifies the GPIO pin used for the clock line (SCL) of the I2C interface.
speed
Sets the speed of the I2C communication to slow. Only i2c.SLOW speed is supported.
Initialization
i2c.setup()
Initializes the I2C module with the specified parameters: interface ID, SDA pin, SCL pin, and speed.
Scanning for Devices
print(“Scanning Started….”)
Prints a message indicating the start of device scanning.
Looping through device addresses
Iterates through device addresses from 0 to 127.
i2c.start()
Sends an I2C start condition.
i2c.address()
Sets up the I2C address and read/write mode for the next transfer.
i2c.stop()
Sends an I2C stop condition.
Check Status
Checks the status of the address detection: If Status is true, prints the detected device address in hexadecimal and decimal format. If Status is false, prints “nil” for the address.
print(“Scanning End”)
Prints a message indicating the end of device scanning.
ESP8266 and ESP32 NodeMCU Lua Module functions are different. So we can’t use ESP8266 fuctions directly in ESP32 Check the Official Documentation of NodeMCU Lua for ESP32
You must be logged in to post a comment.