Добрый день!
Делаю диммер на ESP-01 с подключением к Cayenne. Проблем с поключением к Cayenne нет, вижу информацию с микроконтроллера. Но почему-то не срабатывает прерывание по переходу через 0, и соответственно нет управления нагрузкой. Ниже схема и код. Есть сомнения в правильности указания номеров пинов ESP-01
Заранее спасибо за помощь!
Делаю диммер на ESP-01 с подключением к Cayenne. Проблем с поключением к Cayenne нет, вижу информацию с микроконтроллера. Но почему-то не срабатывает прерывание по переходу через 0, и соответственно нет управления нагрузкой. Ниже схема и код. Есть сомнения в правильности указания номеров пинов ESP-01
Код:
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial // Comment this out to disable prints and save space
#include <CayenneMQTTESP8266.h> // Include library file for MQTT
//#include <SimpleTimer.h>
#define TRIAC_PIN 2 //GPIO2
#define ZC_PIN 1 //GPIO1 - TXD
#define BUTTON_PIN 3 //GPIO3 - RXD
void ICACHE_RAM_ATTR zero_crosss_int();
char ssid[] = "ASUS"; // Your WIFI Name
char wifiPassword[] = "xxx"; // Your WIFI password
char username[] = "xxxx"; // Your MQTT cayenne username
char Password[] = "xxxx"; // Your MQTT cayenne Password
char clientID[] = "xxxx"; // Your MQTT cayenne clientID
//SimpleTimer timer;
int DIMMING_VALUES = 0;
int DIMMING_TIME = 0;
int BUTTON = 0;
volatile unsigned long countZeroCross = 0;
unsigned long lastMillis = 0;
/*
// This function sends Arduino's up time every second to Virtual Pin 5.
void sendUptime()
{
// Send values using the virtualWrite function. Cayenne currently accepts int and float values.
// Please don't send more that 10 values per second.
Cayenne.virtualWrite(V5, millis() / 1000);
}*/
//=====================Basic Setup ============================
void setup(){
Serial.begin(115200); // Setup Debug uart port if you want ?
pinMode(TRIAC_PIN, OUTPUT); // Set AC Load pin as output
digitalWrite(TRIAC_PIN, LOW);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(ZC_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ZC_PIN), zero_crosss_int, RISING); // Choose the zero cross interrupt egde selection
Cayenne.begin(username, Password, clientID, ssid, wifiPassword); // Setup cayenne server for MQTT protocol
// Настройте функцию, которая будет вызываться каждую секунду
// timer.setInterval(1000L, sendUptime);
}
void loop()
{
Cayenne.loop();
// timer.run(); // Инициализация SimpleTimer
if(millis() - lastMillis > 1000){
lastMillis = millis();
}
BUTTON = digitalRead(BUTTON_PIN);
}
void ICACHE_RAM_ATTR zero_crosss_int() //function to be fired at the zero crossing to dim the light
{
DIMMING_TIME = (75 * DIMMING_VALUES); // For 60Hz =>65
delayMicroseconds(DIMMING_TIME); // Wait till firing the TRIAC
digitalWrite(TRIAC_PIN, HIGH); // Fire the TRIAC
delayMicroseconds(10); // triac On propogation delay
// (for 60Hz use 8.33) Some Triacs need a longer period
digitalWrite(TRIAC_PIN, LOW); // No longer trigger the TRIAC (the next zero crossing will swith it off) TRIAC
countZeroCross += countZeroCross;
}
CAYENNE_OUT_DEFAULT()
{
// Write data to Cayenne here. This example just sends the current uptime in milliseconds on virtual channel 0.
Cayenne.virtualWrite(V0, millis());
Serial.println(millis());
Cayenne.virtualWrite(V5, BUTTON);
Serial.println(BUTTON);
Cayenne.virtualWrite(V6, countZeroCross);
Serial.println(countZeroCross);
// Some examples of other functions you can use to send data.
//Cayenne.celsiusWrite(1, 22.0);
//Cayenne.luxWrite(2, 700);
//Cayenne.virtualWrite(3, 50, TYPE_PROXIMITY, UNIT_CENTIMETER);
}
CAYENNE_IN(1)
{
int Dimm_Val=getValue.asInt();
DIMMING_VALUES = (120-Dimm_Val);
Serial.println(DIMMING_VALUES);
}
CAYENNE_IN(2)
{
digitalWrite(TRIAC_PIN, !getValue.asInt()); // to get the value from the website
}
//==================================================================