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

    浏览量

    1948
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    温湿度传感器HTU31D在温湿度控器中的应用优势

    对环境温湿度即时采样,当环境温度高于控制设定值时控制电路停止或者通过PWM降低加热功率,将温度恒定在设置值附近,同样,湿度也是类如如此控制方式。为了准确控制温湿度,需要一颗能够提供可靠的温湿度
    的头像 发表于 11-06 14:38 125次阅读
    <b class='flag-5'>温湿度</b>传感器HTU31D在<b class='flag-5'>温湿度</b>控器中的应用优势

    【HZ-T536开发板免费体验】4、使用蓝牙模块读取小米温湿度计数据

    虽然设备上没有蓝牙模块,我们依旧可以通过USB的星闪模组实现蓝牙ble相关的功能,例如读取小米温湿度计数据。 首先需要加载对应的模块,这些模块在前面一个章节已经编译好了。 insmod
    发表于 08-25 22:16

    【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度计

    【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度计 本文介绍了上海晶珩睿莓 1 开发板通过 AHT10 传感器实现环境温湿度采集,结合 WiFi 和 MQTT 协议实现数据
    发表于 08-18 13:55

    功耗创新低!涂鸦产品级Zigbee 3.0温湿度计开发包,开箱即用、完全开源

    温湿度计作为智能家居环境感知的核心组件,通过实时检测温湿度信息,可主动联动暖通、加湿器等设备,帮助提升居住舒适度、降低能源消耗。这类产品通常是由电池供电,对低功耗的要求较高。而Zigbee天然支持
    的头像 发表于 07-31 19:13 568次阅读
    功耗创新低!涂鸦产品级Zigbee 3.0<b class='flag-5'>温湿度计</b>开发包,开箱即用、完全开源

    常见的温湿度传感器类型?

    ),温度精度为±0.2℃(典型)。湿度和温度数据可以通过MCU、蓝牙芯片或SoC芯片通过数字接口直接读取。它与SMBus、I2C接口兼容。非常适合用于暖通空调、环境监测等。 在选择温湿度传感器时,应根据具体的使用场景和需求综合考
    发表于 06-24 09:24

    温湿度变送器功能有哪些?一文详细解析

    功能就是精准测量环境中的温度和湿度。它采用高精度的传感器,能够快速、准确地感知环境温湿度的变化,并将这些数据转化为可识别的电信号。无论是在实验室、仓库,还是在生产车间,都能为用户提供可靠的温湿
    发表于 06-03 10:56

    智能仓储:温湿度监控方案应用

    随着仓储环境要求提高,温湿度监控对保障货物品质至关重要。本文介绍一个工厂仓库温湿度监控方案,利用温湿度变送器、LoRa技术和智能监测平台,为仓库业主提供高效、可靠的监测解决方案。仓库温湿度
    的头像 发表于 05-29 11:35 593次阅读
    智能仓储:<b class='flag-5'>温湿度</b>监控方案应用

    用树莓派RP2350 DIY 桌面动态温湿度计

    桌面动态温湿度计本文介绍了DFrobotBeetleRP2350开发板结合DHT11模块、锂电池模块、随机眨眼动画,实现OLED显示的桌面动态温湿度计的项目设计。一、项目介绍本项目包括工作原理:ADC电压采集与电量转换工程调试:电量获取
    的头像 发表于 05-27 08:05 660次阅读
    用树莓派RP2350 DIY 桌面动态<b class='flag-5'>温湿度计</b>

    LoRa无线技术的温湿度监测预警系统

    LoRa无线技术的温湿度监测预警系统采用LoRa采集器和LoRa网关实现监控区域内的全覆盖,同时在仓储区各个数据采集节点安装温湿度传感器,实现对监测区域的温湿度数据动态全采集,并根据仓
    的头像 发表于 05-14 16:06 618次阅读
    LoRa无线技术的<b class='flag-5'>温湿度</b>监测预警系统

    制药车间温湿度数据采集监控管理方案

    在制药生产过程中,温湿度对药品质量起着关键作用。不稳定的温湿度环境可能导致药品原料变质、药品制剂的稳定性下降,甚至影响药品的疗效和安全性。因此,构建一套精准、可靠的温湿度数据采集监控管理方案,对制药
    的头像 发表于 03-25 14:08 754次阅读
    制药车间<b class='flag-5'>温湿度数据</b>采集监控管理方案

    工厂温湿度监控系统

    在现代化工业生产环境中,温湿度控制是确保产品质量、生产效率和员工健康的关键因素之一。随着科技的进步,工厂温湿度监控系统应运而生,通过集成传感器技术、数据处理与通信技术,对工厂内部环境参数的实时监测
    的头像 发表于 02-25 17:11 881次阅读

    库房温湿度监测系统

    不可或缺的一部分,对于保障货物安全、维护存储品质具有重要意义。 组成与运行 库房温湿度监测系统是一种专门用于仓库环境温湿度监测的系统,结合传感器、数字通信、物联网、自动化控制等技术,通过集成传感器、数据采集器
    的头像 发表于 01-06 16:37 920次阅读

    远程温湿度实时监测系统应用方案

    通信、云计算、大数据分析等技术。传感器作为系统的“眼睛”,负责实时采集环境中的温湿度数据。通过Wi-Fi、蓝牙、LoRa、NB-IoT等通讯方式,将传感器采集的数据传输至云端服务器。云平台负责接收、存储和处理传感器传输的
    的头像 发表于 01-02 17:03 1046次阅读

    博物馆温湿度监控系统

    ,若任其自然变化,则可能对文物造成意想不到的损害。为此,博物馆温湿度监控系统应运而生,其具备多种功能,以确保文物环境的稳定与安全。 博物馆温湿度监控系统,采集各库房的温湿度数据,通过管理云平台实时显示各库房内
    的头像 发表于 12-20 16:42 1174次阅读

    医药仓库温湿度监控系统应用

    。 医药仓库温湿度监控系统,结合物联网、无线通讯等技术,通过传感器全天候实时采集仓库内的温湿度数据,管理云平台对接收到的数据进行深入分析、处理,并以图表、曲线等形式直观展示温湿度变化趋
    的头像 发表于 12-17 16:16 1021次阅读