99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

外設(shè)移植 Ai-WB2+BH1750 光照強(qiáng)度傳感器

AIoT行業(yè)洞察 ? 來(lái)源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2024-12-05 14:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下作品由安信可社區(qū)用戶(hù)

WangChong制作

外設(shè)介紹

BH1750是一種基于光電二極管的數(shù)字光強(qiáng)傳感器,能夠測(cè)量環(huán)境中的光照強(qiáng)度,并將其轉(zhuǎn)換為數(shù)字信號(hào)。它采用 I2C 接口進(jìn)行通信,適合用于光強(qiáng)度檢測(cè)的各種應(yīng)用,如自動(dòng)調(diào)節(jié)顯示屏亮度、光線感應(yīng)開(kāi)關(guān)等。

外設(shè)規(guī)格參數(shù)

工作電壓: 2.4V 至 3.6V

測(cè)量范圍: 1 至 65535 lux

分辨率:

高分辨率模式(1 lx)

低分辨率模式(4 lx)

通信接口: I2C

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

測(cè)量時(shí)間:

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

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

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

功耗:

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

移植過(guò)程

BH1750 數(shù)據(jù)手冊(cè):https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf

根據(jù)數(shù)據(jù)手冊(cè)得知, BH1750 是使用的 I2C 通信,同時(shí)我們使用的是 WB2,因此我們需要根據(jù)原理圖確認(rèn) WB2 的 I2C 接口 PIN。

由于使用的是 WB2-12F 的開(kāi)發(fā)板,所以可以在安信可社區(qū) WB2 專(zhuān)題下找到對(duì)應(yīng)的原理圖,同時(shí)根據(jù)博流官方 GPIO 的功能復(fù)用,可以找到哪些 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 下已經(jīng)提供了一個(gè)完整的實(shí)現(xiàn)。我們來(lái)嘗試將 I2C 配置中的 PIN3(SDA)改成 PIN17 (SDA)。同時(shí)將 WB2-12F devkit 的 12 號(hào) PIN 和 17 號(hào) PIN 分別接到 BH1750 的 SCL 和 SDA 上進(jìn)行燒錄測(cè)試。

wKgZPGdRSOuARWNGAAA69lPR2_o232.jpg

wKgZO2dRSOuARkuWAAOMYyhTQak293.jpg

燒錄驗(yàn)證

wKgZPGdRSOyAZmADAADeLIlPSJQ900.jpg

此時(shí)可以通過(guò)串口助手已經(jīng)可以正確的查看到 WB2-12F 正確的讀取了 BH1750 的光照強(qiáng)度。

代碼解讀

#include
#include
#include
#include
#include
#include
// BH1750 的默認(rèn) 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 // 開(kāi)機(jī)命令
#define BH1750_RESET 0x07 // 重置命令
#define BH1750_CONTINUOUS_H_MODE 0x10 // 高分辨率模式,持續(xù)測(cè)量
#define BH1750_CONTINUOUS_H_MODE2 0x11 // 高分辨率模式2,持續(xù)測(cè)量
#define BH1750_CONTINUOUS_L_MODE 0x13 // 低分辨率模式,持續(xù)測(cè)量
#define BH1750_ONETIME_H_MODE 0x20 // 高分辨率模式,一次性測(cè)量
#define BH1750_ONETIME_H_MODE2 0x21 // 高分辨率模式2,一次性測(cè)量
#define BH1750_ONETIME_L_MODE 0x23 // 低分辨率模式,一次性測(cè)量
int main(void)
{
// 定義并初始化 I2C 設(shè)備 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 主機(jī)模式
.scl = 12, // 時(shí)鐘引腳 GPIO 12
.sda = 17, // 數(shù)據(jù)引腳 GPIO 17
},
.port = 0, // I2C 端口號(hào)
};
// 初始化 I2C 接口
hosal_i2c_init(&i2c0);
for (;;) {
uint8_t buffer[2]; // 用于接收光照強(qiáng)度數(shù)據(jù)的緩沖區(qū)
uint8_t cmd = BH1750_ONETIME_H_MODE; // 設(shè)置 BH1750 的測(cè)量模式為高分辨率一次性測(cè)量
hosal_i2c_master_send(&i2c0, BH1750_DEFAULT_ADDR, &cmd, 1, HOSAL_WAIT_FOREVER); // 發(fā)送測(cè)量命令到 BH1750

// 接收來(lái)自 BH1750 的測(cè)量結(jié)果(2字節(jié))
int ret = hosal_i2c_master_recv(&i2c0, BH1750_DEFAULT_ADDR, buffer, 2, 100);

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

庫(kù)函數(shù)

讓我們簡(jiǎn)單的對(duì)上面的庫(kù)函數(shù)進(jìn)行一下整理

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)); // 使用宏將毫秒轉(zhuǎn)換為FreeRTOS時(shí)間單位
}
}

bh1750.h

