1
+ #include < Arduino.h>
2
+ #include < ArduinoJson.h>
3
+ #include < U8g2lib.h>
4
+ #include < ESP8266WiFi.h>
5
+ #include < DNSServer.h>
6
+ #include < WiFiManager.h>
7
+ #include < PubSubClient.h>
8
+ #include < Secrets.h>
9
+
10
+ #define mqttTopicText " home/display1/text/set"
11
+
12
+ U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2 (U8G2_R0, /* cs=*/ 15 , /* dc=*/ 4 , /* reset=*/ 5 );
13
+ const int CHIP_ID = ESP.getChipId();
14
+ WiFiClient wifiClient;
15
+ PubSubClient mqttClient (wifiClient);
16
+
17
+ void drawModeNormal (int tempInside, int tempOutside, const char *time, const char *data, int contrast)
18
+ {
19
+ u8g2.firstPage ();
20
+ u8g2.setContrast (contrast);
21
+ do
22
+ {
23
+ u8g2.setFont (u8g2_font_logisoso34_tf);
24
+ u8g2.setCursor (0 , 34 );
25
+ u8g2.print (tempInside);
26
+ u8g2.setFont (u8g2_font_logisoso16_tf);
27
+ u8g2.print (" °C" );
28
+
29
+ u8g2.setFont (u8g2_font_logisoso34_tf);
30
+ u8g2.setCursor (69 , 34 );
31
+ u8g2.print (tempOutside);
32
+ u8g2.setFont (u8g2_font_logisoso16_tf);
33
+ u8g2.print (" °C" );
34
+
35
+ u8g2.setFont (u8g2_font_logisoso38_tf);
36
+ u8g2.setCursor (142 , 38 );
37
+ u8g2.print (time );
38
+
39
+ u8g2.drawLine (0 , 45 , 255 , 45 );
40
+
41
+ u8g2.setFont (u8g2_font_8x13_t_symbols);
42
+ u8g2.drawUTF8 (0 , 62 , data);
43
+ } while (u8g2.nextPage ());
44
+ }
45
+
46
+ void loop (void )
47
+ {
48
+ mqttClient.loop ();
49
+ }
50
+
51
+ void logT (const char *s)
52
+ {
53
+ Serial.println (s);
54
+ u8g2.firstPage ();
55
+ do
56
+ {
57
+ u8g2.setFont (u8g2_font_luRS10_te);
58
+ u8g2.setCursor (0 , 24 );
59
+ u8g2.print (s);
60
+ } while (u8g2.nextPage ());
61
+ }
62
+
63
+ void callback (char *topic, byte *payload, unsigned int length)
64
+ {
65
+ Serial.print (" Message arrived [" );
66
+ Serial.print (topic);
67
+ Serial.print (" ] " );
68
+ for (unsigned int i = 0 ; i < length; i++)
69
+ {
70
+ Serial.print ((char )payload[i]);
71
+ }
72
+ Serial.println ();
73
+ StaticJsonDocument<256 > doc;
74
+ deserializeJson (doc, payload, length);
75
+ const char *time = doc[" time" ];
76
+ const char *data = doc[" data" ];
77
+ int inside = doc[" inside" ];
78
+ int outside = doc[" outside" ];
79
+ int contrast = doc[" contrast" ];
80
+ bool disable = doc[" disabled" ];
81
+ if (!disable)
82
+ {
83
+ drawModeNormal (inside, outside, time , data, contrast);
84
+ }
85
+ else
86
+ {
87
+ u8g2.firstPage ();
88
+ do
89
+ {
90
+ } while (u8g2.nextPage ());
91
+ }
92
+ }
93
+
94
+ void startWifi (void )
95
+ {
96
+ WiFi.begin (wifiAP, wifiPassword);
97
+ logT (" Wifi connecting ..." );
98
+ while (WiFi.status () != WL_CONNECTED)
99
+ {
100
+ delay (500 );
101
+ Serial.print (" ." );
102
+ }
103
+ logT (" Wifi connected" );
104
+ }
105
+
106
+ void startMqtt ()
107
+ {
108
+ mqttClient.setServer (mqtt_server, mqtt_port);
109
+ mqttClient.setCallback (callback);
110
+ while (!mqttClient.connected ())
111
+ {
112
+ String clientId = " iotdisplay-" ;
113
+ clientId += String (random (0xffff ), HEX);
114
+ Serial.printf (" MQTT connecting as client %s...\n " , clientId.c_str ());
115
+ if (mqttClient.connect (clientId.c_str ()))
116
+ {
117
+ logT (" MQTT connected" );
118
+ delay (1000 );
119
+ mqttClient.subscribe (mqttTopicText);
120
+ logT (" MQTT subscribed" );
121
+ }
122
+ else
123
+ {
124
+ Serial.println (" MQTT failed, retrying..." + mqttClient.state ());
125
+ // Wait before retrying
126
+ delay (2500 );
127
+ }
128
+ }
129
+ }
130
+
131
+ void setup (void )
132
+ {
133
+ Serial.begin (115200 );
134
+ Serial.println (CHIP_ID + " starting" );
135
+
136
+ u8g2.begin ();
137
+ u8g2.enableUTF8Print ();
138
+
139
+ startWifi ();
140
+ delay (1000 );
141
+ startMqtt ();
142
+ delay (1000 );
143
+ }
0 commit comments