色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    1825
收藏 人收藏

    評論

    相關推薦

    遠程溫濕度實時監測系統應用方案

    通信、云計算、大數據分析等技術。傳感器作為系統的“眼睛”,負責實時采集環境中的溫濕度數據。通過Wi-Fi、藍牙、LoRa、NB-IoT等通訊方式,將傳感器采集的數據傳輸至云端服務器。云平臺負責接收、存儲和處理傳感器傳輸的
    的頭像 發表于 01-02 17:03 ?98次閱讀

    醫藥倉庫溫濕度監控系統應用

    。 醫藥倉庫溫濕度監控系統,結合物聯網、無線通訊等技術,通過傳感器全天候實時采集倉庫內的溫濕度數據,管理云平臺對接收到的數據進行深入分析、處理,并以圖表、曲線等形式直觀展示溫濕度變化趨
    的頭像 發表于 12-17 16:16 ?184次閱讀

    LORA無線溫濕度監測系統

    倉儲、農業、機房等多種應用場景,提供高效、可靠的解決方案。 部分組成 LORA溫濕度傳感器:作為系統的前端采集設備,實時捕捉環境中的溫濕度數據。LORA溫濕度傳感器的傳輸距離遠,視距可達3000米,甚至能穿透3-4堵混凝土墻,通
    的頭像 發表于 11-07 16:57 ?381次閱讀

    溫濕度控制器的功能和應用

    溫濕度控制器在電阻柜中的應用主要涉及以下幾個方面: 溫濕度控制器的功能 檢測與控制:溫濕度控制器可以同時檢測和控制環境中的溫度和濕度。它通常由傳感器、控制器和加熱器三部分組成。傳感器負
    的頭像 發表于 11-07 15:08 ?257次閱讀

    關于Air780E:使用文件系統存儲溫濕度數據怎么操作?

    的使用-程序源碼demo 780E開發板和DHT11 合宙的TCP/UDP測試服務器 API使用介紹 ? 1.2 程序解析 (1):首先采集溫濕度數據 --采集溫濕度數據,該引腳需要接開發板上一個帶上拉5k
    的頭像 發表于 10-31 07:26 ?172次閱讀
    關于Air780E:使用文件系統存儲<b class='flag-5'>溫濕度數據</b>怎么操作?

    溫濕度監測解決方案

    。對于維護環境穩定、保障生產安全、提升生活質量具有重要意義。 溫濕度監測解決方案,融入物聯網、無線通訊等技術,通過溫濕度傳感器、智能采集器等感知設備,實時采集環境中的溫度和濕度數據。將物理量轉換為電信號,經
    的頭像 發表于 09-04 17:16 ?358次閱讀

    溫濕度監測系統應用

    在現代化工業生產、倉儲管理、農業種植以及智能家居等領域,溫濕度監測已成為不可或缺的一環。溫濕度作為環境控制的關鍵因素,直接影響著產品質量、存儲安全、作物生長效率以及居住舒適度。因此,一套高效、精準
    的頭像 發表于 07-26 16:15 ?436次閱讀

    庫房溫濕度自動監測系統

    對庫房內溫濕度的實時、自動監測。在線實時采集庫房內的溫濕度數據,無線傳輸并匯總到管理平臺上,進行存儲、分析、報警等操作,隨時查看庫房內的溫濕度情況,以便管理員及時調控倉儲庫房環境情況,確保存儲物品處于適宜的
    的頭像 發表于 07-09 18:00 ?727次閱讀

    糧倉溫濕度監測解決方案

    溫濕度是影響糧食儲存品質的重要因素。過高的溫度會加速糧食的呼吸作用,導致水分散失和品質下降。因此,糧倉的溫濕度管理,成為了確保糧食儲存安全和質量穩定的關鍵因素。方便及時發現糧倉的發熱點,及時減少糧食
    的頭像 發表于 07-04 16:37 ?360次閱讀

    想要準確地測量環境溫濕度溫濕度傳感器是關鍵!

    ? 溫濕度是生產生活中最重要的環境指標之一,不僅人需要在適宜的溫濕度條件下保持良好的精神狀態和敏捷的思維,食品、藥品、各種儀器設備等都對環境溫濕度有特殊的要求。基于對環境溫濕度的要求,
    的頭像 發表于 07-04 08:48 ?594次閱讀

    無線溫濕度監控系統

    解決方案,在需要監控的區域部署傳感器節點,實時感知環境溫濕度數據,利用無線傳感器網絡,對環境溫濕度的實時采集和傳輸,上傳至監控中心或云平臺,用戶進行遠程查看和管理。一旦數據被采集,自動推送示警信息,實現環境溫
    的頭像 發表于 05-30 16:43 ?784次閱讀

    小白測功耗之藍牙溫濕度傳感器

    小小的溫濕度計,是人們日常生活中的智能小幫手,也是極為典型的電池供電類低功耗產品。通常采用紐扣電池供電,可方便地擺放或粘貼于各種應用場景。市面上常見的溫濕度計,功耗到底有多低?今天,我們就用即將
    的頭像 發表于 04-16 08:04 ?1361次閱讀
    小白測功耗之藍牙<b class='flag-5'>溫濕度</b>傳感器

    溫濕度數據采集遠程監控系統解決方案

    隨著科技的不斷發展,人們對于生活品質的要求也在不斷提高。在日常生活和生產活動中,溫濕度的控制與監測變得越來越重要,例如在家庭、辦公室、實驗室、倉庫等場所。對此,數之能提供面向工業場景的溫濕度數據
    的頭像 發表于 02-28 10:55 ?527次閱讀

    溫濕度傳感器工作原理 溫濕度傳感器的接線方法

    溫濕度傳感器是一種用于測量環境溫度和相對濕度的裝置。它通常用于工業、農業、氣象、室內空調等領域。本文將詳細介紹溫濕度傳感器的工作原理和接線方法。 一、溫濕度傳感器的工作原理
    的頭像 發表于 02-14 18:00 ?9728次閱讀

    溫濕度監測系統解決方案應用場景

    溫濕度監測系統解決方案,將溫濕度參數進行測量并按照預定的時間間隔,將其儲存在記錄儀內部或通過GPRS/4G、WIFI上傳管理云平臺,可將數據導出,對其分析。可顯示實時溫濕度值、剩余
    的頭像 發表于 01-24 16:21 ?629次閱讀
    主站蜘蛛池模板: 性生片30分钟| 国产精品亚洲第一区二区三区| 亚洲网站视频在线观看| 樱花之恋动漫免费观看| 97人妻丰满熟妇AV无码| 大香伊人中文字幕精品| 精品国产乱码久久久久久上海公司| 蕾丝边娱乐网| 乌克兰美女x?x?y?y| 曰本少妇高潮久久久久久| 成年视频xxxxxx在线| 黄色三级三级三级免费看| 欧美日韩视频一区二区三区| 亚洲AV人无码综合在线观看蜜桃| 88.7在线收听| 国产午夜精品福利久久| 嫩草国产精品99国产精品| 寻找最美乡村教师颁奖晚会| 99精品久久久久久久| 国产主播福利一区二区| 欧美18videosex初次| 亚洲理论片在线中文字幕| 拔萝卜在线高清观看视频| 九九久久国产| 视频一区二区三区蜜桃麻豆| 18禁止观看免费私人影院| 国产免费不卡| 青青草伊人网| 中文视频在线| 国产偷国产偷亚洲高清SWAG| 欧美特黄三级成人| 伊人久久一本| 国产美女视频一区二区二三区| 暖暖的视频完整视频免费韩国 | 精品国产三级a| 色列少女漫画| 97蜜桃网123| 精子网久久国产精品| 偷尝禁果H1V1幸运的山熊| H厨房灌草莓| 麻豆产精品一二三产区区|