查看: 4063|回复: 3

[高级教程] 【FireBeetle Board-ESP32评测报告之三】LED温度表

[复制链接]
【本期主要玩法】
本次评测,DF提供了一块FireBeetle Covers-24×8 LED Matrix,就是24*8的LED点阵屏。并且提供了官方库。这样和esp32搭配后,就有得玩啦。
温度表.jpg

温度表2.jpg 温度表3.jpg


【硬件】
1、FireBeetleBoard-ESP32  1块
2、LM35 温度传感器   1
3、FireBeetle Covers-24×8 LED Matrix 1块
4、杜邦线若干

【软件】
dfrobot的官方点阵驱动库(片尾提供)
主要函数:
1、DFRobot_HT1632C(uint8_t data, uint8_t wr, uint8_t cs)
在叠装时,DATA---D6,WR---D7,CS(D2,你也可以自己拨动,可以一次控制四块点阵)
RD(D8,不用)
2、DFRobot_HT1632C::begin()
点阵打开
3、DFRobot_HT1632C::clearScreen()
清屏
4、DFRobot_HT1632C::isLedOn(boolean state)
打开所有的LED
5、DFRobot_HT1632C::inLowpower(boolean state)
低功耗控制,T为低功耗打开,类似休眠,F为恢复
6、DFRobot_HT1632C::setPixel(uint8_t x, uint8_t y)
画点函数
7、DFRobot_HT1632C::clrPixel(uint8_t x, uint8_t y)
清除点的函数
8、DFRobot_HT1632C::setPixel(uint8_t x, uint8_t y)
设置坐标
9、DFRobot_HT1632C::setPwm(uint8_t value)
这个是设置亮度的,一共是1~15,其实1已经挺亮了。
10、DFRobot_HT1632C::drawLine(uint8_t xStart, uint8_t yStart, uint8_t xStop, uint8_t yStop)
画线函数
11、DFRobot_HT1632C::clrLine(uint8_t xStart, uint8_t yStart, uint8_t xStop, uint8_t yStop)
清除线函数
12、 ht1632c.print(str,base)
显示字符函数,base是数值,可以显示滚动效果,如设置为30,那么就滚动显示一个30长度的串
后面还有很多,自己研究一下库即可,比较直观。
【接线方式】
    
LM35
FireBeetle Covers-24×8  LED Matrix
D2

D2(在背后的拨动开关,自行设置)
D6

D6
D7

D7
VCC
VCC
VCC
GND
GND
GND
A0
Data-output

【代码】
[C++] 纯文本查看 复制代码
#include "DFRobot_HT1632C.h"

#define DATA D6
#define CS D3
#define WR D7
//#define RD 7

DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);

char str[] = "Temperature";

//关于LM35变量*************温度传感器部分设置
int potPin = A0;                     //设置模拟口4为LM35的信号输入端口
float temperature = 0;                //设置temperature为浮点变量
long val=0;                       //设置val为长整数变量

float sensorValue = 0;    //临时变量

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  ht1632c.begin();
  ht1632c.isLedOn(true);
  ht1632c.clearScreen();
  ht1632c.setCursor(0,0);
 //ht1632c.inLowpower(true);
   ht1632c.print(str,15);
   ht1632c.setPwm(1);
   delay(500);
    
}

void loop() {
  // val=analogRead(potPin);//温度传感器LM35接到模拟PIN4上;val变量为从LM35信号口读取到的数值
    val=gett();
    temperature = val*0.001409587904157*100; 
         //把读取到的val转换为温度数值,系数一:0.001220703125=5/4096,0~5V对应模拟口读数
        //但是实测了vcc的电压为4.33V,因此对照UNO做了一个校正,选择系数一:0.001220703125*5/4.33=0.001409587904157
        //1~4096,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
    char s_temp[5];
    dtostrf(temperature,2,2,s_temp);//把温度值转换为两位整数,两位小数的字符串
    ht1632c.print(s_temp);
    Serial.println(s_temp);
    delay(5000);
}

float gett(){
//简单的8次的平均滤波,你也可以尝试中值滤波等
   sensorValue = analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   sensorValue += analogRead(potPin);
   //show on the Serial Monitor
   //Serial.print("temp = ");
   //Serial.println(sensorValue/8);
   return sensorValue/8;
}



【小结】
DFrobot提供了很棒的萤火虫系列产品,这个24*8的点阵,你可以玩温度计,时钟等。
我本来准备了两种玩法,一是blynk RTC,通过wifi把时钟传送给esp32,然后在本地通过24*8的点阵显示。二是本地RTC模块,通过esp32驱动24*8的点阵来实现本地的时钟、温度计。很可惜,目前RTC库以及blynk的RTC与esp32都会冲突,编译通过后,在运行中,显示CPU崩溃。这两个没有成功的测试其实就花去了差不多一天的时间。
现在大家看到的这个简单的堆叠小温度计,就是24*8的点阵的玩法之一。希望抛砖引玉,给大家提供更多灵感。
esp32还有挺长的路要走。。。。

FireBeetleLEDMatrix-master.zip (12.3 KB, 下载次数: 12)

dsweiliang  版主

发表于 2017-5-31 10:20:31

这个好玩,我也买一套
回复 支持 反对

使用道具 举报

hnyzcj  超级版主

发表于 2017-5-31 21:05:17

不错不错
回复 支持 反对

使用道具 举报

dsweiliang  版主

发表于 2017-5-31 21:56:51

唉~还没上架
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail