First backup. Part 1 works - it connects to wifi, the button cycles the button colors, MQTT is connected. No payload is sent yet.
This commit is contained in:
157
ESP_Medicine_Indicator/ESP_Medicine_Indicator.ino
Normal file
157
ESP_Medicine_Indicator/ESP_Medicine_Indicator.ino
Normal file
@ -0,0 +1,157 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#define NEO_PIN 14 // Pin for all the Neopixels
|
||||
#define SIG_PIX 2 // Number of temperature pixels
|
||||
#define BUTTON_FWD_PIN 4
|
||||
#define mqtt_topic "home/medicine"
|
||||
|
||||
const char* ssid = "Saints&Strangers_";
|
||||
const char* password = "xYhnac-5mixdu";
|
||||
const char* mqtt_server = "192.168.200.55";
|
||||
const char* mqtt_user = "hass";
|
||||
const char* mqtt_password = "Over9+look*";
|
||||
|
||||
boolean oldState = HIGH;
|
||||
int mode = 0; // Active mode on startup
|
||||
|
||||
WiFiClient espClient;
|
||||
PubSubClient client(espClient);
|
||||
long lastMsg = 0;
|
||||
char msg[50];
|
||||
float value = 0;
|
||||
|
||||
Adafruit_NeoPixel NeoJewel = Adafruit_NeoPixel(SIG_PIX, NEO_PIN, NEO_GRB + NEO_KHZ800);
|
||||
unsigned long delayTime;
|
||||
|
||||
// Taken Medicine Color
|
||||
uint32_t pineGreen = NeoJewel.Color(14, 170, 26);
|
||||
// Not Yet Taken Color
|
||||
uint32_t pureRed = NeoJewel.Color(255, 0, 0);
|
||||
// Warning Blink Color
|
||||
uint32_t yellow = NeoJewel.Color(255, 229, 0);
|
||||
|
||||
void setup() {
|
||||
delayTime = 1000;
|
||||
Serial.begin(9600);
|
||||
delay(500);
|
||||
|
||||
while (!Serial) {
|
||||
// wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
Serial.println("Attempting to connect to SSID: ");
|
||||
Serial.print(ssid);
|
||||
WiFi.begin(ssid, password);
|
||||
|
||||
// Attempt to connect to WiFi network:
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(1000);
|
||||
Serial.print(".");
|
||||
}
|
||||
|
||||
Serial.println("");
|
||||
Serial.println("WiFi connected");
|
||||
Serial.println("IP address: ");
|
||||
Serial.println(WiFi.localIP()); //You can get IP address assigned to ESP
|
||||
Serial.println("Mac Address: ");
|
||||
Serial.println(WiFi.macAddress());
|
||||
delay(100);
|
||||
client.setServer("192.168.200.55", 1883);
|
||||
WiFi.setAutoReconnect(true);
|
||||
WiFi.persistent(true);
|
||||
|
||||
// Necessary code for NeoPixel setup
|
||||
pinMode(BUTTON_FWD_PIN, INPUT_PULLUP);
|
||||
|
||||
//Initialization of the Jewel
|
||||
NeoJewel.setBrightness(100);
|
||||
NeoJewel.begin();
|
||||
NeoJewel.clear();
|
||||
NeoJewel.show();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
boolean newState = digitalRead(BUTTON_FWD_PIN);
|
||||
if((newState == LOW) && (oldState == HIGH)) {
|
||||
delay(30);
|
||||
newState = digitalRead(BUTTON_FWD_PIN);
|
||||
if(newState == LOW) {
|
||||
if(++mode > 4) mode = 0;
|
||||
switch(mode) {
|
||||
case 0:
|
||||
NeoJewel.clear();
|
||||
NeoJewel.fill(yellow, 0, 2);
|
||||
NeoJewel.show();
|
||||
break;
|
||||
case 1:
|
||||
// Nothing Taken
|
||||
NeoJewel.clear();
|
||||
NeoJewel.fill(pureRed, 0, 2);
|
||||
NeoJewel.show();
|
||||
break;
|
||||
case 2:
|
||||
// Morning Taken
|
||||
NeoJewel.clear();
|
||||
NeoJewel.fill(pineGreen, 0, 1);
|
||||
NeoJewel.fill(pureRed, 1, 2);
|
||||
NeoJewel.show();
|
||||
break;
|
||||
case 3:
|
||||
// Afternoon Taken
|
||||
NeoJewel.clear();
|
||||
NeoJewel.fill(pineGreen, 1, 2);
|
||||
NeoJewel.fill(pureRed, 0, 1);
|
||||
NeoJewel.show();
|
||||
break;
|
||||
case 4:
|
||||
// Both Taken
|
||||
NeoJewel.clear();
|
||||
NeoJewel.fill(pineGreen, 0, 2);
|
||||
NeoJewel.show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Set the last-read button state to the old state (reset)
|
||||
oldState = newState;
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
delay(1000);
|
||||
WiFi.disconnect();
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
delay(1000);
|
||||
if (!client.connected()) {
|
||||
reconnect();
|
||||
}
|
||||
client.loop();
|
||||
|
||||
/*long now = millis();
|
||||
if (now - lastMsg > 5000) {
|
||||
lastMsg = now;
|
||||
delay(3000);
|
||||
}*/
|
||||
}
|
||||
|
||||
void reconnect() {
|
||||
// Loop until we're reconnected
|
||||
while (!client.connected()) {
|
||||
Serial.println("Connecting to MQTT...");
|
||||
// Create a random client ID
|
||||
String clientId = "ESP8266Client-";
|
||||
clientId += String(random(0xffff), HEX);
|
||||
if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
|
||||
Serial.println("connected");
|
||||
} else {
|
||||
Serial.println("failed with state ");
|
||||
Serial.print(client.state());
|
||||
delay(2000);
|
||||
ESP.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user