查看: 2279|回复: 4

[i.MX6ULL竞赛专区] 【我的项目666+远程温湿度报警系统】+ A3.I2C驱动oled和sht20

[复制链接]
  • TA的每日心情
    开心
    昨天 08:51
  • 签到天数: 2628 天

    [LV.Master]伴坛终老

    45

    主题

    5184

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    10677
    最后登录
    2024-4-26
    发表于 2018-7-19 17:33:07 | 显示全部楼层 |阅读模式
    最近确实有点忙,昨晚又抽空把板子拿出来折腾了起来。因为自己没有LCD屏幕,但是板子上引出了I2C是可以接OLED的,屏幕小了点但是显示几个参数还是绰绰有余的。照着官方的例程修修补补总算是可以工作了。不过I2C的速度有点低刷新有点慢,找了半天不知道在哪里设置,有知道的朋友指点一下哈。
    通过以下指令可以扫描i2c总线上挂接的设备,这里0x68是DS3231,0x57是24c32,0x3c是oled屏,0x40是sht20。
    1. i2cdetect -y 1
    复制代码
    QQ截图20180719171836.jpg 驱动程序就根据官方的例程改了改。
    1. int main(int argc, char** argv){
    2.        
    3.         fd = open("/dev/i2c-1",O_RDWR);
    4.         if(fd<0){
    5.                 printf("Fail to open i2c device\r\n");
    6.                 return 0;
    7.         }

    8.         printf("device is ready!!!\r\n");

    9.         ds3231_data.nmsgs=2;
    10.         ds3231_data.msgs=(struct i2c_msg*)malloc(ds3231_data.nmsgs*sizeof(struct i2c_msg));
    11.         if(!ds3231_data.msgs){
    12.                 printf("ds3231 malloc error\r\n");
    13.                 return 0;
    14.         }

    15.         ssd1306_data.nmsgs=1;
    16.         ssd1306_data.msgs=(struct i2c_msg*)malloc(ssd1306_data.nmsgs*sizeof(struct i2c_msg));
    17.         if(!ssd1306_data.msgs){
    18.                 printf("ssd1306 malloc error\r\n");
    19.                 return 0;
    20.         }

    21.         sht20_data.nmsgs=2;
    22.         sht20_data.msgs=(struct i2c_msg*)malloc(sht20_data.nmsgs*sizeof(struct i2c_msg));
    23.         if(!sht20_data.msgs){
    24.                 printf("sht20 malloc error\r\n");
    25.                 return 0;
    26.         }

    27.         ssd1306_init();
    28.         ssd1306_Clear();
    29.         sleep(1);

    30.         SHT20_Soft_Reset();
    31.         reg1 = SHT20_Read_Register();
    32.         SHT20_Write_Register(((reg1 & 0x7e) | 0x80));
    33.         reg2 = SHT20_Read_Register();
    34.         sprintf(str, "0x%x---0x%x", reg1, reg2);
    35.         OLED_ShowString(0,0,str,16);

    36. while(1){
    37.         ds3231_ReadTime();
    38.         printf("%02d",bcd_decimal((ds3231_data.msgs[1]).buf[2]));
    39.         printf(":%02d",bcd_decimal((ds3231_data.msgs[1]).buf[1]));
    40.         printf(":%02d\r\n",bcd_decimal((ds3231_data.msgs[1]).buf[0]));

    41.         sprintf(str, "%02d:%02d:%02d", bcd_decimal((ds3231_data.msgs[1]).buf[2]),\
    42.                                        bcd_decimal((ds3231_data.msgs[1]).buf[1]),\
    43.                                        bcd_decimal((ds3231_data.msgs[1]).buf[0]));
    44.         OLED_ShowString(0,2,str,16);
    45.         usleep(1000*10);

    46.         temp = SHT20_Read_value(Trigger_T_measuremnet_hold_master);
    47.         temp &= ~0x0003;
    48.         temp_t = -46.85 + 175.72 / 65536 * temp;
    49.                        
    50.         sprintf(str, "T -%2.3f", temp_t);
    51.         OLED_ShowString(0, 4, str, 16);       

    52.         temp = SHT20_Read_value(Trigger_RH_measuremnet_hold_master);
    53.         temp &= ~0x0003;
    54.         temp_rh = -6.0 + 125.0 / 65536 * temp;

    55.         sprintf(str, "RH-%2.3f", temp_rh);
    56.         OLED_ShowString(0, 6, str, 16);       
    57. }
    58. //        close(fd);
    59. //        return 0;
    60. }
    复制代码
    最后上一张效果图,现在做的还比较简单,温湿度没有经过处理直接获取,有空了再折腾吧。
    QQ图片20180719172424.jpg

    签到签到
    回复

    使用道具 举报

  • TA的每日心情

    2017-1-16 12:20
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    12

    主题

    653

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1667
    最后登录
    2022-5-2
    发表于 2018-7-19 18:38:43 | 显示全部楼层
    谢谢分享
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5382
    最后登录
    2021-12-22
    发表于 2018-8-1 16:44:48 | 显示全部楼层
    还是没看懂, fd总共出现三次,没见向fd读写呀?
    可能是因为看不到ds3231等那些东西的声明吧
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-10-17 09:43
  • 签到天数: 47 天

    [LV.5]常住居民I

    21

    主题

    135

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    487
    最后登录
    2022-10-24
    发表于 2018-8-3 08:47:11 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-2-7 18:18
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    13

    主题

    126

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1628
    最后登录
    2021-7-13
    发表于 2018-8-6 18:54:42 | 显示全部楼层
    谢谢分享!!!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 21:08 , Processed in 0.130193 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表