echo '' ;

ESP8266 NodeMCU Project – Imperial March Ringtone Play


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:

Pr-request to study first

  • Pulse With Modulation
  • ESP8266 NodeMCU Module – PWM

First Watch the Video Demonstration

What is RRTL?

RTTTL stands for “Ring Tone Text Transfer Language”. It was indeed developed by Nokia. RTTTL is a simple text-based language used for representing musical melodies as ringtones for mobile phones.

In RTTTL, a melody is represented as a text string that includes information about the duration and pitch of each note in the melody. The format is human-readable and consists of three main parameters for each note: duration, note, and optional octave. The format is easy to understand and has been widely used for creating custom ringtones.

Here is an example of an RTTTL string:

Mario: d=4,o=5,b=160: e6,e6,16d6,16e6,16g6,16g6,16a6,16g6,16p,16b6,16p,8g6,16p,8e6,8p,8a6,16p,8b6,8p,a6,16g6,16e6,16g6,16a6,16g6,16e6,16c6,16d6,16b6,16p,16c6,16p,8e6,16p,8g6,8p,8a6,16p,8b6,8p,a6,16g6,16e6,16g6,16a6,16g6,16e6,16c6,16d6,16b6,16p,16c6,16p,8e6,16p,8c6,8p,8d6,16p,8e6
  • The RTTTL format is a string divided into three sections:
    • Name
    • Default value and
    • Data.
  • See More

Imperial March Music (Hear)

  • The Imperial March (Darth Vader’s Theme) is a musical theme present in the Star Wars franchise.
  • It was composed by John Williams for the film Star Wars: The Empire Strikes Back.

What is PWM


PWM stands for Pulse Width Modulation. In electronics, we use PWM as a technique to control the average power delivered to a load by modulating the width of a pulsing signal. PWM finds common applications in controlling the speed of motors, adjusting the brightness of LEDs, and other scenarios where variable power levels are necessary.

PWM in ESP8266 NodeMCU Platform

  • ESP8266 has four PWM.
  • You can set PWM mode on a maximum of six pins

Note: Your NodeMCU firmware should have PWM Module library functions.

Required Hardware and Software Tools

  1. ESP8266 NodeMCU
  2. Piezo Buzzer
  3. Jumper wires

Connection Diagram

ESP8266 with Buzzer Connection Diagram

  • Connect the positive (longer leg) of the piezo buzzer to a digital pin on the NodeMCU
  • Connect the negative (shorter leg) of the piezo buzzer to the ground (GND) pin on the NodeMCU.

NodeMCU Lua code

Code-1

-- https://www.aruneworld.com/embedded/espressif/esp8266/esp8266_NodeMCU
 -- Tested By  : Arun(20170219)
 -- Example Name : AEW_RTTL-Buzzer.lua
 
 Tested Firmware Details :
 NodeMCU custom build by frightanic.com
 branch: master
 SSL: false
 modules:bit,enduser_setup,file,gpio,http,i2c,mdns,mqtt,net,node,
   ow,pwm,rtcfifo,rtcmem,rtctime,sntp,tmr,uart,wifi
  powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32)
 this code is simply modified from original
 True Credits - Arduino sketch by Andre Tagliati
 Credits - Lua code by Andreas Reischle
]]--

 
local BuzzerPin = 1  -- int PWM pin GPIO-5
 
