Funpack12期Wio Terminal平台温度、湿度传感器、及土壤湿度传感器的数据采集和显示
使用Wio Terminal 终端,基于arduino平台开发,实现传感器数据采集及显示。
标签
嵌入式系统
Devin
更新2022-01-11
1160
  • 实现的功能
    • 读取温度、湿度传感器,土壤湿度传感器的数据,使用wio terminal终端进行数据值显示。
  • 各个功能对应的主要代码片段及说明
    • 调用头文件;
#include"TFT_eSPI.h"//添加lcd显示头文件,lcd显示需要
#include "Wire.h"//添加引脚的控制,温湿度传感器需要
#include"DHT.h"//添加温湿度传感器的驱动头文件

 

        

  • 配置传感器模拟信号采集引脚
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Moisture 传感器部分
int sensorPin = A0;
int sensorValue = 0;
  • 配置数字温度、湿度传感器参数
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DHT 传感器部分
#define DHTTYPE DHT20   // 选择DHT型号为DHT 20
DHT dht(DHTTYPE);       // DHT10 DHT20 don't need to define Pin

 

  • 配置lcd显示使用的参数
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lcd部分
//#include"Free_Fonts.h" //include the header file
TFT_eSPI tft;//实例化lcd对象

#define Y_CHAR_SIZE 16  //根据使用的font字体高度定义
#define X_CHAR_SIZE 12  //根据使用的font字体宽度定义

//根据font字体高度,分行
#define	Y_LINE_0	4
#define	Y_LINE_1	36
#define	Y_LINE_2	68
#define	Y_LINE_3	100
#define	Y_LINE_4	132
#define	Y_LINE_5	164
#define	Y_LINE_6	196
#define	Y_LINE_7	228

//根据font字体宽度,分列
#define	X_CL_0	12
#define	X_CL_1	24
#define	X_CL_2	36
#define	X_CL_3	48
#define	X_CL_4	60
#define	X_CL_5	72
#define	X_CL_6	84
#define	X_CL_7	96
#define	X_CL_8	108
#define	X_CL_9	120
#define	X_CL_10	132
#define	X_CL_11	144
#define	X_CL_12	156
#define	X_CL_13	168
#define	X_CL_14	180
#define	X_CL_15	192
#define	X_CL_16	204
#define	X_CL_17	216
#define	X_CL_18	228
#define	X_CL_19	240
#define	X_CL_20	252
#define	X_CL_21	264
#define	X_CL_22	276
#define	X_CL_23	288
#define	X_CL_24	300
#define	X_CL_25	312
#define X_CL_END 320

//定义提醒位置
#define X_TITLE_WARMING_START X_CL_0
#define X_TITLE_WARMING_END X_CL_END
#define Y_TITLE_WARMING Y_LINE_0

//定义标题位置
#define X_TITLE_DHT_START X_CL_0
#define X_TITLE_DHT_END X_CL_END
#define Y_TITLE_DHT Y_LINE_0

//定义湿度文字位置
#define X_TXT_HUMIDITY_START X_CL_0
#define X_TXT_HUMIDITY_END X_CL_END
#define Y_TXT_HUMIDITY Y_LINE_1
//定义湿度数值位置
#define X_VAL_HUMIDITY_START X_CL_10
#define X_VAL_HUMIDITY_END X_CL_END
#define Y_VAL_HUMIDITY Y_LINE_1
//定义湿度单位位置
#define X_UNI_HUMIDITY_START X_CL_16
#define X_UNI_HUMIDITY_END X_CL_END
#define Y_UNI_HUMIDITY Y_LINE_1


//定义温度文字位置
#define X_TXT_TEMP_START X_CL_0
#define X_TXT_TEMP_END X_CL_END
#define Y_TXT_TEMP Y_LINE_2
//定义温度数值位置
#define X_VAL_TEMP_START X_CL_10
#define X_VAL_TEMP_END X_CL_END
#define Y_VAL_TEMP Y_LINE_2
//定义温度单位位置
#define X_UNI_TEMP_START X_CL_16
#define X_UNI_TEMP_END X_CL_END
#define Y_UNI_TEMP Y_LINE_2


//定义温度文字位置
#define X_TXT_MOISTURE_START X_CL_0
#define X_TXT_MOISTURE_END X_CL_END
#define Y_TXT_MOISTURE Y_LINE_3
//定义温度数值位置
#define X_VAL_MOISTURE_START X_CL_10
#define X_VAL_MOISTURE_END X_CL_END
#define Y_VAL_MOISTURE Y_LINE_3

