0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PIC32MX470 温湿度计+RTOS+GUI:串口打印温湿度数据解析

电子工程师 来源:网络整理 2018-02-01 03:52 次阅读

串口可用之后,很多debug信息就可以通过串口打印输出了,所以我打算先把读到的温湿度数据通过串口打印出来,然后再调OLED显示,之后再将数据通过OLED屏显示,一步一步来。

首先还是在板子自带的Information sheet上找到I2C的管脚,有I2C1和I2C2,但还是由于硬件老白的原因,只能用X32接口上的I2C2了。

1

看了下温湿度的资料,最高耐压5.5V,先接到3.3V上试一下,按如下方式连接X32和温湿度计

2

接下来依然是通过MHC来使能I2C驱动

1. 打开MHC的Options选项卡,找到I2C对应的driver选项打开并做相应的配置,我的配置如下

2. 打开MHC的Pin Settings,将RF4和RF5设置为I2C2的SDA和SCL

3. 然后生成代码,主要包含以下几个源文件,我为了添加callback以及封装DHT12的驱动,又添加了bsp_i2c.c和bsp_dht12.c两个文件

5

4. 分析I2C驱动代码后可知在SYS_Initialize中已经根据用户的配置调用了I2C相关的初始化函数,所以使用时只需要在我们的封装层里直接调用drv_i2c_mapping.c中的其他API就可以了,我添加的bsp_i2c.c和bsp_dht12.c中的代码如下,DHT12的数据还没有做校验

bsp_i2c.c

#include “system/common/sys_common.h”

#include “system_config.h”

#include “system_definitions.h”

#include “driver/i2c/drv_i2c.h”

#include

#include

#define BSP_I2C_BUF_SIZE 0x10

typedef struct bsp_i2c_dev {

DRV_HANDLE I2CHandle;

OS_SEM SemLock; /* I2C Exclusive access sempahore */

OS_SEM SemWait; /* Transfer Complete signal */

CPU_INT08U TxBuf[BSP_I2C_BUF_SIZE]; /* The transfer data area */

CPU_INT08U RxBuf[BSP_I2C_BUF_SIZE]; /* The receive data area */

} BSP_I2C_DEV;

static BSP_I2C_DEV BSP_I2C_DevTbl[BSP_I2C_NBR_MAX];

static void BSP_I2C2_Callback (DRV_I2C_BUFFER_EVENT event,

DRV_I2C_BUFFER_HANDLE bufferHandle, uintptr_t context);

CPU_BOOLEAN BSP_I2C_Init (CPU_INT08U i2c_id,

CPU_INT08U i2c_mode,

CPU_INT32U bit_rate)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

break;

default:

return (DEF_FAIL);

}

/* Setup the I2C handle */

p_i2c_dev-》I2CHandle = DRV_I2C_Open(DRV_I2C_INDEX_0, 0);

/* -------------- CREATE OS SEMAPHORES ------------- */

OSSemCreate((OS_SEM *)&(p_i2c_dev-》SemWait), “I2C Wait”, 0, &err);

OSSemCreate((OS_SEM *)&(p_i2c_dev-》SemLock), “I2C Lock”, 1, &err);

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

DRV_I2C_BufferEventHandlerSet(p_i2c_dev-》I2CHandle, BSP_I2C2_Callback, NULL);

break;

default:

return (DEF_FAIL);

}

return (DEF_OK);

}

CPU_BOOLEAN BSP_I2C_WrRd (CPU_INT08U i2c_id,

CPU_INT08U i2c_addr,

CPU_INT08U *offset_buf,

CPU_INT08U offset_len,

CPU_INT08U *p_buf,

CPU_INT16U nbr_bytes)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

if ((offset_buf == (CPU_INT08U *)0) || (p_buf == (CPU_INT08U *)0)) {

return (DEF_FAIL);

}

