Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Adafruit_NeoPixel.h>
#define LEDPIN D4
#define NUMBER_PIXELS 1
Adafruit_NeoPixel led = Adafruit_NeoPixel(NUMBER_PIXELS, LEDPIN, NEO_RGB + NEO_KHZ800);
// Wifi Credentials
const char* ssid = "WeWork";
const char* password = "p@ssw0rd";
const char* mqtt_server = "mqtt.beebotte.com";
// For Beebotte, the MQTT token must be your "secret token", not the channel token
const char* mqtt_token = "abc123";
// For Beebotte, this should be "channel/resource"
const char* mqtt_resource="ESP8266/led";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void onMessage(char* topic, byte* payload, unsigned int length) {
// decode the JSON payload
StaticJsonBuffer<128> jsonInBuffer;
JsonObject& root = jsonInBuffer.parseObject(payload);
// Test if parsing succeeds.
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
uint8_t red = root["red"];
uint8_t green = root["green"];
uint8_t blue = root["blue"];
// Print the received value to serial monitor for debugging
Serial.println();
Serial.println("------------------------------------");
Serial.print("Received new message of length ");
Serial.print(length);
Serial.println();
Serial.println("Raw message: ");
root.prettyPrintTo(Serial);
Serial.println();
Serial.print("Red: ");
Serial.print(red);
Serial.print(" Green: ");
Serial.print(green);
Serial.print(" Blue: ");
Serial.println(blue);
Serial.println("------------------------------------");
Serial.println();
led.setPixelColor(NUMBER_PIXELS-1, red, green, blue);
led.show();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str(),mqtt_token,"")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish(mqtt_resource, "hello world");
// ... and resubscribe
client.subscribe(mqtt_resource);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
// Turn off builtin led
digitalWrite(LED_BUILTIN, LOW);
// Initialize Neopixel
led.begin();
led.setPixelColor(NUMBER_PIXELS-1, 0, 0, 0);
led.show();
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(onMessage);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// long now = millis();
// if (now - lastMsg > 2000) {
// lastMsg = now;
// ++value;
// snprintf (msg, 75, "hello world #%ld", value);
// Serial.print("Publish message: ");
// Serial.println(msg);
// client.publish("ESP8266/led", msg);
// }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment