在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

外設移植 Ai-WB2+BH1750 光照強度傳感器

AIoT行業洞察 ? 來源:AIoT行業洞察 ? 作者:AIoT行業洞察 ? 2024-12-05 14:32 ? 次閱讀

以下作品由安信可社區用戶

WangChong制作

外設介紹

BH1750是一種基于光電二極管的數字光強傳感器,能夠測量環境中的光照強度,并將其轉換為數字信號。它采用 I2C 接口進行通信,適合用于光強度檢測的各種應用,如自動調節顯示屏亮度、光線感應開關等。

外設規格參數

工作電壓: 2.4V 至 3.6V

測量范圍: 1 至 65535 lux

分辨率:

高分辨率模式(1 lx)

低分辨率模式(4 lx)

通信接口: I2C

I2C 地址: 0x23(默認),0x5C(可選) 根據 Address 是否接拉低或者拉高進行選擇

測量時間:

高分辨率模式: 120ms - 180ms

低分辨率模式: 16ms - 24 ms

待機模式: 0.1 μA(典型值)

功耗:

測量模式: 0.12 mA(典型值)

移植過程

BH1750 數據手冊:https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf

根據數據手冊得知, BH1750 是使用的 I2C 通信,同時我們使用的是 WB2,因此我們需要根據原理圖確認 WB2 的 I2C 接口 PIN。

由于使用的是 WB2-12F 的開發板,所以可以在安信可社區 WB2 專題下找到對應的原理圖,同時根據博流官方 GPIO 的功能復用,可以找到哪些 PIN 支持 I2C。

https://dev.bouffalolab.com/media/doc/602/open/datasheet/zh/html/content/Pindefinition.html

wKgZO2dRSOqAWL65AAF-ZTZTzb4783.jpg

SDK 下的 application/iot-solution/demo_bh1750 下已經提供了一個完整的實現。我們來嘗試將 I2C 配置中的 PIN3(SDA)改成 PIN17 (SDA)。同時將 WB2-12F devkit 的 12 號 PIN 和 17 號 PIN 分別接到 BH1750 的 SCL 和 SDA 上進行燒錄測試。

wKgZPGdRSOuARWNGAAA69lPR2_o232.jpg

wKgZO2dRSOuARkuWAAOMYyhTQak293.jpg

燒錄驗證

wKgZPGdRSOyAZmADAADeLIlPSJQ900.jpg

此時可以通過串口助手已經可以正確的查看到 WB2-12F 正確的讀取了 BH1750 的光照強度。

代碼解讀

#include
#include
#include
#include
#include
#include
// BH1750 的默認 I2C 地址
#define BH1750_DEFAULT_ADDR BH1750_ADDR_L
#define BH1750_ADDR_H 0x5c // BH1750 高地址
#define BH1750_ADDR_L 0x23 // BH1750 低地址
// BH1750 的各種操作命令
#define BH1750_POWER_DOWN 0x00 // 斷電命令
#define BH1750_POWER_ON 0x01 // 開機命令
#define BH1750_RESET 0x07 // 重置命令
#define BH1750_CONTINUOUS_H_MODE 0x10 // 高分辨率模式,持續測量
#define BH1750_CONTINUOUS_H_MODE2 0x11 // 高分辨率模式2,持續測量
#define BH1750_CONTINUOUS_L_MODE 0x13 // 低分辨率模式,持續測量
#define BH1750_ONETIME_H_MODE 0x20 // 高分辨率模式,一次性測量
#define BH1750_ONETIME_H_MODE2 0x21 // 高分辨率模式2,一次性測量
#define BH1750_ONETIME_L_MODE 0x23 // 低分辨率模式,一次性測量
int main(void)
{
// 定義并初始化 I2C 設備 i2c0
static hosal_i2c_dev_t i2c0 = {
.config = {
.address_width = HOSAL_I2C_ADDRESS_WIDTH_7BIT, // 7位地址模式
.freq = 100000, // I2C 通信頻率為 100kHz
.mode = HOSAL_I2C_MODE_MASTER, // I2C 主機模式
.scl = 12, // 時鐘引腳 GPIO 12
.sda = 17, // 數據引腳 GPIO 17
},
.port = 0, // I2C 端口
};
// 初始化 I2C 接口
hosal_i2c_init(&i2c0);
for (;;) {
uint8_t buffer[2]; // 用于接收光照強度數據的緩沖區
uint8_t cmd = BH1750_ONETIME_H_MODE; // 設置 BH1750 的測量模式為高分辨率一次性測量
hosal_i2c_master_send(&i2c0, BH1750_DEFAULT_ADDR, &cmd, 1, HOSAL_WAIT_FOREVER); // 發送測量命令到 BH1750

// 接收來自 BH1750 的測量結果(2字節)
int ret = hosal_i2c_master_recv(&i2c0, BH1750_DEFAULT_ADDR, buffer, 2, 100);

if (ret) {
// 如果接收超時,重新發送上電命令并記錄錯誤日志
cmd = BH1750_POWER_ON;
hosal_i2c_master_send(&i2c0, BH1750_DEFAULT_ADDR, &cmd, 1, 100);
blog_error("i2c timeoutrn");
} else {
// 將接收到的兩個字節數據合并為一個16位整數
uint16_t result = buffer[0];
result <<= 8; // 左移8位,放置高8位
result |= buffer[1]; // 組合低8位
// 將測量值轉換為光照強度(lux)
float luxlevel = result;
result /= 1.2f;
// 輸出光照強度日志
blog_info("lux level: %.02frn", luxlevel);
}
// 任務延時 1000 毫秒,即每隔 1 秒執行一次測量
vTaskDelay(portTICK_RATE_MS * 1000);
}
return 0;
}

