1723|4

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

日历时钟+环境检测——作品提交 [复制链接]

 

 

日历时钟+环境检测

 

作者:andy

  • 项目背景

        随着生活水平的提高,人们对居住的室内环境要求越来越高,除了温湿度,还对室内的PM2.5浓度,CO2及TVOC等数值越来越关注。所以想开发一个设备可以显示日历、时钟的同时可以显示室内的环境数值。平头哥提供的RVB2601提供的丰富接口资源,比如按键,I2C接口,WiFi接口,OLED显示等。我利用这些资源,采购了几个环境模块,实现了温湿度、CO2,TVOC和PM2.5等的检测与显示。并将采集到的数据上传到阿里云生活物联网,可以远程检测室内的温湿度等信息

  • 作品简介

       本作品平时可以作为室内的一个电子小摆件,主要功能是用来显示日历时间,室内的实时温湿度、CO2、TVOC,PM2.5浓度日历时钟实现了开机网络对时,无需手动调节。由于OLED的显示区域有限,所以通过操作按键1切换屏幕的方式来显示不同页面的内容,上电开机后默认显示的是日历、时间和星期几。按一次按键后跳到温湿度面,再按按键跳到CO2等气体显示面。蓝色LED灯每闪一次读取一次环境数值,每隔五秒上传一次采集到的数值到阿里云物联网平台。

   

  • 系统框图

         本作品除了几个环模块外,其余全部使用板载资源主控为CH2601,WIFI芯片为W800与主控之间采用SPI接口连接,OLED显示部分也是通过SPI与主控连接,DEBUG通过USB转串口芯片与主控芯片的串口相连, LED按键直接与主控的GPIO连接外采的模块主要有温湿度模块、激光粉尘模块、气体传感模块。温度传感器和气体传感器并联后与主控I2C连接。激光粉尘模块直接与主控的按键2连接。

 

各个部分功能说明:

1.OLED显示模块

(1)用来显示日历和时间 

        

 csi_rtc_get_time(&aita_rtc, &rtc);

    strftime(oled_buf, sizeof(oled_buf), "%Y-%m-%d", &rtc);//日期显示
    show_string(32, 0, oled_buf);

    strftime(oled_buf, sizeof(oled_buf), "%T", &rtc);//时间显示
    show_string(40, 16, oled_buf);
	
	
	strftime(oled_buf, sizeof(oled_buf), "%A", &rtc);//星期几
    show_string(44, 32, oled_buf);

(2)显示采集到的温度和湿度 

	uint8_t o_x,o_y;
	
	o_x=8;o_y=16;	
	
	LCD_ShowWord(o_x,o_y,0);//温
	o_x+=16;
	LCD_ShowWord(o_x,o_y,4);//度
	o_x+=16;
		
	sprintf(oled_buf, ":%5.2f", Temperature); // 111.01*C 100.01%(保留2位小数)
	show_string(o_x, o_y, oled_buf);
	o_x+=48;
	
	LCD_ShowWord(o_x,o_y,6);//℃
	
	o_x=8;o_y=32;	
	
	//湿度:xx.xx%RH
	LCD_ShowWord(o_x,o_y,2);//
	o_x+=16;
	LCD_ShowWord(o_x,o_y,4);//
	o_x+=16;
	
	sprintf(oled_buf, ":%5.2f%%RH",Humidity); // 111.01*C 100.01%(保留2位小数)
	show_string(o_x,o_y, oled_buf);

(3)显示室内的二氧化碳和TVOC值,PH2.5值。

o_x=32;o_y=0;
	//气体浓度
	LCD_ShowWord(o_x,o_y,26);//
	o_x+=16;
	LCD_ShowWord(o_x,o_y,28);//
	o_x+=16;
	LCD_ShowWord(o_x,o_y,30);//
	o_x+=16;
	LCD_ShowWord(o_x,o_y,4);//
	

    o_x=8;o_y=16;
	sprintf(oled_buf, "eCO2:%3dppm ", eco2);
	
	show_string(o_x,o_y, oled_buf);
	
	
	o_x=8;o_y=32;
	sprintf(oled_buf, "TVOC:%3dppb",tvoc);
	
	show_string(o_x,o_y, oled_buf);
	
	o_x=8;o_y=48;
	sprintf(oled_buf, "PM2.5:%3d",pm2d5);
	
	show_string(o_x,o_y, oled_buf);

2.WIFI网络模块

通过连接无线路由,连接NTP服务器对RTC进行校时,连接阿里云生活物联网平台上传采集到的环境数据。

 

3.温湿度和气体传感器

采集温湿度值,二氧化碳、TVOC浓度。