if ((nbr_bytes 《 1) ||

((offset_len + 1) 》 BSP_I2C_BUF_SIZE) ||

((nbr_bytes + 1) 》 BSP_I2C_BUF_SIZE)) {

return (DEF_FAIL);

}

switch (i2c_id) {

case BSP_I2C_ID_I2C2:

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

break;

default:

return (DEF_FAIL);

}

/* Lock the I2C peripheral */

OSSemPend(&(p_i2c_dev-》SemLock), 0, OS_OPT_PEND_BLOCKING, 0, &err);

/* Do master write transfer */

DRV_I2C_TransmitThenReceive(p_i2c_dev-》I2CHandle, i2c_addr,

offset_buf, offset_len, p_buf, nbr_bytes, NULL);

/* Wait until the transfer completes */

OSSemPend(&(p_i2c_dev-》SemWait), 1000, OS_OPT_PEND_BLOCKING, 0, &err);

OSSemPost(&(p_i2c_dev-》SemLock), OS_OPT_POST_1, &err); /* Release the I2C Peripheral */

return DEF_OK;

}

static void BSP_I2C2_Callback (DRV_I2C_BUFFER_EVENT event,

DRV_I2C_BUFFER_HANDLE bufferHandle, uintptr_t context)

{

OS_ERR err;

BSP_I2C_DEV *p_i2c_dev;

p_i2c_dev = (BSP_I2C_DEV *)&BSP_I2C_DevTbl[0];

OSSemPost(&(p_i2c_dev-》SemWait), OS_OPT_POST_1, &err); /* Post to the sempahore */

}

bsp_dht12.c

#include “system/common/sys_common.h”

#include “system_config.h”

#include “system_definitions.h”

#include

#include

CPU_BOOLEAN BSP_DHT12_Read (CPU_INT08U *hum_high,

CPU_INT08U *hum_low,

CPU_INT08U *temp_high,

CPU_INT08U *temp_low)

{

CPU_BOOLEAN ret;

CPU_INT08U byte_addr = 0;

CPU_INT08U data_buf[4];

ret = BSP_I2C_WrRd(BSP_I2C_ID_I2C2, 0xB8, &byte_addr, 1, data_buf, 4);

if (ret) {

*hum_high = data_buf[0];

*hum_low = data_buf[1];

*temp_high = data_buf[2];

*temp_low = data_buf[3];

}

return ret;

}

5. 在_SYS_Tasks任务中添加我们自己代码的初始化

6. 最后在APP_Tasks中添加读温湿度数据的处理,每秒读一次并通过串口打印出来

串口打印输出如下

223816fz7rn1mooo1rbyu9

串口定时地将温湿度数据打印出来,也算是一个简陋的温湿度计吧。下一步就是调试SPI和OLED屏,给我们的温湿度计做一个好看一点的输出界面,毕竟这是一个实(kao)力(lian)说(chi)话(fan)的时代。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PIC32MX470
    +关注

    关注

    0

    文章

    5

    浏览量

    1797