庫函數

讓我們簡單的對上面的庫函數進行一下整理

bh1750.c

#include "bh1750.h"
#include
#include
#include
static hosal_i2c_dev_t i2c0 = {
.config = {
.address_width = HOSAL_I2C_ADDRESS_WIDTH_7BIT,
.freq = 100000,
.mode = HOSAL_I2C_MODE_MASTER,
.scl = 12,
.sda = 17,
},
.port = 0,
};
void bh1750_init()
{
blog_info("Initializing I2C...n");
hosal_i2c_init(&i2c0);
}
void read_bh1750(void *args)
{
for (;;)
{
uint8_t buffer[2];
uint8_t cmd = BH1750_ONETIME_H_MODE;
int ret;
blog_info("Sending command to BH1750...n");
ret = hosal_i2c_master_send(&i2c0, BH1750_DEFAULT_ADDR, &cmd, 1, HOSAL_WAIT_FOREVER);
if (ret != 0)
{
blog_error("I2C send failed with error: %dn", ret);
continue;
}
blog_info("Receiving data from BH1750...n");
ret = hosal_i2c_master_recv(&i2c0, BH1750_DEFAULT_ADDR, buffer, 2, 100);
if (ret != 0)
{
cmd = BH1750_POWER_ON;
hosal_i2c_master_send(&i2c0, BH1750_DEFAULT_ADDR, &cmd, 1, 100);
blog_error("I2C receive failed with error: %dn", ret);
}
else
{
uint16_t result = (buffer[0] << 8) | buffer[1];
float luxlevel = result / 1.2f;
blog_info("Lux level: %.02fn", luxlevel);
}
vTaskDelay(pdMS_TO_TICKS(1000)); // 使用宏將毫秒轉換為FreeRTOS時間單位
}
}

bh1750.h

#ifndef BH1750_H
#define BH1750_H
#include
// BH1750 的默認 I2C 地址
#define BH1750_DEFAULT_ADDR BH1750_ADDR_L
#define BH1750_ADDR_H 0x5c // BH1750 高地址
#define BH1750_ADDR_L 0x23 // BH1750 低地址
// BH1750 的各種操作命令
#define BH1750_POWER_DOWN 0x00 // 斷電命令
#define BH1750_POWER_ON 0x01 // 開機命令
#define BH1750_RESET 0x07 // 重置命令
#define BH1750_CONTINUOUS_H_MODE 0x10 // 高分辨率模式,持續測量
#define BH1750_CONTINUOUS_H_MODE2 0x11 // 高分辨率模式2,持續測量
#define BH1750_CONTINUOUS_L_MODE 0x13 // 低分辨率模式,持續測量
#define BH1750_ONETIME_H_MODE 0x20 // 高分辨率模式,一次性測量
#define BH1750_ONETIME_H_MODE2 0x21 // 高分辨率模式2,一次性測量
#define BH1750_ONETIME_L_MODE 0x23 // 低分辨率模式,一次性測量
// 函數聲明
void bh1750_init();
void read_bh1750(void *args);
#endif // BH1750_H
main.c
#include
#include
#include
#include
#include
#include
#include "bh1750.h"
int main(void)
{
bh1750_init();
xTaskCreate(read_bh1750, "BH1750 Task", 4096, NULL, 10, NULL);
return 0;
}

注意事項

