解决了下载固件的问题后,昨晚把温湿度计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日历功能。
引用: tagetage 发表于 2023-5-6 10:34 看楼主的手就不是干体力活的。
大佬的观察力那是相当的不错,曾经也是一名体力劳动者呀!
这湿度有点高了……
显示效果挺好的,墨水屏主打的就是一个低功耗。
引用: wangxiangtan2 发表于 2023-5-6 10:57 这湿度有点高了……
早上起来,下雨,中午好一点了78%,南方现在阴雨天。
引用: wangerxian 发表于 2023-5-6 14:13 显示效果挺好的,墨水屏主打的就是一个低功耗。
准备做个低功耗的温湿计,正在努力学习中。