收藏 人收藏

    评论

    相关推荐

    温湿度传感器工作原理 温湿度传感器的接线方法

    温湿度传感器是一种用于测量环境温度和相对湿度的装置。它通常用于工业、农业、气象、室内空调等领域。本文将详细介绍温湿度传感器的工作原理和接线方法。 一、温湿度传感器的工作原理
    的头像 发表于 02-14 18:00 4122次阅读

    温湿度监测系统解决方案应用场景

    温湿度监测系统解决方案,将温湿度参数进行测量并按照预定的时间间隔,将其储存在记录仪内部或通过GPRS/4G、WIFI上传管理云平台,可将数据导出,对其分析。可显示实时温湿度值、剩余
    的头像 发表于 01-24 16:21 177次阅读

    温湿度变送器HTPC04S说明书 V1

    温湿度变送器HTPC04S说明书(不锈钢温湿度变送器探头)
    发表于 01-22 14:50 0次下载

    温湿度传感器接线端子T是什么意思

    于将传感器与监测设备或控制系统的温度输入端连接起来。通过读取T端子的电信号,监测设备或控制系统可以获取到当前环境的温度数据温湿度传感器的接线端子通常有三个,T端子用于温度输入,而另外两个端子分别是H和V,分别代表湿
    的头像 发表于 01-16 09:16 503次阅读

    温湿度传感器在食品药品安全领域的应用

    被广泛应用于相关场合,实时监测和记录温湿度数据,为管理者提供决策依据。 无线智能温湿度采集终端可以实时监测环境中的温度和湿度,并通过数据传输模块将
    的头像 发表于 01-04 17:55 250次阅读
    <b class='flag-5'>温湿度</b>传感器在食品药品安全领域的应用

    4G远程温湿度传感器在仓库中的应用—蜂窝物联

    。为了更好的观测和掌握温湿度的变化,仓库需要安装温湿度传感器实时监测温湿度状态,确保适宜货物储存的温湿度环境。 蜂窝物联仓库存储环境远程监控系统由系统前端4G远程
    的头像 发表于 01-02 09:36 161次阅读

    温湿度数据可视化管理平台有什么功能和应用场景

    温度、湿度等环境数据与人们生活生产息息相关。为了维护产品的质量品质,创造安全稳定的储存环境,就需要对环境中的温湿度数据进行采集和监控。当监控到环境温湿度过高或对低时,就要及时采取有效措
    的头像 发表于 10-17 13:40 225次阅读
    <b class='flag-5'>温湿度数据</b>可视化管理平台有什么功能和应用场景

    基于51单片机和AHT10温湿度传感器的温湿度计源码

    一款基于51单片机和AHT10温湿度传感器的温湿度计源码。
    发表于 10-09 08:39

    数据中心温湿度监控系统解决方案之以太网温湿度传感器

    数据机房服务器数据中心温湿度的解决方案 引言 数据机房是现代企业和组织存储和处理海量数据的关键设施。在这些机房中,服务器承担着运行和存储
    的头像 发表于 08-02 09:52 801次阅读
    大<b class='flag-5'>数据</b>中心<b class='flag-5'>温湿度</b>监控系统解决方案之以太网<b class='flag-5'>温湿度</b>传感器

    应用在工业车间环境温湿度数据看板中的温度传感芯片

    运用传感器及物联网技术专业提供温湿度数据监控系统解决方案。由高精度温湿度传感器、LED显示屏或液晶显示屏、数据监控软件、移动端APP组成实时温湿度监测系统。
    的头像 发表于 07-28 09:29 417次阅读

    基于CW32L083设计的超低功耗温湿度计

    基于CW32L083设计的超低功耗温湿度计,可以用电池供电,实现数年超长工作时间。
    的头像 发表于 06-25 12:08 2.6w次阅读
    基于CW32L083设计的超低功耗<b class='flag-5'>温湿度计</b>

    基于单片机和LabVIEW的温湿度监测系统设计

    利用单片机和虚拟仪器LabVIEW在PC端设计了温湿度测量及控制系统,用于温湿度数据监测。该系统上位机为PC端监控界面,下位机为单片机,单片机采集温湿度数据,并将采集到的数据通过
    的头像 发表于 06-09 14:02 4249次阅读
    基于单片机和LabVIEW的<b class='flag-5'>温湿度</b>监测系统设计

    英飞凌PSoc62超低功耗温湿#超低功耗 #温湿度计

    英飞凌温湿度计
    华仔stm32
    发布于 :2023年06月03日 21:42:59

    英飞凌PSoC62 实现超低功耗温湿度计

    一款超低功耗的温湿度计
    的头像 发表于 06-03 10:13 1969次阅读
    英飞凌PSoC62 实现超低功耗<b class='flag-5'>温湿度计</b>

    CW32饭盒派开发板 日历温湿度计

    CW32创建日历+温湿度计
    的头像 发表于 05-27 14:07 4185次阅读
    CW32饭盒派开发板 日历<b class='flag-5'>温湿度计</b>