懒人福音——遥控台灯
【项目介绍】每天晚上躺床上玩手机,玩到后来想睡觉的时候经常很困,懒得伸手去关台灯,有时候就会忘记关灯。因此我想做一个可以用手机控制、远程关灯的智能台灯。
需求列表:
1.能够用手机控制关灯
2.可以定时关灯,以免忘记关灯
3.台灯亮度可以调整
【解决方案】
目前支持智能家居的很多台灯产品都能实现手机上控制灯的亮灭。如果自己做一个的话,最好独立手机 APP 或者用微信小程序之类的来控制。我想用 Blynk 平台做一个远程控制的应用,刚好现在 Mind+ 中有铁熊老师做的 Blynk 用户库,这样就方便多了。
因为要联网控制,所以需要一个物联网模块。而掌控板本来就支持无线网络,不用再单独配一个网络模块了。那就直接用掌控板来做主控,放弃 Micro:bit 方案。
哦对了,为了台灯效果好一些,我决定用灯带来做光源,不仅可以调节亮度,还可以更改颜色!
【作品演示】
https://v.qq.com/x/page/d0971ien8ok.html
材料清单
1x掌控板编程入门学习主控板链接
1xmicro:IO Extend micro:bit 掌控板 IO扩展板链接
1xWS2812 RGB 全彩灯带(7灯珠)链接
1xMicro USB数据线链接
下面就开始制作啦!
步骤1连接设备
设备连接很简单,只需要把灯带连接到扩展板的 P0 端口即可。需要注意的是,这款扩展板是掌控和 Micro:bit 两用的,所以插掌控板的时候需要反过来插。
连接好后的效果是这样的。
步骤2下载注册 Blynk
第一次使用 Blynk 需要下载手机 APP,安卓手机可以扫描下方二维码或者到http://www.eoemarket.com/soft/830895.html下载。苹果手机可以直接在 AppStore 搜索 Blynk 进行下载安装。
https://makelogimg.dfrobot.com.cn/FrlL0pp1G72oD-e6uGCY8Bzl8AI9?imageView2/2/w/1600
安装好以后打开 Blynk App,选择主界面右侧的“Create New Account”,新建一个账户。
点击“Sign Up”上方的按钮,更改注册的服务器地址。
将滑块开关拨到“CUSTOM”,在下方输入地址“116.62.49.166”。这个服务器是裘老师的,提供的能量值比官方多很多。
设置好服务器信息后即可输入邮箱账号和密码来注册一个账号了。
步骤3创建 Blynk 项目
注册了 Blynk 后登录,然后选择主界面上的“New Project”,创建一个新的项目。
输入项目名称“遥控台灯”,选择设备类型为“ESP32 Dev Board”,连接类型选择“Wi-Fi”。
创建好项目后,选择右上角的齿轮按钮,打开项目设置页面。
在项目设置页面下方有授权码发送选项,你可以选择发送到邮箱,或者直接复制授权码。这个授权码稍后编程的时候会用到。
回到项目页面,点击空白处或者右上角的“+”按钮,可以添加组件。我们需要添加“Styled Button”、“Slider”、“Timer”、“zeRGBa”各一个。
点击已添加的“Styled Button”,打开设置页面。修改名称为“开关”,将输出下方的“PIN”改为“Virtual”下的“V0”引脚,并将模式选为“SWITCH”。
同理修改计时器属性,修改名称为“定时开关”,将输出下方的“PIN”改为“Virtual”下的“V1”引脚。
接着修改滑块属性,修改名称为“亮度”,将输出下方的“PIN”改为“Virtual”下的“V2”引脚,并将范围改为0~255。
最后修改“zeRGBa”属性,修改名称为“颜色”,将输出的开关拨向“MERGE”,再把下方的“PIN”改为“Virtual”下的“V3”引脚。
所有组件设置好后调整各个组件的大小和位置,效果如下:
步骤4编写代码
一、引入扩展
打开 Mind+,选择模式为“上传模式”,通过“扩展”按钮,添加“掌控板”为主控板。
选择“显示器”分类下的“WS2812 RGB 灯”。
选择“用户库”,搜索“blynk”,选择“Blynk 物联网”用户库。
二、编写开关灯代码
首先创建“红”、“绿”、“蓝”三个数字变量,后面调节颜色需要用到。
接着开始编写程序启动时的代码。程序开始时要初始化灯带参数,然后连接 Wi-Fi,接着连接 Blynk 服务器。这里需要用到 Blynk 创建项目时获取的授权码。
当我们按下 Blynk 中“遥控台灯”项目中的开关时,会给虚拟引脚 V0 一个数据。这个开关按钮类似自锁开关,当第一次按下的时候 V0 引脚会保持高电平“1”,当再一次按下的时候会变成低电平“0”。所以我们可以通过读取 V0 引脚的读数来控制灯的亮灭。如果是“1”则点亮灯带,如果是“0”就熄灭灯带。
三、编写定时开关代码
定时开关的代码和开关的代码基本一致。定时开关会在开始时间打开开关,即由“0”变为“1”,结束时间将“1”变为“0”。这部分会自动实现,所以我们直接读取定时开关 V1 引脚的数据就好了。不同的地方是,我们需要向开关引脚 V0 传送一次数据。如果不发送数据的话,那么如果时间到了,我们把灯关了,但是手机界面上的开关还显示灯是亮的。我们需要通知开关,灯已经关掉了。这样手机上会同步显示开关灯状态了。
四、编写亮度调节代码
亮度调节代码很简单,当我们调整亮度的时候,V2 引脚的数据会发生变化。当 V2 引脚收到数据的时候,我们直接将灯带的亮度设置为当前值即可。需要注意的是,我们要再执行一次显示灯带,不然亮度不会发生改变。
但是我们实际运行的时候会发现,亮度滑块刚开始显示的值是 0,而实际上我们初始化中已经将亮度调为 100 了。所以我们需要将滑块的初始位置调到 100。然而 Blynk 中好像没有地方设置初始值。那我们就通过代码来实现。当硬件连接的时候,向 V2 引脚发送 100,这样开始的时候亮度就在 100 的位置了。
五、编写颜色调节代码
颜色调节的代码和亮度调节的代码类似。区别在于:zeRGBa 的 V3 引脚可以同时传送三个数据。我们需要将这个三个数据分别给“红”、“绿”、“蓝”三个变量,然后让灯带显示这个颜色。颜色调整后需要立即显示新的颜色,所以我们要执行一次显示灯带命令。
步骤5制作灯罩
一开始我在找盒子来做台灯的灯罩。后来一想,这样一点都不透光。所以我干脆直接用 A4 纸来叠一个灯罩吧。
将纸张沿着短边对折两次,然后将两侧按照图示折叠。这样就可以做出一个条形的灯罩了。
用双面胶将灯带贴到灯罩底部。
将掌控板塞到一个小盒子里,再把灯罩盖到盒子上。这样就做好了一个小台灯。
供电直接用充电宝就可以了!
代码
/*!
* MindPlus
* mpython
*
*/
#include <WiFi.h>
#include <WiFiClient.h>
#define BLYNK_PRINT Serial
#include <DFRobot_NeoPixel.h>
#include <BlynkSimpleEsp32.h>
#include <WidgetRTC.h>
// 动态变量
volatile float mind_n_Hong, mind_n_Lv, mind_n_Lan;
// 函数声明
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b);
// 创建对象
DFRobot_NeoPixel neoPixel_P0;
// 主程序开始
void setup() {
Serial.begin(9600);
Blynk.connectWiFi("你的无线网络", "你的无线密码");
Blynk.config("你的授权码", IPAddress(116,62,49,166), 8080);
neoPixel_P0.begin(P0, 7);
neoPixel_P0.setBrightness(100);
mind_n_Hong = 255;
mind_n_Lv = 255;
mind_n_Lan = 0;
}
void loop() {
Blynk.run();
}
// 事件回调函数
BLYNK_WRITE(V0) {
if ((param.asFloat()==1)) {
neoPixel_P0.setRangeColor(0, 6, rgbToColor(round(mind_n_Hong), round(mind_n_Lv), round(mind_n_Lan)));
}
else if ((param.asFloat()==0)) {
neoPixel_P0.clear();
}
}
BLYNK_WRITE(V1) {
if ((param.asFloat()==1)) {
Blynk.virtualWrite(V0, 1);
neoPixel_P0.setRangeColor(0, 6, rgbToColor(round(mind_n_Hong), round(mind_n_Lv), round(mind_n_Lan)));
}
else if ((param.asFloat()==0)) {
Blynk.virtualWrite(V0, 0);
neoPixel_P0.clear();
}
}
BLYNK_WRITE(V2) {
neoPixel_P0.setBrightness(param.asFloat());
Blynk.virtualWrite(V0, 1);
neoPixel_P0.setRangeColor(0, 6, rgbToColor(round(mind_n_Hong), round(mind_n_Lv), round(mind_n_Lan)));
}
BLYNK_CONNECTED() {
Blynk.virtualWrite(V2, 100);
}
BLYNK_WRITE(V3) {
mind_n_Hong = param.asFloat();
mind_n_Lv = param.asFloat();
mind_n_Lan = param.asFloat();
Blynk.virtualWrite(V0, 1);
neoPixel_P0.setRangeColor(0, 6, rgbToColor(round(mind_n_Hong), round(mind_n_Lv), round(mind_n_Lan)));
}
// 静态函数
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b)
{
return (uint32_t)((((uint32_t)r<<16) | ((uint32_t)g<<8)) | (uint32_t)b);
}附件
遥控台灯.sb3
台灯最好用稳压电源供电吧......
截图可以按下CTRL+G
简单的项目最好用WeMos D1做 帅猫 发表于 2020-5-24 18:56
台灯最好用稳压电源供电吧......
截图可以按下CTRL+G
简单的项目最好用WeMos D1做 ...
嗯嗯,也可以用手机充电器供电的。
Ctrl+G截图是全局的,然后代码图片就老长了。
WeMos D1没怎么了解过,我去查查资料~~ 图片可以少一点,其它都可以{:5_122:} 好创意{:5_116:} 很实用的 没有LED灯带怎么办 Esacpe 发表于 2020-7-10 14:51
没有LED灯带怎么办
掌控板自带的三个RGB也可以凑合用,就是亮度没灯带那么高哈。可以凑合用一下的~~~
页:
[1]