这里使用了宏定义,是方便lcd的参数调整,不用到代码中去一个个找,然后再修改。

  • 初始化函数
//========================================================== setup 初始化
void setup() {
  Wire.begin();//初始化引脚
  // put your setup code here, to run once:
  tft.begin();
  tft.setRotation(3);//设置坐标0=左上角;1=右上角;2=右下角;3=左下角
  tft.fillScreen(TFT_BLACK);//设置背景为绿色

  tft.setTextColor(TFT_WHITE);//设置文字为白色

  // tft.setTextSize(1);
  // tft.drawString("Hello word!",0,0);

  tft.setTextSize(2);//设置字体大小为2号
  tft.drawString("DHT/Mois sensor data show",X_TITLE_DHT_START,Y_TITLE_DHT);
  
  // tft.setFreeFont(FF1); //select Free, Mono, Oblique, 12pt.
  // tft.drawString("Mono 12pt",70,110);//prints string at (70,110)

  dht.begin();//初始化温湿度传感器
tft.drawString("Humidity:",X_TXT_HUMIDITY_START,Y_TXT_HUMIDITY);//显示数据说明
tft.drawString("Temp:",X_TXT_TEMP_START,Y_TXT_TEMP);//显示数据说明
tft.drawString("Moisture:",X_TXT_MOISTURE_START,Y_TXT_MOISTURE);//显示数据说明

}

 

  • 函数主体,主要是采集温度和湿度,并显示
//======================================================== loop 循环
void loop() {
  // put your main code here, to run repeatedly:
    float temp_hum_val[2] = {0};
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    String myString="";//设置一个空字符串

   
    if (!dht.readTempAndHumidity(temp_hum_val)) {
      
      if(myString.concat(temp_hum_val[0]))
      {
         tft.fillRect(X_VAL_HUMIDITY_START,Y_VAL_HUMIDITY,X_VAL_HUMIDITY_END-X_VAL_HUMIDITY_START,Y_CHAR_SIZE,TFT_BLACK);//用填充清屏
        tft.drawString(myString,X_VAL_HUMIDITY_START,Y_VAL_HUMIDITY);
        tft.drawString("%",X_UNI_HUMIDITY_START,Y_UNI_HUMIDITY);
      }

      myString="";//清空字符串
            if(myString.concat(temp_hum_val[1]))
      {
         tft.fillRect(X_VAL_TEMP_START,Y_VAL_TEMP,X_VAL_TEMP_END-X_VAL_TEMP_START,Y_CHAR_SIZE,TFT_BLACK);//用填充清屏
        tft.drawString(myString,X_VAL_TEMP_START,Y_VAL_TEMP);
        tft.drawString("*C",X_UNI_TEMP_START,Y_UNI_TEMP);
      }
      
        // debug.print(temp_hum_val[0]);
        // debug.print(" %\t");
        // debug.print("Temperature: ");
        // debug.print(temp_hum_val[1]);
        // debug.println(" *C");
    } else {
       tft.fillScreen(TFT_BLACK);//用黑色填充清屏
      tft.drawString("read Humidity fail!",X_TITLE_WARMING_START,Y_TITLE_WARMING);
        //debug.println("Failed to get temprature and humidity value.");
    }


    //------------------------------------------------- Moisture 传感器
    sensorValue = analogRead(sensorPin);
    myString="";//清空字符串
    if(myString.concat(sensorValue))
    {
      tft.fillRect(X_VAL_MOISTURE_START,Y_VAL_MOISTURE,X_VAL_MOISTURE_END-X_VAL_MOISTURE_START,Y_CHAR_SIZE,TFT_BLACK);//用填充清屏
        tft.drawString(myString,X_VAL_MOISTURE_START,Y_VAL_MOISTURE);
        //tft.drawString("*C",X_UNI_TEMP_START,Y_UNI_TEMP);
    }
  
 
    delay(1500);

}

 

主要是调用库函数,获取数据,并转换成字符串,然后调用lcd的字符显示库函数,进行绘制。

 

  • 功能展示及说明
    • 显示效果

Fqbk9rlQ2NA6O72yfV-qHbmb-Q13

  • 本活动的心得体会
    • wio terminal和arduino开发环境非常好用
    •  这是第二次参加电子森林,加深了对学习平台的了解,比如电子森林和硬禾、B站等。  
  •  
附件下载
data_show.zip
团队介绍
成员1人,从事半导体嵌入式应用开发
团队成员
Devin
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号