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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5371|回复: 13

[分享] blinker双色温吸顶灯示例

[复制链接]
发表于 2020-1-1 16:31 | 显示全部楼层 |阅读模式
这个示例是专属设备的演示,如果要了解专属设备开发,可见以下文档:
https://diandeng.tech/doc/prodevice

light1.jpg

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

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


这个程序依据Blinker_PRO_Wlan_Config.ino修改,其中 changeLight函数 需根据你设备实际情况进行编写。
[mw_shl_code=arduino,true]
#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();
}
[/mw_shl_code]







发表于 2020-1-2 22:17 | 显示全部楼层
官网还没有2.2.9版本。

点评

blinker QQ群下载  详情 回复 发表于 2020-1-2 23:47
 楼主| 发表于 2020-1-2 23:47 | 显示全部楼层
sting2k1 发表于 2020-1-2 22:17
官网还没有2.2.9版本。

blinker QQ群下载
发表于 2021-3-23 17:46 | 显示全部楼层
独立设备的密钥是否可以使用?用你的密钥是否可以测试用?

点评

可以测试  详情 回复 发表于 2021-3-23 18:21
 楼主| 发表于 2021-3-23 18:21 | 显示全部楼层
Guofuqiang01 发表于 2021-3-23 17:46
独立设备的密钥是否可以使用?用你的密钥是否可以测试用?

可以测试
发表于 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);
}

点评

这个程序自带了key,可以直接使用,专业版可以自己创建key  详情 回复 发表于 2021-3-24 19:31
 楼主| 发表于 2021-3-24 19:31 | 显示全部楼层
Guofuqiang01 发表于 2021-3-24 13:17
疑问:是否购买专业版本之后使用专业key就可以用这个程序?
在楼主的程序里面添加以下程序实现双色温控制。 ...

这个程序自带了key,可以直接使用,专业版可以自己创建key
发表于 2021-3-31 16:56 | 显示全部楼层
奈何col 发表于 2021-3-24 19:31
这个程序自带了key,可以直接使用,专业版可以自己创建key

请问一下,目前app是否支持锁定滑块功能?就类似于双色温灯里面,如果灯处于关闭状态的时候,静止滑动滑块。目前这个程序,我写完之后,关闭灯的时候,滑块也可以滑动,但是再次开启灯,灯的参数还是关灯时候的参数。想实现button在某种状态下锁定滑块,并赋予滑块指定颜色。如果可以加入文字反馈提示button在什么状态,无法使用滑块更好。
发表于 2021-11-22 14:41 | 显示全部楼层
楼主,请问一下为什么配不了网blinker app提示没有找到设备
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:31 , Processed in 0.086243 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表