ESP8266制作天气预报海藻球微景观生态缸记录(六)-网页控制灯光颜色准备

下一步,准备用网页滑块去控制不同天气下的颜色显示并保存进EEPROM,以达到自定义颜色的目的。

天气代码有二十多种,每种都有红绿蓝三个数值,因此要存进EEPROM的东西非常杂乱。

身为强迫症,这种情况是不允许的。

于是把每种天气的红绿蓝三数值整合到一个JSON串中,无论是网页交互还是保存进EEPROM都是JSON串,需要用到的时候解析即可,一下子整洁了不少。

大致的代码如下:

uint32_t color;//颜色
int tianqi = 0;//天气代码。
String rgbJsonQing = "{\"r\":255,\"g\":255,\"b\":150}";
String rgbJsonDuoyun = "{\"r\":255,\"g\":255,\"b\":225}";
String rgbJsonYin = "{\"r\":0,\"g\":221,\"b\":255}";
String rgbJsonZhenyu = "{\"r\":0,\"g\":186,\"b\":255}";
String rgbJsonLeiZhenYu = "{\"r\":255,\"g\":242,\"b\":0}";
String rgbJsonBingBao = "{\"r\":255,\"g\":242,\"b\":0}";
String rgbJsonXiaoYu = "{\"r\":0,\"g\":175,\"b\":255}";
String rgbJsonZhongYu = "{\"r\":0,\"g\":135,\"b\":255}";
String rgbJsonDaYu = "{\"r\":48,\"g\":0,\"b\":255}";
String rgbJsonBaoYu = "{\"r\":211,\"g\":0,\"b\":255}";
String rgbJsonDaBaoYu = "{\"r\":255,\"g\":0,\"b\":201}";
String rgbJsonTeDaBaoYu = "{\"r\":255,\"g\":0,\"b\":160}";
String rgbJsonDongYu = "{\"r\":255,\"g\":242,\"b\":0}";
String rgbJsonYuJiaXue = "{\"r\":255,\"g\":242,\"b\":0}";
String rgbJsonXiaoXue = "{\"r\":0,\"g\":175,\"b\":255}";
String rgbJsonZhongXue = "{\"r\":48,\"g\":0,\"b\":255}";
String rgbJsonDaXue = "{\"r\":255,\"g\":0,\"b\":201}";
String rgbJsonBaoXue = "{\"r\":255,\"g\":0,\"b\":160}";
String rgbJsonFuChen = "{\"r\":255,\"g\":191,\"b\":0}";
String rgbJsonShaChenBao = "{\"r\":255,\"g\":124,\"b\":0}";
String rgbJsonWuMai = "{\"r\":255,\"g\":68,\"b\":0}";
String rgbJsonTaiFeng = "{\"r\":255,\"g\":0,\"b\":0}";
void loop() {
//不同天气,赋值不同颜色。这里可以自己任意修改。
  if (tianqi == 0 || tianqi == 1 || tianqi == 2 || tianqi == 3) //晴
  {
    formatRGBFromJson(rgbJsonQing);
  }
  else if (tianqi == 4 || tianqi == 5 || tianqi == 6 || tianqi == 7 || tianqi == 8) //多云
  {
    formatRGBFromJson(rgbJsonDuoyun);
  }
  else if (tianqi == 9) //阴
  {
    formatRGBFromJson(rgbJsonYin);
  }
  else if (tianqi == 10) //阵雨
  {
    formatRGBFromJson(rgbJsonZhenyu);
  }
  else if (tianqi == 11) //雷阵雨
  {
    formatRGBFromJson(rgbJsonLeiZhenYu);
  }
  else if (tianqi == 12) //冰雹
  {
    formatRGBFromJson(rgbJsonBingBao);
  }
  else if (tianqi == 19) //冻雨
  {
    formatRGBFromJson(rgbJsonDongYu);
  }
  else if (tianqi == 20) //雨夹雪
  {
    formatRGBFromJson(rgbJsonYuJiaXue);
  }
  else if (tianqi == 13) //小雨
  {
   formatRGBFromJson(rgbJsonXiaoYu);
  }
   else if (tianqi == 22) //小雪
  {
   formatRGBFromJson(rgbJsonXiaoXue);
  }
  else if (tianqi == 14) //中雨
  {
    formatRGBFromJson(rgbJsonZhongYu);
  }
  else if (tianqi == 15) //大雨
  {
    formatRGBFromJson(rgbJsonDaYu);
  }
  else if (tianqi == 23) //中雪
  {
    formatRGBFromJson(rgbJsonZhongXue);
  }
  else if (tianqi == 16) //暴雨
  {
    formatRGBFromJson(rgbJsonDaYu);
  }
  else if (tianqi == 17 ) //大暴雨
  {
    formatRGBFromJson(rgbJsonBaoYu);
  }
  else if (tianqi == 24) //大雪
  {
    formatRGBFromJson(rgbJsonDaXue);
  }
  else if (tianqi == 18) //特大暴雨
  {
    formatRGBFromJson(rgbJsonTeDaBaoYu);
  }
  else if (tianqi == 25) //暴雪
  {
    formatRGBFromJson(rgbJsonBaoXue);
  }
  else if (tianqi == 26 || tianqi == 27) //浮尘,扬沙
  {
    formatRGBFromJson(rgbJsonFuChen);
  }
  else if (tianqi == 28 || tianqi == 29) //沙尘暴,强沙尘暴
  {
    formatRGBFromJson(rgbJsonShaChenBao);
  }
  else if (tianqi == 30 || tianqi == 31) //雾,霾
  {
    formatRGBFromJson(rgbJsonWuMai);
  }
  else if (tianqi == 32 || tianqi == 33 || tianqi == 34 || tianqi == 35 || tianqi == 36) //风,大风,飓风,热带风暴,龙卷风
  {
    formatRGBFromJson(rgbJsonTaiFeng);
  }
  else
  {
    formatRGBFromJson(rgbJsonQing);
  }
  for (i = 0; i < 9; i++)
  {
    strip.setPixelColor(i, color);
  }
  strip.show();//更新彩灯状态
}
//解析JSON串,根据不同天气代码,将color赋值为不同颜色。
void formatRGBFromJson(String json)
{
  Serial.println(json);
  DynamicJsonDocument doc(100);//rgb字符串长度不会大于25,所以这里设定50即可
  DeserializationError error = deserializeJson(doc, json);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  JsonObject obj = doc.as<JsonObject>();
  color = strip.Color(obj["r"], obj["g"], obj["b"]);
}

代码中的tianqi变量,是通过解析心知天气的JSON串得来的,获得方法参照

ESP8266制作天气预报海藻球微景观生态缸记录(三)-更换原装灯为彩灯,实现根据未来天气变色

也可以下载完整的代码文件

ESP01S人体感应开关WS2812天气预报彩灯代码V1.0 icon-default.png?t=M276https://download.csdn.net/download/tansuo2005/83607705

其实这个生态缸灯早已可用,现在做的工作都是在为它增加设置功能。总不能要改个亮度和颜色都要重新编译下载吧。

这真是突出了ESP系列的一个巨大优点,那就是借用手机这个人手一只的物件就可以远程操作,而无需单独用显示屏和按键写复杂的UI控制(还只能本地操作)。就凭这一点,哪怕你的小制作不需要用到WiFi,也是该选用ESP系列的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩编程的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值