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

    浏览量

    1803
收藏 人收藏

    评论

    相关推荐

    XKCON祥控仓库存储环境温湿度在线监测系统能够取代人工巡检,实现远程仓库存储环境温湿度变化的实时

    仓库作为储物的场所,其环境温湿度会随着季节更替而发生变化,这种变化会对存储物品的质量与安全产生较大的影响。因此,仓库的温湿度数据就成为仓储安全监管的一个重要的指标。 济南祥控自动化设备有限公司开发
    的头像 发表于 11-20 11:20 99次阅读
    XKCON祥控仓库存储环境<b class='flag-5'>温湿度</b>在线监测系统能够取代人工巡检,实现远程仓库存储环境<b class='flag-5'>温湿度</b>变化的实时

    LORA无线温湿度监测系统

    仓储、农业、机房等多种应用场景,提供高效、可靠的解决方案。 部分组成 LORA温湿度传感器:作为系统的前端采集设备,实时捕捉环境中的温湿度数据。LORA温湿度传感器的传输距离远,视距可达3000米,甚至能穿透3-4堵混凝土墙,通
    的头像 发表于 11-07 16:57 198次阅读

    温湿度控制器的功能和应用

    温湿度控制器在电阻柜中的应用主要涉及以下几个方面: 温湿度控制器的功能 检测与控制:温湿度控制器可以同时检测和控制环境中的温度和湿度。它通常由传感器、控制器和加热器三部分组成。传感器负
    的头像 发表于 11-07 15:08 142次阅读

    关于Air780E:使用文件系统存储温湿度数据怎么操作?

    的使用-程序源码demo 780E开发板和DHT11 合宙的TCP/UDP测试服务器 API使用介绍 ​ 1.2 程序解析 (1):首先采集温湿度数据 --采集温湿度数据,该引脚需要接开发板上一个带上拉5k
    的头像 发表于 10-31 07:26 121次阅读
    关于Air780E:使用文件系统存储<b class='flag-5'>温湿度数据</b>怎么操作?

    温湿度监测解决方案

    。对于维护环境稳定、保障生产安全、提升生活质量具有重要意义。 温湿度监测解决方案,融入物联网、无线通讯等技术,通过温湿度传感器、智能采集器等感知设备,实时采集环境中的温度和湿度数据。将物理量转换为电信号,经
    的头像 发表于 09-04 17:16 290次阅读

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示
    的头像 发表于 08-13 18:04 956次阅读
    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境<b class='flag-5'>温湿度数据</b>及 OLED显示

    温湿度监测系统应用

    在现代化工业生产、仓储管理、农业种植以及智能家居等领域,温湿度监测已成为不可或缺的一环。温湿度作为环境控制的关键因素,直接影响着产品质量、存储安全、作物生长效率以及居住舒适度。因此,一套高效、精准
    的头像 发表于 07-26 16:15 350次阅读

    库房温湿度自动监测系统

    对库房内温湿度的实时、自动监测。在线实时采集库房内的温湿度数据,无线传输并汇总到管理平台上,进行存储、分析、报警等操作,随时查看库房内的温湿度情况,以便管理员及时调控仓储库房环境情况,确保存储物品处于适宜的
    的头像 发表于 07-09 18:00 649次阅读

    粮仓温湿度监测解决方案

    温湿度是影响粮食储存品质的重要因素。过高的温度会加速粮食的呼吸作用,导致水分散失和品质下降。因此,粮仓的温湿度管理,成为了确保粮食储存安全和质量稳定的关键因素。方便及时发现粮仓的发热点,及时减少粮食
    的头像 发表于 07-04 16:37 316次阅读

    想要准确地测量环境温湿度温湿度传感器是关键!

    温湿度是生产生活中最重要的环境指标之一,不仅人需要在适宜的温湿度条件下保持良好的精神状态和敏捷的思维,食品、药品、各种仪器设备等都对环境温湿度有特殊的要求。基于对环境温湿度的要求,
    的头像 发表于 07-04 08:48 486次阅读

    无线温湿度监控系统

    解决方案,在需要监控的区域部署传感器节点,实时感知环境温湿度数据,利用无线传感器网络,对环境温湿度的实时采集和传输,上传至监控中心或云平台,用户进行远程查看和管理。一旦数据被采集,自动推送示警信息,实现环境温
    的头像 发表于 05-30 16:43 716次阅读

    小白测功耗之蓝牙温湿度传感器

    小小的温湿度计,是人们日常生活中的智能小帮手,也是极为典型的电池供电类低功耗产品。通常采用纽扣电池供电,可方便地摆放或粘贴于各种应用场景。市面上常见的温湿度计,功耗到底有多低?今天,我们就用即将
    的头像 发表于 04-16 08:04 1100次阅读
    小白测功耗之蓝牙<b class='flag-5'>温湿度</b>传感器

    温湿度数据采集远程监控系统解决方案

    随着科技的不断发展,人们对于生活品质的要求也在不断提高。在日常生活和生产活动中,温湿度的控制与监测变得越来越重要,例如在家庭、办公室、实验室、仓库等场所。对此,数之能提供面向工业场景的温湿度数据
    的头像 发表于 02-28 10:55 471次阅读

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

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

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

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