Components and supplies
NodeMCU ESP8266 Breakout Board
Jumper wires (generic)
6x6x4.30mm Buttons
DFPlayer Mini
0,91 Zoll OLED I2C Display 128 x 32 Pixel
Apps and platforms
Arduino IDE
Project description
Code
NodeMCU MP3 Player with Display and buttons
c_cpp
Just Paste into your IDE and flash your NodeMCU
1#include "DFRobotDFPlayerMini.h" 2#include <SPI.h> 3#include <Wire.h> 4#include <U8g2lib.h> 5 6#if !defined(UBRR1H) 7#include <SoftwareSerial.h> 8SoftwareSerial mySerial(D7, D8); // RX, TX 9#endif 10 11#define BUTTON_PIN_pause D3 // Play_Pause Button 12#define BUTTON_PIN_playnext D5 // Next Button 13#define BUTTON_PIN_volumeUp D4 // VolUp Button 14#define BUTTON_PIN_volumeDown D6 // VolDown Button 15 16#define SCREEN_WIDTH 128 // OLED display width, in pixels 17#define SCREEN_HEIGHT 32 // OLED display height, in pixels 18#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) 19#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 20U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=D1*/ 5, /* data=D2*/ 4); 21 22boolean oldState_pause = HIGH; 23boolean oldState_playnext = HIGH; 24boolean oldState_volumeUp = HIGH; 25boolean oldState_volumeDown = HIGH; 26 27int mode = 0; // Currently-active action mode 28int playstate = 0; 29int test = 0; 30int tracks = 0; 31int currtrack = 0; 32int currvol = 0; 33int volume = 0; 34int volumeunder = 0; 35int volumeover = 0; 36DFRobotDFPlayerMini myDFPlayer; 37 38void setup() 39{ 40 pinMode(BUTTON_PIN_pause, INPUT_PULLUP); 41 pinMode(BUTTON_PIN_playnext, INPUT_PULLUP); 42 pinMode(BUTTON_PIN_volumeUp, INPUT_PULLUP); 43 pinMode(BUTTON_PIN_volumeDown, INPUT_PULLUP); 44 Serial.begin(115200); 45 46#if !defined(UBRR1H) 47 mySerial.begin(9600); 48 myDFPlayer.begin(mySerial, true); 49#else 50 Serial1.begin(9600); 51 myDFPlayer.begin(Serial1, true); 52#endif 53 delay(1000); 54 55 myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); 56 57 u8x8.begin(); 58 Serial.println(u8x8.getRows()); 59 u8x8.setBusClock(400000); 60 61 Serial.println("Setting volume to 15"); 62 myDFPlayer.volume(15); 63 delay(100); 64 currvol = myDFPlayer.readVolume(); 65 Serial.println(currvol); 66 Lautstaerke(); 67 Track(); 68 delay(100); 69} 70 71void loop() 72{ 73 boolean newState_pause = digitalRead(BUTTON_PIN_pause); 74 boolean newState_playnext = digitalRead(BUTTON_PIN_playnext); 75 boolean newState_volumeUp = digitalRead(BUTTON_PIN_volumeUp); 76 boolean newState_volumeDown = digitalRead(BUTTON_PIN_volumeDown); 77 78 // Play_Pause Button 79 if ((newState_pause == LOW) && (oldState_pause == HIGH)) { 80 // Short delay to debounce button. 81 delay(20); 82 // Check if button is still low after debounce. 83 newState_pause = digitalRead(BUTTON_PIN_pause); 84 if (newState_pause == LOW) { // Yes, still low 85 mode = 1; // Set mode for Switch 86 } 87 } 88 // Play Next Button 89 if ((newState_playnext == LOW) && (oldState_playnext == HIGH)) { 90 // Short delay to debounce button. 91 delay(20); 92 // Check if button is still low after debounce. 93 newState_playnext = digitalRead(BUTTON_PIN_playnext); 94 if (newState_playnext == LOW) { // Yes, still low 95 mode = 2; // Set mode for Switch 96 } 97 } 98 // volumeDown Button 99 if ((newState_volumeDown == LOW) && (oldState_volumeDown == HIGH)) { 100 // Short delay to debounce button. 101 delay(20); 102 // Check if button is still low after debounce. 103 newState_volumeDown = digitalRead(BUTTON_PIN_volumeDown); 104 if (newState_volumeDown == LOW) { // Yes, still low 105 mode = 3; // Set mode for Switch 106 } 107 } 108 // volumeUp Button 109 if ((newState_volumeUp == LOW) && (oldState_volumeUp == HIGH)) { 110 // Short delay to debounce button. 111 delay(20); 112 // Check if button is still low after debounce. 113 newState_volumeUp = digitalRead(BUTTON_PIN_volumeUp); 114 if (newState_volumeUp == LOW) { // Yes, still low 115 mode = 4; // Set mode for Switch 116 } 117 } 118 119 switch (mode) { // Start an action... 120 case 1: 121 if (playstate == 1) { 122 myDFPlayer.start(); 123 mode = 0; 124 playstate = 2; 125 Serial.println("Resume"); 126 Lautstaerke(); 127 Weiter(); 128 Track(); 129 delay(200); 130 break; 131 } 132 else if (playstate == 2) { 133 myDFPlayer.pause(); 134 mode = 0; 135 playstate = 1; 136 Serial.println("Pause"); 137 Lautstaerke(); 138 Pause(); 139 Track(); 140 delay(200); 141 break; 142 } 143 else if (playstate == 0) { 144 myDFPlayer.play(1); 145 mode = 0; 146 playstate = 2; 147 Serial.println("Play"); 148 Lautstaerke(); 149 Play(); 150 Track(); 151 delay(200); 152 break; 153 } 154 case 2: 155 myDFPlayer.next(); 156 delay(100); 157 mode = 0; 158 Serial.println("Next Track"); 159 tracks = myDFPlayer.readFileCounts(); 160 currtrack = myDFPlayer.readCurrentFileNumber(); 161 Serial.print(currtrack); 162 Serial.print("/"); 163 Serial.print(tracks); 164 Lautstaerke(); 165 Play(); 166 Track(); 167 break; 168 case 3: 169 170 myDFPlayer.volumeDown(); 171 mode = 0; 172 Serial.println("Leiser"); 173 delay(100); 174 test = myDFPlayer.readVolume(); 175 Serial.println(test); 176 Lautstaerke(); 177 Track(); 178 if (playstate != 0) { 179 if (playstate != 1) { 180 Weiter(); 181 } 182 } 183 break; 184 case 4: 185 myDFPlayer.volumeUp(); 186 mode = 0; 187 Serial.println("Lauter"); 188 delay(100); 189 test = myDFPlayer.readVolume(); 190 Serial.println(test); 191 Lautstaerke(); 192 Track(); 193 if (playstate != 0) { 194 if (playstate != 1) { 195 Weiter(); 196 } 197 } 198 break; 199 } 200} 201void Lautstaerke() 202{ 203 int volume = myDFPlayer.readVolume(); 204 u8x8.setFont(u8x8_font_5x8_f); 205 u8x8.setCursor(2, 0); 206 volumeunder = volume - 1, 207 u8x8.print(volumeunder); 208 u8x8.setCursor(0, 1); 209 u8x8.setFont(u8x8_font_8x13_1x2_f); 210 u8x8.print(volume); 211 u8x8.setFont(u8x8_font_5x8_f); 212 u8x8.setCursor(2, 3); 213 volumeover = volume + 1, 214 u8x8.print(volumeover); 215 for (int i = 0; i <= 5; i++) { 216 u8x8.setCursor(4, i); 217 u8x8.print("|"); 218 } 219} 220void Weiter() 221{ 222 u8x8.setFont(u8x8_font_7x14_1x2_f); 223 u8x8.setCursor(6, 0); 224 u8x8.print(""); 225 u8x8.print("Playing"); 226} 227void Play() 228{ 229 u8x8.setFont(u8x8_font_7x14_1x2_f); 230 u8x8.setCursor(6, 0); 231 u8x8.print(""); 232 u8x8.print("Playing"); 233} 234void Pause() 235{ 236 u8x8.setFont(u8x8_font_7x14_1x2_f); 237 u8x8.setCursor(6, 0); 238 u8x8.print(""); 239 u8x8.print("Pause "); 240} 241void Track() 242{ 243 u8x8.setFont(u8x8_font_7x14_1x2_f); 244 u8x8.setCursor(6, 2); 245 u8x8.print(myDFPlayer.readCurrentFileNumber()); 246 u8x8.print(" / "); 247 u8x8.print(myDFPlayer.readFileCounts()); 248}
NodeMCU MP3 Player with Display and buttons
c_cpp
Just Paste into your IDE and flash your NodeMCU
1#include "DFRobotDFPlayerMini.h" 2#include <SPI.h> 3#include <Wire.h> 4#include <U8g2lib.h> 5 6#if !defined(UBRR1H) 7#include <SoftwareSerial.h> 8SoftwareSerial mySerial(D7, D8); // RX, TX 9#endif 10 11#define BUTTON_PIN_pause D3 // Play_Pause Button 12#define BUTTON_PIN_playnext D5 // Next Button 13#define BUTTON_PIN_volumeUp D4 // VolUp Button 14#define BUTTON_PIN_volumeDown D6 // VolDown Button 15 16#define SCREEN_WIDTH 128 // OLED display width, in pixels 17#define SCREEN_HEIGHT 32 // OLED display height, in pixels 18#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) 19#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 20U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=D1*/ 5, /* data=D2*/ 4); 21 22boolean oldState_pause = HIGH; 23boolean oldState_playnext = HIGH; 24boolean oldState_volumeUp = HIGH; 25boolean oldState_volumeDown = HIGH; 26 27int mode = 0; // Currently-active action mode 28int playstate = 0; 29int test = 0; 30int tracks = 0; 31int currtrack = 0; 32int currvol = 0; 33int volume = 0; 34int volumeunder = 0; 35int volumeover = 0; 36DFRobotDFPlayerMini myDFPlayer; 37 38void setup() 39{ 40 pinMode(BUTTON_PIN_pause, INPUT_PULLUP); 41 pinMode(BUTTON_PIN_playnext, INPUT_PULLUP); 42 pinMode(BUTTON_PIN_volumeUp, INPUT_PULLUP); 43 pinMode(BUTTON_PIN_volumeDown, INPUT_PULLUP); 44 Serial.begin(115200); 45 46#if !defined(UBRR1H) 47 mySerial.begin(9600); 48 myDFPlayer.begin(mySerial, true); 49#else 50 Serial1.begin(9600); 51 myDFPlayer.begin(Serial1, true); 52#endif 53 delay(1000); 54 55 myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); 56 57 u8x8.begin(); 58 Serial.println(u8x8.getRows()); 59 u8x8.setBusClock(400000); 60 61 Serial.println("Setting volume to 15"); 62 myDFPlayer.volume(15); 63 delay(100); 64 currvol = myDFPlayer.readVolume(); 65 Serial.println(currvol); 66 Lautstaerke(); 67 Track(); 68 delay(100); 69} 70 71void loop() 72{ 73 boolean newState_pause = digitalRead(BUTTON_PIN_pause); 74 boolean newState_playnext = digitalRead(BUTTON_PIN_playnext); 75 boolean newState_volumeUp = digitalRead(BUTTON_PIN_volumeUp); 76 boolean newState_volumeDown = digitalRead(BUTTON_PIN_volumeDown); 77 78 // Play_Pause Button 79 if ((newState_pause == LOW) && (oldState_pause == HIGH)) { 80 // Short delay to debounce button. 81 delay(20); 82 // Check if button is still low after debounce. 83 newState_pause = digitalRead(BUTTON_PIN_pause); 84 if (newState_pause == LOW) { // Yes, still low 85 mode = 1; // Set mode for Switch 86 } 87 } 88 // Play Next Button 89 if ((newState_playnext == LOW) && (oldState_playnext == HIGH)) { 90 // Short delay to debounce button. 91 delay(20); 92 // Check if button is still low after debounce. 93 newState_playnext = digitalRead(BUTTON_PIN_playnext); 94 if (newState_playnext == LOW) { // Yes, still low 95 mode = 2; // Set mode for Switch 96 } 97 } 98 // volumeDown Button 99 if ((newState_volumeDown == LOW) && (oldState_volumeDown == HIGH)) { 100 // Short delay to debounce button. 101 delay(20); 102 // Check if button is still low after debounce. 103 newState_volumeDown = digitalRead(BUTTON_PIN_volumeDown); 104 if (newState_volumeDown == LOW) { // Yes, still low 105 mode = 3; // Set mode for Switch 106 } 107 } 108 // volumeUp Button 109 if ((newState_volumeUp == LOW) && (oldState_volumeUp == HIGH)) { 110 // Short delay to debounce button. 111 delay(20); 112 // Check if button is still low after debounce. 113 newState_volumeUp = digitalRead(BUTTON_PIN_volumeUp); 114 if (newState_volumeUp == LOW) { // Yes, still low 115 mode = 4; // Set mode for Switch 116 } 117 } 118 119 switch (mode) { // Start an action... 120 case 1: 121 if (playstate == 1) { 122 myDFPlayer.start(); 123 mode = 0; 124 playstate = 2; 125 Serial.println("Resume"); 126 Lautstaerke(); 127 Weiter(); 128 Track(); 129 delay(200); 130 break; 131 } 132 else if (playstate == 2) { 133 myDFPlayer.pause(); 134 mode = 0; 135 playstate = 1; 136 Serial.println("Pause"); 137 Lautstaerke(); 138 Pause(); 139 Track(); 140 delay(200); 141 break; 142 } 143 else if (playstate == 0) { 144 myDFPlayer.play(1); 145 mode = 0; 146 playstate = 2; 147 Serial.println("Play"); 148 Lautstaerke(); 149 Play(); 150 Track(); 151 delay(200); 152 break; 153 } 154 case 2: 155 myDFPlayer.next(); 156 delay(100); 157 mode = 0; 158 Serial.println("Next Track"); 159 tracks = myDFPlayer.readFileCounts(); 160 currtrack = myDFPlayer.readCurrentFileNumber(); 161 Serial.print(currtrack); 162 Serial.print("/"); 163 Serial.print(tracks); 164 Lautstaerke(); 165 Play(); 166 Track(); 167 break; 168 case 3: 169 170 myDFPlayer.volumeDown(); 171 mode = 0; 172 Serial.println("Leiser"); 173 delay(100); 174 test = myDFPlayer.readVolume(); 175 Serial.println(test); 176 Lautstaerke(); 177 Track(); 178 if (playstate != 0) { 179 if (playstate != 1) { 180 Weiter(); 181 } 182 } 183 break; 184 case 4: 185 myDFPlayer.volumeUp(); 186 mode = 0; 187 Serial.println("Lauter"); 188 delay(100); 189 test = myDFPlayer.readVolume(); 190 Serial.println(test); 191 Lautstaerke(); 192 Track(); 193 if (playstate != 0) { 194 if (playstate != 1) { 195 Weiter(); 196 } 197 } 198 break; 199 } 200} 201void Lautstaerke() 202{ 203 int volume = myDFPlayer.readVolume(); 204 u8x8.setFont(u8x8_font_5x8_f); 205 u8x8.setCursor(2, 0); 206 volumeunder = volume - 1, 207 u8x8.print(volumeunder); 208 u8x8.setCursor(0, 1); 209 u8x8.setFont(u8x8_font_8x13_1x2_f); 210 u8x8.print(volume); 211 u8x8.setFont(u8x8_font_5x8_f); 212 u8x8.setCursor(2, 3); 213 volumeover = volume + 1, 214 u8x8.print(volumeover); 215 for (int i = 0; i <= 5; i++) { 216 u8x8.setCursor(4, i); 217 u8x8.print("|"); 218 } 219} 220void Weiter() 221{ 222 u8x8.setFont(u8x8_font_7x14_1x2_f); 223 u8x8.setCursor(6, 0); 224 u8x8.print(""); 225 u8x8.print("Playing"); 226} 227void Play() 228{ 229 u8x8.setFont(u8x8_font_7x14_1x2_f); 230 u8x8.setCursor(6, 0); 231 u8x8.print(""); 232 u8x8.print("Playing"); 233} 234void Pause() 235{ 236 u8x8.setFont(u8x8_font_7x14_1x2_f); 237 u8x8.setCursor(6, 0); 238 u8x8.print(""); 239 u8x8.print("Pause "); 240} 241void Track() 242{ 243 u8x8.setFont(u8x8_font_7x14_1x2_f); 244 u8x8.setCursor(6, 2); 245 u8x8.print(myDFPlayer.readCurrentFileNumber()); 246 u8x8.print(" / "); 247 u8x8.print(myDFPlayer.readFileCounts()); 248}
Downloadable files
Fritzing of the complete setup
Fritzing of the complete setup
Comments
Only logged in users can leave comments
maximus1
0 Followers
•0 Projects
Table of contents
Intro
1
0