Want to learn 3D Printing, hurry up and register for our upcoming Workshop that starts Dec.16th

IOT Light WIFI

Posted by Momen 26/10/2017 0 Comment(s)

Welcome to Zeroohm Arduino Training series. In this series of Arduino Training, Zeroohm will focus its efforts on helping the community learn more about Arduino fundamentals and basics starting with basic control of LED's, motors, sensors and utilizing of wirless communication. We hope that you find this useful, Please, leave a comment for any questions or comments or reviews!

We provide all our trainings for groups from schools, universities, public sector and private sector in Abu Dhabi, Dubai, Sharjah, Fujirah, RAK or anywhere in UAE. Please,click here to contact us directly for any training inquires.

 

 

Introduction: 

We will make LED (On and Off) by using the NodeMCU chip, then we will explain the programming commands. Before starting this lesson, and going through the first project of Internet of Things (IoT), we will take a look on the NodeMCU chip. 

NodeMCU Mini is an ESP8266 WiFi micro controller that works at 80MHz and at 3.3V logic. This microcontroller contains a Tensilica chip core as well as a full WiFi stack. You can program the microcontroller using the Arduino IDE for an easy-to-run Internet of Things core or using the Lua script language. We have ship with NodeMCU 0.9.5 build 20150704 and powered by Lua 5.1.4, so we can use the Lua language directly to DIY the IOT project. We wired up a high-quality SiLabs CP2104 USB-Serial chip that can upload code at a blistering 921600 baud for fast development time. It also has auto-reset, so no noodling with pins and reset button pressings are needed. 

Features:

  • Super mini dimension: 23mm x48.3mm x13mm.
  • ESP8266 @ 80MHz with 3.3V logic/power.
  • 4MB of FLASH (32 MBit).
  • Built in WiFi 802.11 b/g/n.
  • CP2104 USB-Serial converter onboard with 921600 max baudrate for speedy uploading.
  • Auto-reset support for getting into bootload mode before firmware upload.
  • Output all the GPIO of ESP-12F.
  • With Reset button and Flash button.

Now we will divide the first project for two parts: the first part will be LED (on and off) and the second part will be the same project but with PWM property.

Hardware Components: 

  • NodeMCU board.
  • Breadboard.
  • Plate NodeMCU board.
  • resistors (220 ohm).
  • LED.

 

Hardware Design: 

Part I:

Now let’s have a look at the hardware overview of the entire circuit shown in the image. Connect them as shown in Figure 1:

esp8266-nodemcu

 

We also connect the ( LED ) at pin (D4 ) from NodeMCU board like as shown in Figure 1.

Software Design: 

The Code and explanation:

Copy this code to your ESPlorer software and save it with " ESPlorer_LED" name or any other name (no problem at this point), then upload the code.

led=4

x=0

gpio.mode(led,gpio.OUTPUT)

tmr.alarm(0,1000,1,function()

if x==0 then

        x=1

        gpio.write(led,gpio.HIGH)

else

        x=0

        gpio.write(led,gpio.LOW)

end

end)

 

  • We define a variable called LED that is refer to pin D4.
  • We define a new variable called X that has a default value equal to zero.
  • We then configure the LED as output.
  • Then, we create a function that repeat a commands after special period that measured by mile second, and here we define 1000 m/s which is equal to one second.
  • After that, we create “if statement function” to test whether the variable X is equal to zero or not. If the value of the variable X is equal to zero, the LED will show ON, otherwise if the value is equal to one, the LED will show OFF. This process loop is every 1000 m/s.
  • Now, we will explain (tmr.alarm) function in more details:

We note that the time function has 4 arguments:

-The first argument (0) refers to the number of the function and it takes one number from 0 to 6 and arrangement is not required.

-The second argument (1000): refers to the time period in m/s unit.

-The third argument (1): It should take one of two values 0 or 1. 1 means that the command will execute every (1000 m/s), but if it takes 0 value this means that it executes one time after (1000 m/s) without repeating.   

-Fourth argument (function): It refers to the command that will execute it. In our example, the command that will be executed is: (Hello World) statement.

  • The main concept for our example is to show the (Hello World) statement every (1000 m/s) continuously. 
  • The code maybe has multiple functions of time (tmr.alarm), so here we can notice the benefit of the number of time function (tmr.alarm).

tmr.alarm( 0, 2000, 1, function()

print( "green" )

end )

tmr.alarm( 4 ,5000 ,0, function()

print( "black" )

end )

tmr.alarm( 2, 300, 1, function()

print( "white" )

end )

- The first time function has 0 specific number which means that it will show (Green) statement every 2 seconds.

 - The second time function has 4 specific numbers which means that it will show (Black) after 5 seconds once without repeating. 

- The third time function has 2 specific numbers which means that it will show (White) every 300m/s continuously.

  • Few notes on the name of code file:

To run the program that was saved at ESP8266 properly, it is preferable to name all the files with (.init.lua) and save each code file at a new folder with same name of our project.

Let's have a look at Figure 2 which explains the steps:

 esp8266-nodemcu-file-name

Figure 2. The proper way to name the files in the ESP8266.

 

Part II (ON/OFF LED with PWM property):

Connect the circuit as shown in Figure 3:

esp8266-nodemcu

 

 The code:

Copy this code to your ESPlorer software again and save it as " ESPlorer_LED". or any other name. Next, upload the code, or do similar to the steps in the previous note regarding naming a file.

led=4

c=0

x=0

gpio.mode(led,gpio.OUTPUT)

pwm.setup(led,1000,0)

pwm.start(led)

for x=0,2,1 do

for c=0,1023,1 do

pwm.setduty(led,c)

tmr.delay(1000)

end

for c=1023,0,-1 do

pwm.setduty(led,c)

tmr.delay(1000)

end 

end

 

  • The command { pwm.setup(led,1000,0) } has three arguments:

-The first argument (led) refers to the pin that we will use it to execute the PWM property. In our project we use pin (D4) to refer for led.

-The second argument (1000) refers to the frequency of the PWM. The possible value that will take it is only from 0 to 1000.

-The third argument (0) refers to the duty cycle value. The possible value that can take is from 0 to 1023. Those values control the lighting strongly.

  • The first is (for function) that will repeat the execution commands three times from 0 to 2.
  • The second is (for function) that is one of other commands at the beginning for loop function that will repeat the execution commands 1024 times (from 0 to 1023).
  • {pwm.setduty(led,c) } this command created to apply control by the variable c with different values from 0 to 1023.
  • Some important notes about using for function:

for x=0, 9, 1 do

print( "Arabic" )

end

- The first argument value refers to the initial value of the (for function).

- The second argument value refers to the final value of the (for function). The function will stop here.

 - The third argument value indicates the amount of increase after every for loop.

Finally:

We hope that you have enjoyed this project. Also we hope that it was beneficial. 

 

Leave a Comment