Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***************************************************
- Adafruit MQTT Library ESP8266 Example
- Must use ESP8266 Arduino from:
- https://github.com/esp8266/Arduino
- Works great with Adafruit's Huzzah ESP board & Feather
- ----> https://www.adafruit.com/product/2471
- ----> https://www.adafruit.com/products/2821
- Adafruit invests time and resources providing this open source code,
- please support Adafruit and open-source hardware by purchasing
- products from Adafruit!
- Written by Tony DiCola for Adafruit Industries.
- MIT license, all text above must be included in any redistribution
- ****************************************************/
- #include <ESP8266WiFi.h>
- #include "Adafruit_MQTT.h"
- #include "Adafruit_MQTT_Client.h"
- #include "LedControl.h"
- /************************* WiFi Access Point *********************************/
- #define WLAN_SSID "ssid"
- #define WLAN_PASS "pass"
- /************************* Adafruit.io Setup *********************************/
- #define AIO_SERVER "broker ip"
- #define AIO_SERVERPORT 1883 // use 8883 for SSL
- #define AIO_USERNAME "user"
- #define AIO_KEY "pass"
- /************ Global State (you don't need to change this!) ******************/
- // Create an ESP8266 WiFiClient class to connect to the MQTT server.
- WiFiClient client;
- // or... use WiFiFlientSecure for SSL
- //WiFiClientSecure client;
- LedControl lc = LedControl(13, 14, 2, 1);
- // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
- Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
- /****************************** Feeds ***************************************/
- // Setup a feed called 'onoff' for subscribing to changes.
- Adafruit_MQTT_Subscribe subscribers = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/subscriber/count");
- /*************************** Sketch Code ************************************/
- // Bug workaround for Arduino 1.6.6, it seems to need a function declaration
- // for some reason (only affects ESP8266, likely an arduino-builder bug).
- void MQTT_connect();
- void setup() {
- Serial.begin(115200);
- delay(10);
- Serial.println(F("Adafruit MQTT demo"));
- // Connect to WiFi access point.
- Serial.println(); Serial.println();
- Serial.print("Connecting to ");
- Serial.println(WLAN_SSID);
- WiFi.begin(WLAN_SSID, WLAN_PASS);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.println("WiFi connected");
- Serial.println("IP address: "); Serial.println(WiFi.localIP());
- // Setup MQTT subscription for onoff feed.
- mqtt.subscribe(&subscribers);
- lc.shutdown(0,false);
- /* Set the brightness to a medium values */
- lc.setIntensity(0,6);
- /* and clear the display */
- lc.clearDisplay(0);
- }
- uint32_t x=0;
- int num0 = 0;
- int num1 = 0;
- int num2 = 0;
- int num3 = 0;
- int num4 = 0;
- int num5 = 0;
- int num6 = 0;
- int num7 = 0;
- int num8 = 0;
- void loop() {
- // Ensure the connection to the MQTT server is alive (this will make the first
- // connection and automatically reconnect when disconnected). See the MQTT_connect
- // function definition further below.
- MQTT_connect();
- // this is our 'wait for incoming subscription packets' busy subloop
- // try to spend your time here
- Adafruit_MQTT_Subscribe *subscription;
- while ((subscription = mqtt.readSubscription(5000))) {
- if (subscription == &subscribers) {
- Serial.print(F("Got: "));
- Serial.println((char *)subscribers.lastread);
- uint16_t number = atoi((char *)subscribers.lastread);
- num1 = (number / 1) % 10;
- lc.setDigit(0, 0, num1, false);
- num2 = (number / 10) % 10;
- if (number > 9) {lc.setDigit(0, 1, num2, false);}
- num3 = (number / 100) % 10;
- if (number > 99) {lc.setDigit(0, 2, num3, false);}
- num4 = (number / 1000) % 10;
- if (number > 999) {lc.setDigit(0, 3, num4, false);}
- num5 = (number / 10000) % 10;
- if (number > 9999) {lc.setDigit(0, 4, num5, false);}
- num6 = (number / 100000) % 10;
- if (number > 99999) {lc.setDigit(0, 5, num6, false);}
- num7 = (number / 1000000) % 10;
- if (number > 999999) {lc.setDigit(0, 6, num7, false);}
- num8 = (number / 10000000) % 10;
- if (number > 9999999) {lc.setDigit(0, 7, num8, false);}
- }
- }
- // ping the server to keep the mqtt connection alive
- // NOT required if you are publishing once every KEEPALIVE seconds
- /*
- if(! mqtt.ping()) {
- mqtt.disconnect();
- }
- */
- }
- // Function to connect and reconnect as necessary to the MQTT server.
- // Should be called in the loop function and it will take care if connecting.
- void MQTT_connect() {
- int8_t ret;
- // Stop if already connected.
- if (mqtt.connected()) {
- return;
- }
- Serial.print("Connecting to MQTT... ");
- uint8_t retries = 3;
- while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
- Serial.println(mqtt.connectErrorString(ret));
- Serial.println("Retrying MQTT connection in 5 seconds...");
- mqtt.disconnect();
- delay(5000); // wait 5 seconds
- retries--;
- if (retries == 0) {
- // basically die and wait for WDT to reset me
- while (1);
- }
- }
- Serial.println("MQTT Connected!");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement