Add files via upload

This commit is contained in:
thehookup
2019-04-09 21:30:23 -04:00
committed by GitHub
parent 7f0540c2e6
commit 1d067d36ed
7 changed files with 252 additions and 0 deletions

BIN
BlindsAdapter4mmSquare.stl Normal file

Binary file not shown.

BIN
BlindsAdapter5mmHex.stl Normal file

Binary file not shown.

BIN
BlindsAdapter5mmSquare.stl Normal file

Binary file not shown.

BIN
BlindsAdapter6mmHex.stl Normal file

Binary file not shown.

BIN
BlindsBase.stl Normal file

Binary file not shown.

252
Blinds_CONFIGURE.ino Normal file
View File

@@ -0,0 +1,252 @@
#include <SimpleTimer.h> //https://github.com/marcelloromani/Arduino-SimpleTimer/tree/master/SimpleTimer
#include <ESP8266WiFi.h> //if you get an error here you need to install the ESP8266 board manager
#include <ESP8266mDNS.h> //if you get an error here you need to install the ESP8266 board manager
#include <PubSubClient.h> //https://github.com/knolleary/pubsubclient
#include <ArduinoOTA.h> //https://github.com/esp8266/Arduino/tree/master/libraries/ArduinoOTA
#include <AH_EasyDriver.h> //http://www.alhin.de/arduino/downloads/AH_EasyDriver_20120512.zip
/***************** START USER CONFIG SECTION *********************************/
/***************** START USER CONFIG SECTION *********************************/
/***************** START USER CONFIG SECTION *********************************/
/***************** START USER CONFIG SECTION *********************************/
#define USER_SSID "YOUR_SSID"
#define USER_PASSWORD "YOUR_WIFI_PASSWORD"
#define USER_MQTT_SERVER "YOUR_MQTT_SERVER_ADDRESS"
#define USER_MQTT_PORT 1883
#define USER_MQTT_USERNAME "YOUR_MQTT_USER_NAME"
#define USER_MQTT_PASSWORD "YOUR_MQTT_PASSWORD"
#define USER_MQTT_CLIENT_NAME "BlindsMCU" // Used to define MQTT topics, MQTT Client ID, and ArduinoOTA
#define STEPPER_SPEED 35 //Defines the speed in RPM for your stepper motor
#define STEPPER_STEPS_PER_REV 1028 //Defines the number of pulses that is required for the stepper to rotate 360 degrees
#define STEPPER_MICROSTEPPING 0 //Defines microstepping 0 = no microstepping, 1 = 1/2 stepping, 2 = 1/4 stepping
#define DRIVER_INVERTED_SLEEP 1 //Defines sleep while pin high. If your motor will not rotate freely when on boot, comment this line out.
#define STEPS_TO_CLOSE 12 //Defines the number of steps needed to open or close fully
#define STEPPER_DIR_PIN D6
#define STEPPER_STEP_PIN D7
#define STEPPER_SLEEP_PIN D5
#define STEPPER_MICROSTEP_1_PIN 14
#define STEPPER_MICROSTEP_2_PIN 12
/***************** END USER CONFIG SECTION *********************************/
/***************** END USER CONFIG SECTION *********************************/
/***************** END USER CONFIG SECTION *********************************/
/***************** END USER CONFIG SECTION *********************************/
/***************** END USER CONFIG SECTION *********************************/
WiFiClient espClient;
PubSubClient client(espClient);
SimpleTimer timer;
AH_EasyDriver shadeStepper(STEPPER_STEPS_PER_REV, STEPPER_DIR_PIN ,STEPPER_STEP_PIN,STEPPER_MICROSTEP_1_PIN,STEPPER_MICROSTEP_2_PIN,STEPPER_SLEEP_PIN);
//Global Variables
bool boot = true;
int currentPosition = 0;
int newPosition = 0;
char positionPublish[50];
bool moving = false;
char charPayload[50];
const char* ssid = USER_SSID ;
const char* password = USER_PASSWORD ;
const char* mqtt_server = USER_MQTT_SERVER ;
const int mqtt_port = USER_MQTT_PORT ;
const char *mqtt_user = USER_MQTT_USERNAME ;
const char *mqtt_pass = USER_MQTT_PASSWORD ;
const char *mqtt_client_name = USER_MQTT_CLIENT_NAME ;
//Functions
void setup_wifi() {
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect()
{
int retries = 0;
while (!client.connected()) {
if(retries < 150)
{
Serial.print("Attempting MQTT connection...");
if (client.connect(mqtt_client_name, mqtt_user, mqtt_pass))
{
Serial.println("connected");
if(boot == false)
{
client.publish(USER_MQTT_CLIENT_NAME"/checkIn","Reconnected");
}
if(boot == true)
{
client.publish(USER_MQTT_CLIENT_NAME"/checkIn","Rebooted");
}
// ... and resubscribe
client.subscribe(USER_MQTT_CLIENT_NAME"/blindsCommand");
client.subscribe(USER_MQTT_CLIENT_NAME"/positionCommand");
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
retries++;
// Wait 5 seconds before retrying
delay(5000);
}
}
if(retries > 149)
{
ESP.restart();
}
}
}
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Message arrived [");
String newTopic = topic;
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
String newPayload = String((char *)payload);
int intPayload = newPayload.toInt();
Serial.println(newPayload);
Serial.println();
newPayload.toCharArray(charPayload, newPayload.length() + 1);
if (newTopic == USER_MQTT_CLIENT_NAME"/blindsCommand")
{
if (newPayload == "OPEN")
{
client.publish(USER_MQTT_CLIENT_NAME"/positionCommand", "0", true);
}
else if (newPayload == "CLOSE")
{
int stepsToClose = STEPS_TO_CLOSE;
String temp_str = String(stepsToClose);
temp_str.toCharArray(charPayload, temp_str.length() + 1);
client.publish(USER_MQTT_CLIENT_NAME"/positionCommand", charPayload, true);
}
else if (newPayload == "STOP")
{
String temp_str = String(currentPosition);
temp_str.toCharArray(positionPublish, temp_str.length() + 1);
client.publish(USER_MQTT_CLIENT_NAME"/positionCommand", positionPublish, true);
}
}
if (newTopic == USER_MQTT_CLIENT_NAME"/positionCommand")
{
if(boot == true)
{
newPosition = intPayload;
currentPosition = intPayload;
boot = false;
}
if(boot == false)
{
newPosition = intPayload;
}
}
}
void processStepper()
{
if (newPosition > currentPosition)
{
#if DRIVER_INVERTED_SLEEP == 1
shadeStepper.sleepON();
#endif
#if DRIVER_INVERTED_SLEEP == 0
shadeStepper.sleepOFF();
#endif
shadeStepper.move(80, FORWARD);
currentPosition++;
moving = true;
}
if (newPosition < currentPosition)
{
#if DRIVER_INVERTED_SLEEP == 1
shadeStepper.sleepON();
#endif
#if DRIVER_INVERTED_SLEEP == 0
shadeStepper.sleepOFF();
#endif
shadeStepper.move(80, BACKWARD);
currentPosition--;
moving = true;
}
if (newPosition == currentPosition && moving == true)
{
#if DRIVER_INVERTED_SLEEP == 1
shadeStepper.sleepOFF();
#endif
#if DRIVER_INVERTED_SLEEP == 0
shadeStepper.sleepON();
#endif
String temp_str = String(currentPosition);
temp_str.toCharArray(positionPublish, temp_str.length() + 1);
client.publish(USER_MQTT_CLIENT_NAME"/positionState", positionPublish);
moving = false;
}
Serial.println(currentPosition);
Serial.println(newPosition);
}
void checkIn()
{
client.publish(USER_MQTT_CLIENT_NAME"/checkIn","OK");
}
//Run once setup
void setup() {
Serial.begin(115200);
shadeStepper.setMicrostepping(STEPPER_MICROSTEPPING); // 0 -> Full Step
shadeStepper.setSpeedRPM(STEPPER_SPEED); // set speed in RPM, rotations per minute
#if DRIVER_INVERTED_SLEEP == 1
shadeStepper.sleepOFF();
#endif
#if DRIVER_INVERTED_SLEEP == 0
shadeStepper.sleepON();
#endif
WiFi.mode(WIFI_STA);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
ArduinoOTA.setHostname(USER_MQTT_CLIENT_NAME);
ArduinoOTA.begin();
delay(10);
timer.setInterval(((1 << STEPPER_MICROSTEPPING)*5800)/STEPPER_SPEED, processStepper);
timer.setInterval(90000, checkIn);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
ArduinoOTA.handle();
timer.run();
}

BIN
Schematic.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 KiB