野火STM32F429开发板温湿度LED点阵显示系统

首页-达尔闻    全部    野火STM32F429开发板温湿度LED点阵显示系统
  • 一、测试项目内容:

拿到野火STM32F429开发板有一段时间了,经过测试,对开发板自带的5.0寸显示屏还是印象非常深刻,触摸灵敏,显示细腻,但是对于常用的数据显示来说,采用LED点阵大屏还是比较合适,显示的内容多,数据丰富,可红绿蓝三色显示。咱们今天就利用STM32F429开发板来做一个大屏的温湿度显示系统。

  • 二、HT11温湿度模块:

本项目的温湿度传感器采用DHT11温湿度传感器,DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH,温度+-2℃,量程湿度20-90%RH, 温度0~50℃。野火的开发板上直接有DHT11的插座,直接把温湿度传感器插在开发板J6端子上即可。

 

DTH11的数据管脚和STM32F429的PE2端口相连接,原理图如下:

 

DHT驱动代码如下: /**************************************************************************************

 * 描  述 : 从DHT11读取一个字节,MSB先行

 * 入  参 : 无

 * 返回值 : u8

 **************************************************************************************/

static u8 Read_Byte(void)

{

    u8 i, temp=0;

 

    for(i=0;i<8;i++)   

    {     

        while(DHT11_DATA_IN()==Bit_RESET);  //每bit以50us低电平标置开始,轮询直到从机发出 的50us 低电平 结束

 

        /*DHT11 以26~28us的高电平表示“0”,以70us高电平表示“1”  */

        delay_us(40); //延时40us,这个延时需要大于数据0持续的时间即可         

 

        if(DHT11_DATA_IN()==Bit_SET)  //  40us后仍为高电平表示数据“1”

        {

            while(DHT11_DATA_IN()==Bit_SET);  //等待数据1的高电平结束

            temp|=(u8)(0x01<<(7-i));  //把第7-i位置1,MSB先行

        }

        else   // 40us后为低电平表示数据“0”

        {             

            temp&=(u8)~(0x01<<(7-i)); //把第7-i位置0,MSB先行

        }

    }

    return temp;

}

 

 /**************************************************************************************

 * 描  述 : 一次完整的数据传输为40bit,高位先出

 * 入  参 : 8bit 湿度整数 + 8bit 湿度小数 + 8bit 温度整数 + 8bit 温度小数 + 8bit 校验和

 * 返回值 : u8

 **************************************************************************************/

u8 Read_DHT11(DHT11_Data_TypeDef *DHT11_Data)

    DHT11_Mode_Out_PP();   //输出模式

   

    DHT11_DATA_OUT(LOW);   //主机拉低

    delay_ms(18);     //延时18ms

 

    DHT11_DATA_OUT(HIGH);   //总线拉高 主机延时30us

    delay_us(30);   //延时30us

 

    DHT11_Mode_IPU();   //主机设为输入 判断从机响应信号

  

    if(DHT11_DATA_IN()==Bit_RESET)  //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行  

    { 

        while(DHT11_DATA_IN()==Bit_RESET);  //轮询直到从机发出 的80us 低电平 响应信号结束

        while(DHT11_DATA_IN()==Bit_SET);    //轮询直到从机发出的 80us 高电平 标置信号结束

 

        /*开始接收数据*/  

        DHT11_Data->humi_int= Read_Byte();

        DHT11_Data->humi_deci= Read_Byte();

        DHT11_Data->temp_int= Read_Byte();

        DHT11_Data->temp_deci= Read_Byte();

        DHT11_Data->check_sum= Read_Byte();

        DHT11_Mode_Out_PP();   //读取结束,引脚改为输出模式

        DHT11_DATA_OUT(HIGH);   //主机拉高

 

        /*检查读取的数据是否正确*/

        if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci)

            return SUCCESS;

        else

            return ERROR;

    }

    else

    {      

        return ERROR;

    }  

}

 

  • 三、LED点阵模块:

LED点阵显示模块:本项目采用4块3.75高亮红绿双色表贴双色单元板组成的128X64大小的点阵显示模块。

 

LED控制卡:常用大屏一般都是通过LED控制卡来控制点阵显示内容,控制卡厂家提供了丰富的菜单方便我们生成显示各式各样的数据。本项目采用的是串口控制卡,STM32F429的串口和控制卡直接进行串口通信,STM32F429开发板采集DHT11温湿度传感器的温湿度数据,然后通过串口发送给LED控制卡,控制卡再把数据显示到点阵大屏上。

 

STM32F429开发板的串口6和LED控制卡的串口通过串口线连接,注意选择RXD和TXD交叉的线缆即可。LED控制卡和STM32F429之间的串口通信遵守 Modbus-RTU 协议通信

       

 

其中CRC校验采用的是CRC16校验方式,其C语言代码如下:

 /* \brief Modbus 校验值计算

* \param [in] ptr : 数据流指针(报文的起始字节)

 * \param [in] len : 要计算的数量流长度(报文长度-2)

 * \return CRC校验值 */

uint16_t CRC16_Modbus(const uint8_t *ptr,uint8_t len)

{

       uint16_t crc = 0xFFFF;

       uint8_t i;

       while(len--)

       {

               crc ^= *ptr;

               for(i=0; i<8; i++)

               {

                       if(crc&1)

                       {

                               crc >>= 1;

                               crc ^= 0xA001;

                       }

                       else    crc >>= 1;

               }

               ptr++;

       }

       return(crc);

}

STM32F429的串口6初始化一定记得把校验设置成偶校验,否则会和控制卡通信不上。

 

USART_InitStructure.USART_Parity = USART_Parity_Even;//偶校验位

STM32F429串口发送函数如下:

/*****************  发送一个字节 **********************/

void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)

{

   /* 发送一个字节数据到USART */

   USART_SendData(pUSARTx,ch);

      

   /* 等待发送数据寄存器为空 */

   while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);   

}

STM32F429把采集到的温湿度数据按该协议定时通过串口发送给控制卡,控制卡把收到的数据进行刷新显示,实现温湿度数据的大屏显示。显示效果如下:

 

实际显示效果很棒,很醒目。测试的时候正好下雨,所以湿度比较大。

  • 四、总结:

通过本项目,测试了野火STM32开发板的温湿度读取功能及STM32串口数据收发功能,同时也学会了如何在LED大屏上显示温湿度。大屏显示在一些公共场合用的比较多,如公园温湿度、负氧离子浓度、商场户外广告、工厂展示板等。我们就可以把自己想显示的任何数据通过大屏显示,提高产品的整体效果。

2020年4月1日 16:33
收藏