--[[ Tone table  
 (According to musical frequency conventions,
 there are twelve notes in all, namely,
 A, A#, B, C, C#, D, D#, E, F, F#, G and G#,
 where ‘# ‘sign indicates a sharp note.) 
]]--
t={}
t["c"]=261
t["d"]= 294
t["e"]= 329
t["f"]= 349
t["g"]= 391
t["gS"]= 415
t["a"]= 440
t["aS"]= 455
t["b"]= 466
t["cH"]= 523
t["cSH"]= 554
t["dH"]= 587
t["dSH"]= 622
t["eH"]= 659
t["fH"]= 698
t["fSH"]= 740
t["gH"]= 784
t["gSH"]= 830
t["aH"]= 880

local function Play(tone, duration)
 local freq = t[tone]
 print ("Frequency:" .. freq)
 pwm.setup(BuzzerPin, freq, 512)
 pwm.start(BuzzerPin)
 tmr.delay(duration * 1000)  --delay in us
 pwm.stop(BuzzerPin)
 tmr.wdclr()
 tmr.delay(20000)  --delay in 20ms pause
 end  
 
 
local function Imperial_March()
--[[Play it  
 for the sheet music see:  
 http://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0016254  
 this is just a translation of said sheet music to frequencies / time in ms  
 used 500 ms for a quart note  
]]--
 Play("a", 500)  
 Play("a", 500)  
 Play("a", 500)  
 Play("f", 350)  
 Play("cH", 150)  
 Play("a", 500)  
 Play("f", 350)  
 Play("cH", 150)  
 Play("a", 1000)  
 --first bit  
 Play("eH", 500)  
 Play("eH", 500)  
 Play("eH", 500)  
 Play("fH", 350)  
 Play("cH", 150)  
 Play("gS", 500)  
 Play("f", 350)  
 Play("cH", 150)  
 Play("a", 1000)  
 --second bit...  
 Play("aH", 500)  
 Play("a", 350)  
 Play("a", 150)  
 Play("aH", 500)  
 Play("gSH", 250)  
 Play("gH", 250)  
 Play("fSH", 125)  
 Play("fH", 125)  
 Play("fSH", 250)  
 tmr.delay(250000)  
 Play("aS", 250)  
 Play("dSH", 500)  
 Play("dH", 250)  
 Play("cSH", 250)  
 --start of the interesting bit  
 Play("cH", 125)  
 Play("b", 125)  
 Play("cH", 250)  
 tmr.delay(250000)  
 Play("f", 125)  
 Play("gS", 500)  
 Play("f", 375)  
 Play("a", 125)  
 Play("cH", 500)  
 Play("a", 375)  
 Play("cH", 125)  
 Play("eH", 1000)  
 --more interesting stuff (this doesn't quite get it right somehow)  
 Play("aH", 500)  
 Play("a", 350)  
 Play("a", 150)  
 Play("aH", 500)  
 Play("gSH", 250)  
 Play("gH", 250)  
 Play("fSH", 125)  
 Play("fH", 125)  
 Play("fSH", 250)  
 tmr.delay(250000)  
 Play("aS", 250)  
 Play("dSH", 500)  
 Play("dH", 250)  
 Play("cSH", 250)  
 --repeat... repeat  
 Play("cH", 125)  
 Play("b", 125)  
 Play("cH", 250)  
 tmr.delay(250000)  
 Play("f", 250)  
 Play("gS", 500)  
 Play("f", 375)  
 Play("cH", 125)  
 Play("a", 500)  
 Play("f", 375)  
 Play("c", 125)  
 Play("a", 1000)  
 --and we're done \ó/ 
end

--tmr.alarm(0, 60000, 1,function() Imperial_March() end)
Imperial_March()

Code-2

X:1
T:Imperial March
M:4/4
Q:1/4=120
K:Cm
z4 G4 | c4 c4 | c4 B4 | z4 G4 |
c4 c4 | c4 B4 | z4 G4 | F4 F4 |
G4 z4 | z4 G4 | c4 c4 | c4 B4 |
z4 G4 | c4 c4 | c4 B4 | z4 G4 |

Follow steps

  • Connect the circuit as per the connection diagram
  • Save the above code as “AEW_RRTL_Buzzer.lua”
  • Open ESPlorer and upload the file “AEW_RRTL_Buzzer.lua”
  • Run the file  [ dofile(“AEW_RRTL_Buzzer.lua”) ]
  • Done.! Enjoy!! (Hear Imperial_march RTTL ringtone)

Credits

  • True Credits –  Arduino sketch by Andre Tagliati
  • Additional Credits – Lua code By Andres Reischle

2 thoughts on “ESP8266 NodeMCU Project – Imperial March Ringtone Play”

  1. Came across your website by accident, this code is exactly what I have been looking for, for an alarm project I have been working on, thanks.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from ArunEworld

Subscribe now to keep reading and get access to the full archive.

Continue reading