Compare commits
	
		
			2 Commits
		
	
	
		
			main
			...
			c78fde5d9f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c78fde5d9f | |||
| 34bd9746d1 | 
| @@ -13,10 +13,11 @@ platform = espressif8266 | |||||||
| framework = arduino | framework = arduino | ||||||
| monitor_speed = 115200 | monitor_speed = 115200 | ||||||
| upload_speed = 500000 | upload_speed = 500000 | ||||||
|  | upload_protocol = espota | ||||||
|  | upload_port = led-marquee-sign.fablab.local | ||||||
|  |  | ||||||
| # Serial1 (sign data) maps to D4 by default | # Serial1 (sign data) maps to D4 by default | ||||||
| [env:d1_mini] | [env:d1_mini] | ||||||
| board = d1_mini | board = d1_mini | ||||||
|  | lib_deps = adafruit/Adafruit MQTT Library@^2.5.8 | ||||||
| [env:nodemcuv2] | lib_ignore = WiFi101 | ||||||
| board = nodemcuv2 |  | ||||||
|   | |||||||
| @@ -5,4 +5,9 @@ namespace credentials { | |||||||
|     const String psk = "my PSK"; |     const String psk = "my PSK"; | ||||||
|  |  | ||||||
|     const String mdnsHostname = "led-marquee-sign"; |     const String mdnsHostname = "led-marquee-sign"; | ||||||
|  |  | ||||||
|  |     const String mqtt_hostname = "mqtt-broker"; | ||||||
|  |     const uint16_t mqtt_port = 1883; | ||||||
|  |     const String mqtt_username = "user"; | ||||||
|  |     const String mqtt_password = "pass"; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										65
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -1,6 +1,11 @@ | |||||||
|  | #include <ESP8266WiFi.h> | ||||||
| #include <ESP8266WiFiMulti.h> | #include <ESP8266WiFiMulti.h> | ||||||
| #include <ESP8266mDNS.h> | #include <ESP8266mDNS.h> | ||||||
| #include <ESP8266WebServer.h> | #include <ESP8266WebServer.h> | ||||||
|  | #include <WiFiUdp.h> | ||||||
|  | #include <ArduinoOTA.h> | ||||||
|  | #include "Adafruit_MQTT.h" | ||||||
|  | #include "Adafruit_MQTT_Client.h" | ||||||
|  |  | ||||||
| #include "credentials.h" | #include "credentials.h" | ||||||
| #include "webserver.h" | #include "webserver.h" | ||||||
| @@ -10,6 +15,16 @@ | |||||||
| static ESP8266WiFiMulti wifiMulti; | static ESP8266WiFiMulti wifiMulti; | ||||||
| static SocketServer socketServer; | static SocketServer socketServer; | ||||||
|  |  | ||||||
|  | #define AIO_SERVER      credentials::mqtt_hostname.c_str() | ||||||
|  | #define AIO_SERVERPORT  credentials::mqtt_port | ||||||
|  | #define AIO_USERNAME    credentials::mqtt_username.c_str() | ||||||
|  | #define AIO_KEY         credentials::mqtt_password.c_str() | ||||||
|  | WiFiClient client; | ||||||
|  | Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); | ||||||
|  | Adafruit_MQTT_Subscribe mqtt_subscribe_topic = Adafruit_MQTT_Subscribe(&mqtt, "homeassistant/marquee_sign/text"); | ||||||
|  |  | ||||||
|  | void MQTT_connect(); | ||||||
|  |  | ||||||
| void setup() { | void setup() { | ||||||
|     // serial console, for use via USB (also exposed to TXD0/RXD0 GPIOs) |     // serial console, for use via USB (also exposed to TXD0/RXD0 GPIOs) | ||||||
|     Serial.begin(115200); |     Serial.begin(115200); | ||||||
| @@ -20,7 +35,10 @@ void setup() { | |||||||
|     Serial1.begin(9600); |     Serial1.begin(9600); | ||||||
|  |  | ||||||
|     // configure WiFi and connect to the network |     // configure WiFi and connect to the network | ||||||
|  |     WiFi.mode(WIFI_STA); | ||||||
|  |     WiFi.hostname(credentials::mdnsHostname); | ||||||
|     wifiMulti.addAP(credentials::ssid.c_str(), credentials::psk.c_str()); |     wifiMulti.addAP(credentials::ssid.c_str(), credentials::psk.c_str()); | ||||||
|  |  | ||||||
|     Serial.println("Connecting to Wi-Fi network..."); |     Serial.println("Connecting to Wi-Fi network..."); | ||||||
|     while (wifiMulti.run() != WL_CONNECTED) { |     while (wifiMulti.run() != WL_CONNECTED) { | ||||||
|         delay(1000); |         delay(1000); | ||||||
| @@ -32,16 +50,13 @@ void setup() { | |||||||
|     Serial.print(", IP address: "); |     Serial.print(", IP address: "); | ||||||
|     Serial.println(WiFi.localIP()); |     Serial.println(WiFi.localIP()); | ||||||
|  |  | ||||||
|  |     ArduinoOTA.begin(); | ||||||
|  |  | ||||||
|  |     mqtt.subscribe(&mqtt_subscribe_topic); | ||||||
|  |  | ||||||
|     // might be handy to have the IP written on the sign |     // might be handy to have the IP written on the sign | ||||||
|     sendTextToSign(WiFi.localIP().toString()); |     sendTextToSign(WiFi.localIP().toString()); | ||||||
|  |  | ||||||
|     // publish this service using mDNS so that it's easy to find it in the LAN |  | ||||||
|     if (MDNS.begin(credentials::mdnsHostname)) { |  | ||||||
|         Serial.println("mDNS started up successfully"); |  | ||||||
|     } else { |  | ||||||
|         Serial.println("Error: failed to start mDNS"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // configure HTTP endpoints |     // configure HTTP endpoints | ||||||
|     configureWebServer(); |     configureWebServer(); | ||||||
|  |  | ||||||
| @@ -53,4 +68,40 @@ void setup() { | |||||||
| void loop() { | void loop() { | ||||||
|     webServer.handleClient(); |     webServer.handleClient(); | ||||||
|     socketServer.handleClient(); |     socketServer.handleClient(); | ||||||
|  |  | ||||||
|  |     ArduinoOTA.handle(); | ||||||
|  |  | ||||||
|  |     MQTT_connect(); | ||||||
|  |  | ||||||
|  |     Adafruit_MQTT_Subscribe *subscription; | ||||||
|  |     while ((subscription = mqtt.readSubscription(5000))) { | ||||||
|  |         const char* signText = (char *)mqtt_subscribe_topic.lastread; | ||||||
|  |  | ||||||
|  |         sendTextToSign(signText); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void MQTT_connect() { | ||||||
|  |     int8_t ret; | ||||||
|  |  | ||||||
|  |     // Stop if already connected. | ||||||
|  |     if (mqtt.connected()) { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     uint8_t retries = 6; | ||||||
|  |     while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected | ||||||
|  |         mqtt.disconnect(); | ||||||
|  |  | ||||||
|  |         // wait 10s till next try | ||||||
|  |         for (int i = 0; i < 10000; i += 5) { | ||||||
|  |             ArduinoOTA.handle(); | ||||||
|  |             delay(5); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         retries--; | ||||||
|  |         if (retries == 0) { | ||||||
|  |             ESP.restart(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user