切記,不要在主函數中開啟任務的調度器,主函數在其他地方使用 extern 引用了,相當于一個中轉的中間方法,可以用于初始化 task。

附上后續的驗證過程:

驗證過程

1. 編譯代碼

上述帖子中已經貼出來了完整的工程代碼。直接將其拷貝到 sdk 目錄,為了與 sdk 中的代碼沖突,將驗證工程目錄改名為 demo_bh17501。

進入到目錄中進行編譯:

wKgZO2dRSOyAabDlAABNAA_Dqss280.jpg

很快就可以看到編譯成功。

wKgZPGdRSOyAHHaiAAExS5bd2VM780.jpg

2. 代碼燒錄

wKgZO2dRSO2AbiPWAADehpAZljQ924.jpg

燒錄完成:

wKgZPGdRSO2ABHzPAAGYocshE7c784.jpg

3. 測試驗證

wKgZO2dRSO2AEKJOAAEVjuHyh1U133.jpg

打開串口工具:

可以看到傳感器的數據有輸出了。實際測試用不同強度的光線照射得到的 lux 是和預期相符的。

wKgZO2dRSO6AC3tHAAF7yuSYC5k476.jpg

至此,驗證通過。


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51467

    瀏覽量

    756963
收藏 人收藏

    評論

    相關推薦

    基于物聯網技術設計的陳列館監控系統

    該項目構建一個功能全面、實時監控的陳列館智能監控系統。通過引入高精度的溫濕度傳感器(SHT30)、光照強度檢測模(BH1750)、煙霧和火焰傳感器(MQ
    的頭像 發表于 01-15 09:29 ?411次閱讀
    基于物聯網技術設計的陳列館監控系統

    光敏電阻與其他傳感器的聯合應用

    光敏電阻作為一種能夠根據光照強度變化而改變電阻值的傳感器,在與其他傳感器聯合應用時,能夠拓展出更多元化的應用場景和功能。以下是對光敏電阻與其他傳感器聯合應用的介紹: 一、光敏電阻與溫度
    的頭像 發表于 01-13 09:39 ?211次閱讀

    【CW32模塊使用】BH1750光照強度傳感器

    采用ROHM原裝BH1750FVI芯片供電電源:3-5V,光照度范圍:0-65535lx傳感器內置16bitAD轉換,直接數字輸出,省略復雜的計算,省略標定,不區分環境光源接近于視覺
    的頭像 發表于 12-30 11:17 ?217次閱讀
    【CW32模塊使用】<b class='flag-5'>BH1750</b><b class='flag-5'>光照強度</b><b class='flag-5'>傳感器</b>

    【RA-Eco-RA4E2-64PIN-V1.0開發板試用】04、I2C驅動BH1750光照傳感器并在串口打印輸出

    0 前言 本次實驗將使用板子上的I2C功能。瑞薩R7FA4E2B93CFM支持I3C和I2C,手頭沒有I3C的設備,但正好有一個I2C協議的光照
    發表于 12-16 16:17

    外設移植 安信可Ai-WB2+FPM383C指紋

    -M61-32S https://bbs.ai-thinker.com/forum.php?mod=viewthreadfromuid=15918 這里主要說一下移植 FPM383C 指紋到 Ai-WB2 模塊時遇到
    的頭像 發表于 10-29 14:54 ?249次閱讀
    <b class='flag-5'>外設</b><b class='flag-5'>移植</b> 安信可<b class='flag-5'>Ai-WB2</b>+FPM383C指紋

    光照傳感器和光敏電阻區別在哪

    光照傳感器和光敏電阻是兩種不同的光電元件,它們在光電領域中有著廣泛的應用。雖然它們都對光有響應,但它們在工作原理、結構、性能、應用等方面存在顯著差異。 一、工作原理 光照傳感器和光敏電
    的頭像 發表于 10-12 14:34 ?837次閱讀

    光照傳感器和光敏傳感器一樣嗎

    光照傳感器和光敏傳感器并不完全一樣 ,它們在工作原理、應用場景以及優缺點上都有所不同。 一、工作原理 光照傳感器
    的頭像 發表于 10-12 14:22 ?1298次閱讀

    外設移植 安信可Ai-WB2-32S開發板+TM1637 NTP時鐘

    使用的是AI-WB2-32S開發板,自己畫了一個板子整合TM1637和舵機、BLE(舵機、BLE的將會在另外2篇帖子介紹),對應的接線方式如下: 移植過程: 根據參考帖子以及TM1637的規格書進行更改,時序
    的頭像 發表于 09-24 14:29 ?394次閱讀
    <b class='flag-5'>外設</b><b class='flag-5'>移植</b> 安信可<b class='flag-5'>Ai-WB2</b>-32S開發板+TM1637 NTP時鐘

    16位數字輸出型環境光強度傳感器集成電路bh1750FVI中文數據手冊

    電子發燒友網站提供《16位數字輸出型環境光強度傳感器集成電路bh1750FVI中文數據手冊.pdf》資料免費下載
    發表于 09-11 14:26 ?4次下載

    光敏電阻隨光照強度的變化規律

    光敏電阻是一種半導體材料,其電阻值會隨著光照強度的變化而變化。這種特性使得光敏電阻在許多領域得到廣泛應用,如光控開關、光度計、自動控制等。 一、光敏電阻的工作原理 光敏電阻的工作原理基于半導體材料
    的頭像 發表于 08-27 10:31 ?2821次閱讀

    光敏電阻與光照強度的關系是什么

    光敏電阻是一種特殊的電阻元件,其電阻值會隨著光照強度的變化而變化。 一、光敏電阻的工作原理 光敏電阻是一種半導體材料制成的電阻元件,其電阻值會隨著光照強度的變化而變化。光敏電阻的工作原理主要
    的頭像 發表于 08-27 10:29 ?1927次閱讀

    智能家居、智慧工廠,AI傳感器無處不在!國內外廠商積極布局

    AI傳感器是一種能夠感知和測量環境物理量的設備,如溫度、濕度、光照強度、壓力等,并將這些物理量轉化為數字信號,通過通信接口將數據傳輸給計算機或其他設備。與傳統的傳感器相比,
    的頭像 發表于 04-22 08:00 ?3108次閱讀

    硅光電池測量光照強度

    我了解到的原理是,硅光電池的電池內阻遠大于R1,且在一定光強范圍內,輸出電流(uA級別)隨光照強度的增加而線性增加,所以我想通過2DU3硅光電池通過以下電路,將硅光電池輸出電流通過R1轉化為電壓,并
    發表于 04-02 15:20

    外設移植】I2C 光照傳感器BH1750)M61開發板驅動

    本作品由安信可社區用戶 制作 IC光度傳感器模塊種類很多,我選擇一種比較常用的模塊(BH1750)做外設移植BH1750的優點如下: 1、
    的頭像 發表于 03-21 11:24 ?1119次閱讀
    【<b class='flag-5'>外設</b><b class='flag-5'>移植</b>】I<b class='flag-5'>2</b>C <b class='flag-5'>光照</b>度<b class='flag-5'>傳感器</b>(<b class='flag-5'>BH1750</b>)M61開發板驅動

    I2C光照傳感器BH1750)M61開發板驅動步驟

    IC光度傳感器模塊種類很多,我選擇一種比較常用的模塊(BH1750)做外設移植
    的頭像 發表于 03-17 16:00 ?2662次閱讀
    I<b class='flag-5'>2</b>C<b class='flag-5'>光照</b>度<b class='flag-5'>傳感器</b>(<b class='flag-5'>BH1750</b>)M61開發板驅動步驟
    主站蜘蛛池模板: 天堂最新版在线www在线 | 最好看的2019中文字幕免费高清 | 欧美在线观看www | 夜夜操国产 | 午夜视频高清在线aaa | 性欧美欧美之巨大69 | 丁香狠狠色婷婷久久综合 | 天天插日日插 | 边摸边吃奶边做视频叫床韩剧 | 非常黄的网站 | 亚洲午夜视频在线观看 | 久久人视频 | 天天爱综合 | 欧美婷婷六月丁香综合色 | 在线观看h网站 | 久久老色鬼天天综合网观看 | 日日爱夜夜爱 | 性夜影院爽黄a爽免费看网站 | 狠狠干.com| 四虎最新免费观看网址 | 大黄网站在线观看 | 国产1卡2卡三卡四卡网站 | 网站色小妹| 午夜在线观看视频 | 手机在线看片福利 | 嫩草影院网站入口 | 视频在线观看网站 | 色婷婷六月丁香七月婷婷 | 日韩夜夜操| 亚洲开心激情网 | 91九色porny蝌蚪 | 黄网站在线播放 | 欧美日韩一区不卡 | 性生活一区| 午夜影院视频 | 亚洲一区二区免费看 | 美女视频网站色软件免费视频 | 天天草天天操 | 欧美黄视频在线观看 | 波多野结衣在线视频免费观看 | 欧美午夜在线观看 |