#ifndef BH1750_H
#define BH1750_H
#include
// BH1750 的默認(rèn) 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 // 開(kāi)機(jī)命令
#define BH1750_RESET 0x07 // 重置命令
#define BH1750_CONTINUOUS_H_MODE 0x10 // 高分辨率模式,持續(xù)測(cè)量
#define BH1750_CONTINUOUS_H_MODE2 0x11 // 高分辨率模式2,持續(xù)測(cè)量
#define BH1750_CONTINUOUS_L_MODE 0x13 // 低分辨率模式,持續(xù)測(cè)量
#define BH1750_ONETIME_H_MODE 0x20 // 高分辨率模式,一次性測(cè)量
#define BH1750_ONETIME_H_MODE2 0x21 // 高分辨率模式2,一次性測(cè)量
#define BH1750_ONETIME_L_MODE 0x23 // 低分辨率模式,一次性測(cè)量
// 函數(shù)聲明
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;
}

注意事項(xiàng)

切記,不要在主函數(shù)中開(kāi)啟任務(wù)的調(diào)度器,主函數(shù)在其他地方使用 extern 引用了,相當(dāng)于一個(gè)中轉(zhuǎn)的中間方法,可以用于初始化 task。

附上后續(xù)的驗(yàn)證過(guò)程:

驗(yàn)證過(guò)程

1. 編譯代碼

上述帖子中已經(jīng)貼出來(lái)了完整的工程代碼。直接將其拷貝到 sdk 目錄,為了與 sdk 中的代碼沖突,將驗(yàn)證工程目錄改名為 demo_bh17501。

進(jìn)入到目錄中進(jìn)行編譯:

wKgZO2dRSOyAabDlAABNAA_Dqss280.jpg

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

wKgZPGdRSOyAHHaiAAExS5bd2VM780.jpg

2. 代碼燒錄

wKgZO2dRSO2AbiPWAADehpAZljQ924.jpg

燒錄完成:

wKgZPGdRSO2ABHzPAAGYocshE7c784.jpg

3. 測(cè)試驗(yàn)證

wKgZO2dRSO2AEKJOAAEVjuHyh1U133.jpg

打開(kāi)串口工具:

可以看到傳感器的數(shù)據(jù)有輸出了。實(shí)際測(cè)試用不同強(qiáng)度的光線照射得到的 lux 是和預(yù)期相符的。

wKgZO2dRSO6AC3tHAAF7yuSYC5k476.jpg

