[原创] 【国民技术N32WB031_STB开发板评测】墨水屏温湿度计

lugl4313820   2023-5-6 06:26 楼主
  1. 【新提醒】N32WB03x系列蓝牙芯片 产品简介 
  2. 【新提醒】N32WB031 API函数使用说明 
  3. 【新提醒】【国民技术N32WB031_STB开发板评测】资源的下载 
  4. 【国民技术N32WB031_STB开发板评测】创建MDK模版 
  5. 【国民技术N32WB031_STB开发板评测】GPIO之按键与LED灯 
  6. 【新提醒】【国民技术N32WB031_STB开发板评测】串口+LOG分级打印
  7. 【国民技术N32WB031_STB开发板评测】OLED驱动 
  8. 【国民技术N32WB031_STB开发板评测】驱动HS3003 
  9. 【国民技术N32WB031_STB开发板评测】SPI驱动墨水屏 
  10. 【国民技术N32WB031_STB开发板评测】点用 PA4后下载不程序 
  11. 【国民技术N32WB031_STB开发板评测】解决SWDCLK、SWDIO配置为普通IO后不能下载固件

解决了下载固件的问题后,昨晚把温湿度计hs3003与墨水屏结合在一起,温湿度计就做好了。

采集程序修改如下:

void Humiture_HS3003_ReadData_Raw(float *humi_f, float *temp_f)
{
    uint8_t rx_buf[4] = {0};
    uint16_t humi, temp;
    float    tmp_f   = 0.0;
		
    SI2C_MasterWrite(&SI2C_handle,I2C_SLAVE_ADDR, NULL, 0);
    //8bit->1.2ms
    //10bit->2.72ms
    //12bit->9.10ms
    //14bit->33.90ms
	  Delay_ms(40);
__retry:		
    SI2C_MasterRead(&SI2C_handle, I2C_SLAVE_ADDR, rx_buf, 4);
		
//		log_info("%x,%x,%x,%x\n", rx_buf[0], rx_buf[1], rx_buf[2], rx_buf[3]);
//    log_info("state:%x\n", rx_buf[0] & RM_HS300X_MASK_STATUS_0XC0);
		if ((rx_buf[0] & RM_HS300X_MASK_STATUS_0XC0) != RM_HS300X_DATA_STATUS_VALID)
        {
            Delay_ms(100);
            goto __retry;
        }
		humi = (rx_buf[0] & RM_HS300X_MASK_HUMIDITY_UPPER_0X3F) << 8 | rx_buf[1];
		temp = (rx_buf[2] << 8 | (rx_buf[3] & RM_HS300X_MASK_TEMPERATURE_LOWER_0XFC)) >> 2;

		tmp_f = (float )humi;
		*humi_f = (tmp_f * RM_HS300X_CALC_HUMD_VALUE_100) / RM_HS300X_CALC_STATIC_VALUE;

		tmp_f = (float)temp;
		*temp_f = ((tmp_f * RM_HS300X_CALC_TEMP_C_VALUE_165) / RM_HS300X_CALC_STATIC_VALUE) - RM_HS300X_CALC_TEMP_C_VALUE_40;

//		log_info("Temp:%d.%d   ",(int)temp_f,(int)(temp_f*100)%100);
//		log_info("HUMI:%d.%d\r\n",(int)humi_f,(int)(humi_f*100)%100);
//    return 1;
}

main.c修改如下:

    while (1)
    {
			
			LedBlink(LED1_PORT, LED1_PIN);
			Humiture_HS3003_init();
			Humiture_HS3003_ReadData_Raw(&humi,&temp);
	  	EPD_HW_Init_GUI(); //EPD init GUI
			
			
			Paint_Clear(WHITE);
			sprintf(show_str,"温度%02d.%02d℃",(int)temp, (int)(temp*100)%100);	
			Paint_DrawString_CN(40,10,show_str, &Font24CN, WHITE, BLACK);
			sprintf(show_str,"湿度%02d.%02d%%",(int)humi, (int)(humi*100)%100);				
			Paint_DrawString_CN(40,60,show_str, &Font24CN, WHITE, BLACK);
	
			EPD_Display(BlackImage); //display image
			EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
			Delay_ms(10000);

    }

这样温湿度计做好了,效果见视频,下一步将实现RTC日历功能。

墨水屏温湿计

 

回复评论 (7)

看楼主的手就不是干体力活的。

点赞  2023-5-6 10:34
引用: tagetage 发表于 2023-5-6 10:34 看楼主的手就不是干体力活的。

大佬的观察力那是相当的不错,曾经也是一名体力劳动者呀!

点赞  2023-5-6 10:42

这湿度有点高了……

点赞  2023-5-6 10:57

显示效果挺好的,墨水屏主打的就是一个低功耗。

点赞  2023-5-6 14:13
引用: wangxiangtan2 发表于 2023-5-6 10:57 这湿度有点高了……

早上起来,下雨,中午好一点了78%,南方现在阴雨天。

点赞  2023-5-6 15:40
引用: wangerxian 发表于 2023-5-6 14:13 显示效果挺好的,墨水屏主打的就是一个低功耗。

准备做个低功耗的温湿计,正在努力学习中。

点赞  2023-5-6 15:40
很有启发。丰富了温湿度计系统。
点赞  2023-5-18 13:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复