Last active
April 6, 2022 23:45
-
-
Save dicamarques14/71043efe9f10615a92e9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*ESP UPVOTE NOTIFY, BASED ON | |
* http://www.kendricktabi.com/2015/08/esp8266-and-nokia-5110-lcd.html | |
* and http://arduinomeetslinux.com/beyond.php?p=3 | |
* ---Dicamarques | |
* includes a BMP of an upvote, 48*48, couldnt make it work | |
* https://www.reddit.com/r/arduino/comments/41ly7p/for_every_upvote_this_thread_gets_my_arduino_will/ | |
* | |
*/ | |
#include <ESP8266WiFi.h> | |
#include <ArduinoJson.h> | |
#define PIN_SCE 4 //Pin 3 on LCD | |
#define PIN_RESET 5 //Pin 4 on LCD | |
#define PIN_DC 12 //Pin 5 on LCD | |
#define PIN_SDIN 14 //Pin 6 on LCD | |
#define PIN_SCLK 16 //Pin 7 on LCD | |
#define LCD_C LOW | |
#define LCD_D HIGH | |
#define LCD_X 84 | |
#define LCD_Y 48 | |
const char* ssid = "SSID"; // insert your SSID | |
const char* password = "1234"; // insert your password | |
int pinLed = 2; //LED to blink | |
const char* host = "www.reddit.com"; | |
String url = "/r/arduino/comments/41ly7p/for_every_upvote_this_thread_gets_my_arduino_will/.json"; | |
int newUp = 0; | |
int currUp = 0; | |
char upvote[] = { | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF0, | |
0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0, | |
0xE0,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC, | |
0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0, | |
0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF8, | |
0xF8,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x06,0x06,0x06,0x07,0x07,0x07, | |
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, | |
0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, | |
0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, | |
0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, | |
}; | |
static const byte ASCII[][5] = | |
{ | |
{0x00, 0x00, 0x00, 0x00, 0x00} // 20 | |
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! | |
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " | |
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # | |
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ | |
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % | |
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & | |
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' | |
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( | |
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) | |
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * | |
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + | |
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , | |
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - | |
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . | |
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / | |
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 | |
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 | |
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 | |
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 | |
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 | |
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 | |
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 | |
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 | |
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 | |
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 | |
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : | |
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; | |
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < | |
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = | |
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > | |
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? | |
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ | |
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A | |
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B | |
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C | |
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D | |
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E | |
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F | |
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G | |
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H | |
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I | |
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J | |
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K | |
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L | |
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M | |
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N | |
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O | |
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P | |
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q | |
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R | |
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S | |
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T | |
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U | |
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V | |
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W | |
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X | |
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y | |
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z | |
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ | |
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥ | |
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] | |
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ | |
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ | |
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` | |
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a | |
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b | |
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c | |
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d | |
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e | |
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f | |
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g | |
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h | |
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i | |
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j | |
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k | |
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l | |
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m | |
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n | |
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o | |
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p | |
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q | |
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r | |
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s | |
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t | |
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u | |
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v | |
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w | |
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x | |
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y | |
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z | |
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { | |
,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | | |
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } | |
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← | |
,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f → | |
}; | |
void LcdCharacter(char character) | |
{ | |
LcdWrite(LCD_D, 0x00); | |
for (int index = 0; index < 5; index++) | |
{ | |
LcdWrite(LCD_D, ASCII[character - 0x20][index]); | |
} | |
LcdWrite(LCD_D, 0x00); | |
} | |
void LcdClear(void) | |
{ | |
for (int index = 0; index < LCD_X * LCD_Y / 8; index++) | |
{ | |
LcdWrite(LCD_D, 0x00); | |
} | |
} | |
void LcdInitialise(void) | |
{ | |
pinMode(PIN_SCE, OUTPUT); | |
pinMode(PIN_RESET, OUTPUT); | |
pinMode(PIN_DC, OUTPUT); | |
pinMode(PIN_SDIN, OUTPUT); | |
pinMode(PIN_SCLK, OUTPUT); | |
digitalWrite(PIN_RESET, LOW); | |
digitalWrite(PIN_RESET, HIGH); | |
LcdWrite(LCD_C, 0x21 ); // LCD Extended Commands. | |
LcdWrite(LCD_C, 0xB1 ); // Set LCD Vop (Contrast). | |
LcdWrite(LCD_C, 0x04 ); // Set Temp coefficent. //0x04 | |
LcdWrite(LCD_C, 0x14 ); // LCD bias mode 1:48. //0x13 | |
LcdWrite(LCD_C, 0x20 ); // LCD Basic Commands | |
LcdWrite(LCD_C, 0x0C ); // LCD in normal mode. | |
} | |
void LcdString(char *characters) | |
{ | |
while (*characters) | |
{ | |
LcdCharacter(*characters++); | |
} | |
} | |
void gotoXY(int x, int y) { | |
LcdWrite(0, 0x80 | x); // Column x - range: 0 to 84 | |
LcdWrite(0, 0x40 | y); // Row y - range: 0 to 5 | |
} | |
void LcdBitmap(char my_array[]){ | |
for (int index = 0 ; index < ( 48 * 48 / 8 ) ; index++) | |
LcdWrite(LCD_D, my_array[index]); | |
} | |
void LcdWrite(byte dc, byte data) | |
{ | |
digitalWrite(PIN_DC, dc); | |
digitalWrite(PIN_SCE, LOW); | |
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); | |
digitalWrite(PIN_SCE, HIGH); | |
} | |
void setup(void) | |
{ | |
pinMode(pinLed, OUTPUT); | |
digitalWrite(pinLed, 1); | |
Serial.begin(9600); | |
LcdInitialise(); | |
LcdClear(); | |
//LcdBitmap(upvote); | |
gotoXY(0, 4); | |
LcdString("Hello World!"); | |
gotoXY(0, 2); | |
LcdString("Connecting "); | |
LcdString("to WiFi"); | |
WiFi.begin(ssid, password); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
LcdString("."); | |
} | |
LcdClear(); | |
gotoXY(0, 2); | |
LcdString(" WiFi "); | |
LcdString(" Connected! "); | |
delay(1000); | |
LcdClear(); | |
} | |
void loop(void) | |
{ | |
WiFiClient client; | |
const int httpPort = 80; | |
if (!client.connect(host, httpPort)) { | |
return; | |
} | |
// This will send the request to the server | |
client.print(String("GET ") + url + " HTTP/1.1\r\n" + | |
"Host: " + host + "\r\n" + | |
"Connection: close\r\n\r\n"); | |
delay(10); | |
unsigned int i = 0; //timeout counter | |
int n = 0; // char counter | |
char json[50]; | |
Serial.println(""); | |
Serial.print("c=["); | |
while (!client.find("\"score\": ")){} | |
while (i<600) { | |
if(client.available()) { | |
char c = client.read(); | |
if(c==','){ | |
json[n]= '\0'; | |
break; | |
} | |
Serial.print(c); | |
json[n]=c; | |
n++; | |
i=0; | |
} | |
i++; | |
} | |
client.stop(); | |
Serial.println("]"); | |
Serial.print("upvotes="); | |
Serial.println(json); | |
newUp = atoi(json); | |
Serial.print("Nupvotes="); | |
Serial.println(newUp); | |
LcdClear(); | |
gotoXY(15, 0); | |
LcdString("UpVotes"); | |
gotoXY(20, 1); | |
LcdString(json); | |
if(currUp==0)currUp=newUp; | |
int diff = newUp - currUp; | |
Serial.print("diff="); | |
Serial.println(diff); | |
if(diff<0)currUp=newUp; | |
for (int i=0; i < diff; i++) { | |
currUp++; | |
//LcdBitmap(upvote); | |
gotoXY(5, 3); | |
LcdString("NEW UPVOTE!!"); | |
String numb = String(currUp); | |
char numb2[50]; | |
numb.toCharArray(numb2, 50); | |
gotoXY(20, 5); | |
LcdString(numb2); | |
digitalWrite(pinLed, 0); | |
delay(250); | |
digitalWrite(pinLed, 1); | |
delay(250); | |
digitalWrite(pinLed, 0); | |
delay(250); | |
digitalWrite(pinLed, 1); | |
delay(500); | |
} | |
delay(5000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment