使用FireBeetle Board ESP32 制作电子徽章
如果你在参加派对的时候希望大家能记住你的名字。使用FireBeetle Board ESP32来制作一个电子徽章,可以成为聚会活动中很酷的东西。部件清单:1、FireBeetle Board ESP32 主板2、FireBeetle Covers-24x8 LED Matrix LED点阵板3、400mAh 3.7V锂电池 长50mm 宽20mm 厚度4.2mm4、圆形磁铁 直径15mm5、一角硬币6、401胶水
资料清单:1、Arduino IDE你可以在Arduino官网下载最新版本的IDE
2、FireBeetle Board ESP32板子的库文件 (登录DFRobot的 wiki资料库可以找到说明)https://wiki.dfrobot.com.cn/_SKU_DFR0478_FireBeetle_Board_ESP32%E4%B8%BB%E6%9D%BF%E6%8E%A7%E5%88%B6%E5%99%A8V4_0
3、FireBeetle Board ESP32主板USB驱动
4、FireBeetle Covers-24x8 LED Matrix LED点阵板驱动库文件
制作完成的效果图:
在FireBeetle Covers-24x8 LED Matrix上显示滚动字符首先我们需要将下载的FireBeetle Covers-24x8 LED Matrix驱动库ZIP文件导入到Arduino IDE,此时才能够使用这个点阵。使用 点阵库里面的Scrolling例子烧录,看看是否可以滚动显示 "DFROBOT 2017"
#include "DFRobot_HT1632C.h"
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);
char str[] = " DFROBOT 2017";
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
ht1632c.begin();
ht1632c.isLedOn(true);
ht1632c.clearScreen();
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
ht1632c.print(str,50);
//delay(100);
}
测试FireBeetle Board ESP32 内部霍尔传感器
你可能发现了一个问题,无法关闭显示,除非你拔掉电池。我们是否可以通过其他的方式来关闭显示呢,通过查询ESP32的数据手册,我们发现模块内部居然还集成了一个霍尔传感器,我们是不是可以通过这个霍尔传感器检测外部磁场来做一些事情。首先我们来测试下这个霍尔传感器,以下是测试代码:
int sensorValue = 0; // value read from the sensor
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
sensorValue = hallRead();
Serial.println(sensorValue);
delay(100);
}代码很简单,就是不停的通过串口打印出霍尔传感器的采集到的磁场强度数据。以下是捕捉到的数据:
可以看到,我手上的传感器在没有磁铁靠近的情况下大概在 30 这样的数字然后我们将磁铁的一面贴近FireBeetle Board ESP32 主板安装ESP32模块背面的PCB位置
数字大概在 -2到-9之间。
我们用磁铁的另外一面靠近 FireBeetle Board ESP32 背面
数值在48到53之间
这说明磁铁靠近模块,霍尔传感器的数据的确会有变化,使用霍尔传感器的读数来切换LED点阵的亮灭是可行的。根据以上的数据我设定如果霍尔传感器的数据大于35或者小于10,判断为磁铁贴近FireBeetle Board ESP32主板。所以我们是不是可以在衣服上面固定一个磁铁,当电子徽章吸附在衣服上的时候自动显示?
通过检测霍尔传感器数值来开关LED点阵
在这里,我们将LED点阵显示和霍尔传感器检测相结合,开发出可以通过外部磁铁来开关LED点阵。首先,我们使用401胶水将硬币粘贴在FireBeetle Board ESP32的背面。这里需要注意以下3点:1、硬币的位置可以参考下面的图片,如果离ESP32模块的位置太远,有可能不能可靠识别。2、401胶水不要点太多,否则会四处流动。3、10分钟后等胶水凝固,在来进行下一步。
我们添加如下代码:
#include "DFRobot_HT1632C.h"
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
int sensorValue = 0; // value read from the sensor
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR, CS);
char str[] = "I'M BOBO FROM CHINA";
void setup() {
// put your setup code here, to run once:
ht1632c.begin();
ht1632c.isLedOn(true);
ht1632c.clearScreen();
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
sensorValue = hallRead();
if ((sensorValue > 35) || (sensorValue < 10)) {
ht1632c.inLowpower(false);
ht1632c.print(str, 50);
}
else {
ht1632c.inLowpower(true);
}
}
下载完成后我们可以测试下效果。当磁铁靠近硬币,显示屏显示字符。当远离硬币。显示屏关闭。
FireBeetle Board ESP32 低功耗测试
此时虽然我们完成了磁铁靠近后LED点阵熄灭,降低了功耗。但是发现FireBeetle Board ESP32主板还有20多毫安的功耗。我们是否可以让ESP32也进入低功耗,进一步减少项目在不使用的时候的电流呢?通过查询FireBeetle Board ESP32 主板的使用说明书,里面有介绍低功耗的控制函数。
我们将程序改为如下:
#include "DFRobot_HT1632C.h"
#include <esp_deep_sleep.h>
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
int sensorValue = 0; // value read from the sensor
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR, CS);
char str[] = "I'M BOBO FROM CHINA";
void setup() {
// put your setup code here, to run once:
ht1632c.begin();
ht1632c.isLedOn(true);
ht1632c.clearScreen();
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
sensorValue = hallRead();
if ((sensorValue > 35) || (sensorValue < 10)) {
ht1632c.inLowpower(false);
ht1632c.print(str, 50);
}
else {
ht1632c.inLowpower(true);
ESP.deepSleep(5000000);
}
}
在这里,我们使用ESP.deepSleep(5000000); 这个函数让FireBeetle Board ESP32主板深度睡眠 5秒钟。睡眠后实际测试加上LED点阵的漏电流一共在1毫安左右。
5秒钟后 FireBeetle Board ESP32主板自动唤醒,快速读取一次霍尔传感器,如果判断没有磁铁靠近又立即进入睡眠5秒状态。
至此,项目完成了,你可以将磁铁通过别针安装在衣服上,或者直接吸附到铁材料上面。也可以像我一样直接将磁铁放到衬衣口袋里面。我们将制作的电子徽章吸附到衣服上面,徽章自动循环显示。当取下后自动停止显示。是不是很吸引眼球。 哈哈,抢沙发咯。胸牌很赞,有外壳就好了。 很不错的胸牌~ {:5_168:}硬币还能这么用呀~ 为啥要粘硬币?散热? 20060606 发表于 2020-8-13 05:36
为啥要粘硬币?散热?
这个也是我想问的啊,为什么要粘硬币
页:
[1]