//温湿度采集   
    write_data[0] = 0x2c;
    write_data[1] = 0x06;

    num = csi_iic_master_send(&master_iic, STHT30_ADDR, write_data, 2, 1000);
    if(num != 2) {
	printf("csi_iic_master_send error\n");
	return -1;
    }
    mdelay(500);
    num = csi_iic_master_receive(&master_iic, STHT30_ADDR, buff, 6, 1000);

    tem = ((buff[0] << 8) | buff[1]); //温度拼接
    hum = ((buff[3] << 8) | buff[4]); //湿度拼接

    /*转换实际温度*/
    Temperature = (175.0 * (float)tem / 65535.0 - 45.0); // T = -45 + 175 * tem / (2^16-1)
    Humidity = (100.0 * (float)hum / 65535.0);           // RH = hum*100 / (2^16-1)
//eco2,tvoc采集
    write_data[0] = 0x20;
    write_data[1] = 0x08;

    num = csi_iic_master_send(&master_iic, SGP30_ADDR, write_data, 2, 100);
    if(num != 2) {
	printf("csi_iic_master_send error\n");
	return -1;
    }
    mdelay(20);

    num = csi_iic_master_receive(&master_iic, SGP30_ADDR, buff, 6, 200);
    if(num != 6) {
	printf("csi_iic_master_receive error\n");
	return -1;
    }

    if(sgp30_checksum(buff, 2) == buff[2]) {
	eco2 = (buff[0] << 8) | buff[1]; // co2拼接
	tvoc = (buff[3] << 8) | buff[4]; // tvoc拼接

4.激光粉尘模块

采集室内的PM2.5浓度值。

//pm2.5采集
static void key2_interrupt_handler(csi_gpio_pin_t* pin, void* arg)
{
	 if(csi_gpio_pin_read(&pin_key2) == GPIO_PIN_LOW) //下降沿
	{
		pm2d5=ms_count;
		ms_count=0;
		csi_gpio_pin_irq_enable(&pin_key2, false);
		csi_gpio_pin_irq_mode(&pin_key2, GPIO_IRQ_MODE_RISING_EDGE);
		csi_gpio_pin_irq_enable(&pin_key2, true);
		

	}else
	{
		
		ms_count=0;
		csi_gpio_pin_irq_enable(&pin_key2, false);
		csi_gpio_pin_irq_mode(&pin_key2, GPIO_IRQ_MODE_FALLING_EDGE);
		csi_gpio_pin_irq_enable(&pin_key2, true);
		
	}
}

5.RTC实时时钟模块

进行日历和时间的显示。

6.显示按键

屏幕内容的切屏操作

static void key1_interrupt_handler(csi_gpio_pin_t* pin, void* arg)
{
	 if(csi_gpio_pin_read(&pin_key1) == GPIO_PIN_LOW) {
		
		Fill_RAM(0x00); // Clear Screen
		menu_item = (++menu_item)%3;
		
	//printf("menu item %d times\r\n", menu_item);
    }
}

7.LED指示灯

数据采集、更新指示灯。

 

 

源码: ch2601_helloworld.rar (64.56 MB, 下载次数: 0)

 

  • 视频演示(视频简介+链接)

      从开机到NTP校时,数据上传阿里云物联网平台,操作按键分别显示日历时间页面,温湿度页面和CO2,TVOC,PM2.5页面。

863b6ac081a57b81e99fcd0d170657aa

  • 项目总结(项目文字总结+帖子分享链接汇总)

        首次使用平头哥的芯片与开发板,受益匪浅。熟悉了平头哥芯片的开发环境和开发流程。学会了使用平台提供的API库进行应用程序的开发。

对于本项目完成了日历、时间的显示。实现了NTP校时功能。通过库提供的I2C函数对I2C设备进行操作。学会了阿里云物联网平台的设置与数据上传。但是由于开发工程中遇到了一些网络问题,导致时间上太仓促,没有实现手机端APP端的开发。

 

开发中遇到的开发板的问题

最后,再次感谢平头哥和EEWORLD提供这次机会,期待平头哥继续完善生态,发布更好的产品

下面是帖子汇总

【平头哥RVB2601创意应用开发】一 搭建CDK开发环境 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】二 搞定GPIO - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】三 OLED显示日历,时间,温湿度 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】四 SGP30环境传感器都取eCO2TVOC - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】五。使用NTP授时RTC时钟 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【平头哥RVB2601创意应用开发】六。环境传感器数据上传阿里云服务器 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

最新回复

nmg
作品源码链接更新 链接:https://pan.baidu.com/s/1skOiqMMEE_-i_UeL_69rhQ 提取码:8w7b   详情 回复 发表于 2022-6-21 16:58
点赞 关注
 
 

回复
举报

5260

帖子

239

TA的资源

管理员

来自 5楼
 

作品源码链接更新

链接:https://pan.baidu.com/s/1skOiqMMEE_-i_UeL_69rhQ
提取码:8w7b

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

6960

帖子

11

TA的资源

版主

沙发
 
恭喜作品完成,辛苦了!
 
 
 

回复

4908

帖子

19

TA的资源

版主

板凳
 
学习,开发板还是很强大的,可玩性真的高
 
 
 

回复

9790

帖子

24

TA的资源

版主

4
 

听两遍都是

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表