blinker双色温吸顶灯示例-Arduino中文社区 - Powered by Discuz! Archiver

奈何col 发表于 2020-1-1 16:31

blinker双色温吸顶灯示例

这个示例是专属设备的演示,如果要了解专属设备开发,可见以下文档:
https://diandeng.tech/doc/prodevice



其中提供了我自己的密钥,接入的设备会计算我账号的额度。
这只是个简要的示例程序,如若要用于产品,请自行优化。

测试方法:
0.确保您的blinker app为2.2.9或更高版本
1.给esp8266烧写本帖提供的示例程序
2.在app中进入添加设备页面,选择 点灯科技>双色温吸顶
3.确保设备在配网状态,然后进行配置,配置完成后,即可操作该设备


这个程序依据Blinker_PRO_Wlan_Config.ino修改,其中 changeLight函数 需根据你设备实际情况进行编写。

#define BLINKER_PRO_ESP
#define BLINKER_BUTTON
#define BLINKER_BUTTON_LONGPRESS_POWERDOWN
#if defined(ESP32)
#define BLINKER_BUTTON_PIN 4
#else
#define BLINKER_BUTTON_PIN D7
#endif

#define BLINKER_OTA_VERSION_CODE "0.1.1"

#include <Blinker.h>

char type[] = "EjtbFjnSLpL6";
char auth[] = "AU1ldFdhHy7z";


// 设备状态
String switchState = "on";
int modeState = 0;
int brightness = 0;
int colortemp = 0;

bool dataParse(const JsonObject & data)
{
String getData;

serializeJson(data, getData);
BLINKER_LOG("Get user command: ", getData);

modeState = data["set"]["mode"];
brightness = data["set"]["brt"];
colortemp = data["set"]["crt"];
changeMode();

// if you parsed this data, return TRUE.
// return true;
return true;
}

void changeMode() {
if (modeState == 0) {
    sunMode();
} else if (modeState == 1) {
    moonMode();
} else if (modeState == 2) {
    starMode();
}
changeLight();
feedbackData();
}

void sunMode() {
brightness = 255;
colortemp = 128;
}

void moonMode() {
brightness = 255;
colortemp = 0;
}

void starMode() {
brightness = 128;
colortemp = 0;
}

void changeLight(){
//根据brightness,colortemp两参数调整灯
}

void feedbackData(){
Blinker.print("mode", modeState);
Blinker.print("brt", brightness);
Blinker.print("crt", colortemp);
}

void heartbeat()
{
BUILTIN_SWITCH.print(switchState);
feedbackData();
}

#if defined(BLINKER_BUTTON)
ICACHE_RAM_ATTR void buttonTick()
{
Blinker.tick();
}

void singleClick()
{
BLINKER_LOG("Button clicked!");
}

void doubleClick()
{
BLINKER_LOG("Button double clicked!");
}

void longPressStart()
{
BLINKER_LOG("Button long press start!");
}

void duringLongPress()
{
// BLINKER_LOG("During button long press!");

uint16_t pressed_time = Blinker.pressedTime();

if (pressed_time >= 5000 && Blinker.configType() != BLINKER_AP_CONFIG)
{
    Blinker.apConfigInit();
}
}
#endif

void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
}

void switch_callback(const String & state)
{
if (state == BLINKER_CMD_ON) {
    digitalWrite(LED_BUILTIN, HIGH);
    switchState = "on";
}
else {
    digitalWrite(LED_BUILTIN, LOW);
    switchState = "off";
}
BUILTIN_SWITCH.print(switchState);
}

void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);

Blinker.begin(auth, type);
Blinker.apConfigInit();

Blinker.attachData(dataRead);
Blinker.attachParse(dataParse);
Blinker.attachHeartbeat(heartbeat);
BUILTIN_SWITCH.attach(switch_callback);

#if defined(BLINKER_BUTTON)
Blinker.attachClick(singleClick);
Blinker.attachDoubleClick(doubleClick);
Blinker.attachLongPressStart(longPressStart);
Blinker.attachDuringLongPress(duringLongPress);
attachInterrupt(BLINKER_BUTTON_PIN, buttonTick, CHANGE);
#endif
}

void loop()
{
Blinker.run();
}








sting2k1 发表于 2020-1-2 22:17

官网还没有2.2.9版本。

奈何col 发表于 2020-1-2 23:47

sting2k1 发表于 2020-1-2 22:17
官网还没有2.2.9版本。

blinker QQ群下载

Guofuqiang01 发表于 2021-3-23 17:46

独立设备的密钥是否可以使用?用你的密钥是否可以测试用?

奈何col 发表于 2021-3-23 18:21

Guofuqiang01 发表于 2021-3-23 17:46
独立设备的密钥是否可以使用?用你的密钥是否可以测试用?

可以测试

Guofuqiang01 发表于 2021-3-24 13:17

本帖最后由 Guofuqiang01 于 2021-3-25 09:27 编辑

疑问:是否购买专业版本之后使用专业key就可以用这个程序?
在楼主的程序里面添加以下程序实现双色温控制。
//第一段
//定义灯接口
#define ColdLED D2
#define WarmLED D3
//定义冷暖色灯输出值
int CVal,WVal;
//第二段在void changeLight(){}加入
void changeLight(){
//根据brightness,colortemp两参数调整灯
if(switchState=="on"){
    CVal =map(brightness*colortemp/255,0,(colortemp+1),0,1023);                     //亮度参数从0到设置色温映射到1023(ESP8266的模拟量输出默认Range为1023)
    WVal =map(brightness*(255-colortemp)/255,0,(256-colortemp),0,1023);       //映射的原始范围选用0~256,为了避免colortemp值为0和255的时候出错
    analogWrite(ColdLED,CVal);
    analogWrite(WarmLED,WVal);
}
else if(switchState=="off"){
    analogWrite(ColdLED,LOW);
    analogWrite(WarmLED,LOW);
    }
}
//第三段在void switch_callback(const String & state){}中加入
void switch_callback(const String & state)
{
if (state == BLINKER_CMD_ON) {
    digitalWrite(LED_BUILTIN, HIGH);
    analogWrite(ColdLED,CVal);
    analogWrite(WarmLED,WVal);
   
    switchState = "on";
}
else {
    digitalWrite(LED_BUILTIN, LOW);
    analogWrite(ColdLED,LOW);
    analogWrite(WarmLED,LOW);
    switchState = "off";
}
BUILTIN_SWITCH.print(switchState);
}

奈何col 发表于 2021-3-24 19:31

Guofuqiang01 发表于 2021-3-24 13:17
疑问:是否购买专业版本之后使用专业key就可以用这个程序?
在楼主的程序里面添加以下程序实现双色温控制。 ...

这个程序自带了key,可以直接使用,专业版可以自己创建key

Guofuqiang01 发表于 2021-3-31 16:56

奈何col 发表于 2021-3-24 19:31
这个程序自带了key,可以直接使用,专业版可以自己创建key

请问一下,目前app是否支持锁定滑块功能?就类似于双色温灯里面,如果灯处于关闭状态的时候,静止滑动滑块。目前这个程序,我写完之后,关闭灯的时候,滑块也可以滑动,但是再次开启灯,灯的参数还是关灯时候的参数。想实现button在某种状态下锁定滑块,并赋予滑块指定颜色。如果可以加入文字反馈提示button在什么状态,无法使用滑块更好。

Cp0204 发表于 2021-4-1 17:04

:) 学习学习

^AHA^ 发表于 2021-11-22 14:41

楼主,请问一下为什么配不了网blinker app提示没有找到设备
页: [1] 2
查看完整版本: blinker双色温吸顶灯示例