Devices & Components
Arduino Mini 05
Waveshare 4.3 inch e-ink display
Hardware & Tools
Soldering iron (generic)
Software & Tools
Arduino IDE
Project description
Code
Github
https://github.com/rocketscream/Low-Power
E_paper_pic_frame.ino
arduino
Github
https://github.com/rocketscream/Low-Power
Github
https://github.com/sabas1080/LibraryEPD
Code snippet #1
text
1<p>#include <lowpower.h><br>#include <epd.h></epd.h></lowpower.h></p><p>const int wake_up = 6; 2const int reset = 5; 3const int lcd_on = 4; 4const int button = 3;</p><p>int refreshRate = 10800; //time between loading images. number you enter * 8 = seconds between refresh (10800 = 24h) 5int counter = 1; 6int refreshCounter = 0; 7int ByteReceived; 8bool errorFlag = false; 9bool picSend = false; 10bool picLoaded = false;</p><p>void(* resetFunc) (void) = 0;</p><p>void setup(void) 11{ 12 pinMode(lcd_on,OUTPUT); 13 pinMode(13,OUTPUT); 14 digitalWrite(13,LOW); 15 //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 16}</p><p>void loop(void){ 17 DrawPic(counter); 18 counter++; 19}</p><p>void wakeUp(){ 20 refreshCounter++; 21 if(refreshCounter < refreshRate) enterSleep(); 22}</p><p>void DrawPic(int index){ 23 pinMode(lcd_on,OUTPUT); 24 pinMode(13,OUTPUT); 25 digitalWrite(13,LOW); 26 //delay(2000); 27 digitalWrite(lcd_on,HIGH); 28 delay(300); 29 epd_init(wake_up, reset); 30 epd_wakeup(wake_up); 31 epd_set_memory(MEM_TF); 32 epd_clear(); 33 digitalWrite(13,HIGH);</p><p> //int index = 7; 34 String indexStr = String(counter); 35 String str = 'i' + indexStr + ".BMP "; 36 char character[str.length()] ; 37 str.toCharArray(character, str.length()); 38 epd_disp_bitmap(character, 0, 0); 39 epd_udpate(); 40 epd_enter_stopmode(); 41 while(1){ 42 ByteReceived = Serial.read(); 43 if(ByteReceived == 13){ 44 picSend= true; 45 } 46 if(ByteReceived == 69){ 47 errorFlag= true; 48 //if(!picSend && counter == 1) noSDcard(); 49 //if(picSend && counter == 1) noPic(); 50 //resetFunc(); 51 counter = 0; 52 //Serial.flush(); 53 break; 54 } 55 if(ByteReceived == 75 && picSend && picLoaded){ 56 break; 57 } 58 59 if(ByteReceived == 75 && picSend){ 60 picLoaded = true; 61 } 62 63 } 64 digitalWrite(13,LOW); 65 digitalWrite(lcd_on,LOW); 66 picLoaded = false; 67 errorFlag= false; 68 picSend= false; 69 refreshCounter = 0; 70 71 enterSleep(); 72}</p><p>void noSDcard(){ 73 epd_wakeup(wake_up); 74 //delay(5000); 75 epd_clear(); 76 epd_set_ch_font(GBK32); 77 epd_set_en_font(ASCII32); 78 epd_disp_string("Can't find SD card", 0, 300); 79 epd_udpate(); 80 delay(10000); 81}</p><p>void noPic(){ 82 epd_wakeup(wake_up); 83 //delay(5000); 84 epd_clear(); 85 epd_set_ch_font(GBK32); 86 epd_set_en_font(ASCII32); 87 epd_disp_string("Can't find this picture", 0, 300); 88 epd_udpate(); 89 delay(10000); 90}</p><p>void enterSleep(){ 91 attachInterrupt(1, wakeUp, RISING); 92 LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 93 wakeUp(); 94 detachInterrupt(1); 95}</p>
Code snippet #1
text
1<p>#include <lowpower.h><br>#include <epd.h></epd.h></lowpower.h></p><p>const 2 int wake_up = 6; 3const int reset = 5; 4const int lcd_on = 4; 5const int button 6 = 3;</p><p>int refreshRate = 10800; //time between loading images. number you enter 7 * 8 = seconds between refresh (10800 = 24h) 8int counter = 1; 9int refreshCounter 10 = 0; 11int ByteReceived; 12bool errorFlag = false; 13bool picSend = false; 14bool 15 picLoaded = false;</p><p>void(* resetFunc) (void) = 0;</p><p>void setup(void) 16{ 17 18 pinMode(lcd_on,OUTPUT); 19 pinMode(13,OUTPUT); 20 digitalWrite(13,LOW); 21 22 //LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); 23}</p><p>void loop(void){ 24 25 DrawPic(counter); 26 counter++; 27}</p><p>void wakeUp(){ 28 refreshCounter++; 29 30 if(refreshCounter < refreshRate) enterSleep(); 31}</p><p>void DrawPic(int index){ 32 33 pinMode(lcd_on,OUTPUT); 34 pinMode(13,OUTPUT); 35 digitalWrite(13,LOW); 36 37 //delay(2000); 38 digitalWrite(lcd_on,HIGH); 39 delay(300); 40 epd_init(wake_up, 41 reset); 42 epd_wakeup(wake_up); 43 epd_set_memory(MEM_TF); 44 epd_clear(); 45 46 digitalWrite(13,HIGH);</p><p> //int index = 7; 47 String indexStr = String(counter); 48 49 String str = 'i' + indexStr + ".BMP "; 50 char character[str.length()] ; 51 52 str.toCharArray(character, str.length()); 53 epd_disp_bitmap(character, 0, 0); 54 55 epd_udpate(); 56 epd_enter_stopmode(); 57 while(1){ 58 ByteReceived = 59 Serial.read(); 60 if(ByteReceived == 13){ 61 picSend= true; 62 } 63 64 if(ByteReceived == 69){ 65 errorFlag= true; 66 //if(!picSend && 67 counter == 1) noSDcard(); 68 //if(picSend && counter == 1) noPic(); 69 //resetFunc(); 70 71 counter = 0; 72 //Serial.flush(); 73 break; 74 } 75 if(ByteReceived 76 == 75 && picSend && picLoaded){ 77 break; 78 } 79 80 if(ByteReceived 81 == 75 && picSend){ 82 picLoaded = true; 83 } 84 85 } 86 digitalWrite(13,LOW); 87 88 digitalWrite(lcd_on,LOW); 89 picLoaded = false; 90 errorFlag= false; 91 picSend= 92 false; 93 refreshCounter = 0; 94 95 enterSleep(); 96}</p><p>void noSDcard(){ 97 98 epd_wakeup(wake_up); 99 //delay(5000); 100 epd_clear(); 101 epd_set_ch_font(GBK32); 102 103 epd_set_en_font(ASCII32); 104 epd_disp_string("Can't find SD card", 0, 300); 105 106 epd_udpate(); 107 delay(10000); 108}</p><p>void noPic(){ 109 epd_wakeup(wake_up); 110 111 //delay(5000); 112 epd_clear(); 113 epd_set_ch_font(GBK32); 114 epd_set_en_font(ASCII32); 115 116 epd_disp_string("Can't find this picture", 0, 300); 117 epd_udpate(); 118 delay(10000); 119}</p><p>void 120 enterSleep(){ 121 attachInterrupt(1, wakeUp, RISING); 122 LowPower.powerDown(SLEEP_8S, 123 ADC_OFF, BOD_OFF); 124 wakeUp(); 125 detachInterrupt(1); 126}</p>
E_paper_pic_frame.ino
arduino
Github
https://github.com/rocketscream/Low-Power
Downloadable files
Breadboard
Breadboard

Schematic
Schematic

Breadboard
Breadboard

Schematic
Schematic

Documentation
frame+1b.stl
frame+1b.stl
Comments
Only logged in users can leave comments