至此,驗(yàn)證通過(guò)。


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52995

    瀏覽量

    767358
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【沁恒CH585開(kāi)發(fā)板免費(fèi)試用體驗(yàn)】+光照傳感器及其檢測(cè)

    光照傳感器在對(duì)環(huán)境的光線情況的檢測(cè)中起著重要的作用,這里所采用的是數(shù)字式光照傳感器BH1750,它具有集成度高和檢測(cè)精度高的特點(diǎn)。 該
    發(fā)表于 07-06 00:08

    DLP NIRScan Nano光照強(qiáng)度如何計(jì)算?

    我獲取到了Nano的掃描數(shù)據(jù),在對(duì)數(shù)據(jù)進(jìn)行解析的時(shí)候遇到了一個(gè)問(wèn)題,我搞不明白光照強(qiáng)度是如何得出來(lái)的,我在例程庫(kù)里邊找到了代碼,我沒(méi)看懂,還有就是按照代碼計(jì)算出來(lái)的光強(qiáng)是不正確的,請(qǐng)教各位工程師給予指點(diǎn)。
    發(fā)表于 02-28 07:30

    壁掛光照傳感器技術(shù)規(guī)格與安裝指南

    在智能家居和智能環(huán)境監(jiān)測(cè)系統(tǒng)中,壁掛光照傳感器扮演著重要的角色。它能夠?qū)崟r(shí)監(jiān)測(cè)環(huán)境中的光照強(qiáng)度,為智能照明系統(tǒng)、環(huán)境研究等提供關(guān)鍵數(shù)據(jù)支持。本文將詳細(xì)介紹壁掛光照
    的頭像 發(fā)表于 02-19 14:08 ?531次閱讀
    壁掛<b class='flag-5'>光照</b><b class='flag-5'>傳感器</b>技術(shù)規(guī)格與安裝指南

    基于物聯(lián)網(wǎng)技術(shù)設(shè)計(jì)的陳列館監(jiān)控系統(tǒng)

    該項(xiàng)目構(gòu)建一個(gè)功能全面、實(shí)時(shí)監(jiān)控的陳列館智能監(jiān)控系統(tǒng)。通過(guò)引入高精度的溫濕度傳感器(SHT30)、光照強(qiáng)度檢測(cè)模(BH1750)、煙霧和火焰傳感器(MQ
    的頭像 發(fā)表于 01-15 09:29 ?1286次閱讀
    基于物聯(lián)網(wǎng)技術(shù)設(shè)計(jì)的陳列館監(jiān)控系統(tǒng)

    光敏電阻與其他傳感器的聯(lián)合應(yīng)用

    光敏電阻作為一種能夠根據(jù)光照強(qiáng)度變化而改變電阻值的傳感器,在與其他傳感器聯(lián)合應(yīng)用時(shí),能夠拓展出更多元化的應(yīng)用場(chǎng)景和功能。以下是對(duì)光敏電阻與其他傳感器聯(lián)合應(yīng)用的介紹: 一、光敏電阻與溫度
    的頭像 發(fā)表于 01-13 09:39 ?907次閱讀

    【CW32模塊使用】BH1750光照強(qiáng)度傳感器

    采用ROHM原裝BH1750FVI芯片供電電源:3-5V,光照度范圍:0-65535lx傳感器內(nèi)置16bitAD轉(zhuǎn)換,直接數(shù)字輸出,省略復(fù)雜的計(jì)算,省略標(biāo)定,不區(qū)分環(huán)境光源接近于視覺(jué)
    的頭像 發(fā)表于 12-30 11:17 ?1006次閱讀
    【CW32模塊使用】<b class='flag-5'>BH1750</b><b class='flag-5'>光照強(qiáng)度</b><b class='flag-5'>傳感器</b>

    【RA-Eco-RA4E2-64PIN-V1.0開(kāi)發(fā)板試用】04、I2C驅(qū)動(dòng)BH1750光照傳感器并在串口打印輸出

    0 前言 本次實(shí)驗(yàn)將使用板子上的I2C功能。瑞薩R7FA4E2B93CFM支持I3C和I2C,手頭沒(méi)有I3C的設(shè)備,但正好有一個(gè)I2C協(xié)議的光照
    發(fā)表于 12-16 16:17

    外設(shè)移植 安信可Ai-WB2+FPM383C指紋

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

    光照傳感器和光敏電阻區(qū)別在哪

    光照傳感器和光敏電阻是兩種不同的光電元件,它們?cè)诠怆婎I(lǐng)域中有著廣泛的應(yīng)用。雖然它們都對(duì)光有響應(yīng),但它們?cè)诠ぷ髟?、結(jié)構(gòu)、性能、應(yīng)用等方面存在顯著差異。 一、工作原理 光照傳感器和光敏電
    的頭像 發(fā)表于 10-12 14:34 ?2167次閱讀

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

    光照傳感器和光敏傳感器并不完全一樣 ,它們?cè)诠ぷ髟?、?yīng)用場(chǎng)景以及優(yōu)缺點(diǎn)上都有所不同。 一、工作原理 光照傳感器
    的頭像 發(fā)表于 10-12 14:22 ?2834次閱讀

    外設(shè)移植 安信可Ai-WB2-32S開(kāi)發(fā)板+TM1637 NTP時(shí)鐘

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

    CW32模塊使用:光敏電阻光照傳感器

    光敏電阻是用硫化隔或硒化隔等半導(dǎo)體材料制成的特殊電阻,其工作原理是基于內(nèi)光電效應(yīng)。隨著光照強(qiáng)度的升高,電阻值迅速降低,由于光照產(chǎn)生的載流子都參與導(dǎo)電,在外加電場(chǎng)的作用下作漂移運(yùn)動(dòng),電子奔向電源
    的頭像 發(fā)表于 09-18 11:54 ?1998次閱讀
    CW32模塊使用:光敏電阻<b class='flag-5'>光照</b><b class='flag-5'>傳感器</b>

    16位數(shù)字輸出型環(huán)境光強(qiáng)度傳感器集成電路bh1750FVI中文數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《16位數(shù)字輸出型環(huán)境光強(qiáng)度傳感器集成電路bh1750FVI中文數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-11 14:26 ?6次下載

    光敏電阻隨光照強(qiáng)度的變化規(guī)律

    光敏電阻是一種半導(dǎo)體材料,其電阻值會(huì)隨著光照強(qiáng)度的變化而變化。這種特性使得光敏電阻在許多領(lǐng)域得到廣泛應(yīng)用,如光控開(kāi)關(guān)、光度計(jì)、自動(dòng)控制等。 一、光敏電阻的工作原理 光敏電阻的工作原理基于半導(dǎo)體材料
    的頭像 發(fā)表于 08-27 10:31 ?5191次閱讀

    光敏電阻與光照強(qiáng)度的關(guān)系是什么

    光敏電阻是一種特殊的電阻元件,其電阻值會(huì)隨著光照強(qiáng)度的變化而變化。 一、光敏電阻的工作原理 光敏電阻是一種半導(dǎo)體材料制成的電阻元件,其電阻值會(huì)隨著光照強(qiáng)度的變化而變化。光敏電阻的工作原理主要
    的頭像 發(fā)表于 08-27 10:29 ?3493次閱讀