96SEO 2026-02-20 04:18 0
对于一些单片机类的环境检测或者智能家居小项目中温湿度传感器DHT11以及光照强度传感器BH1750往往是必不可少的两个外设下面我们来剖析这两个外设的原理以及使用。

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
对于温度的测量范围为0到50℃能测量的湿度范围为20~95%RH。
如上图所示DTH11传感器一般有3线制和4线制两种类型本次以3线制传感器为例进行说明4线制传感器请参考商家提供的使用手册。
对于3线制在接线上有
VCC外接3.3-5V电源GND外接GNDDATA小板开关数字量输出接口接单片机IO口
DHT11的DATA口用于与单片机的通讯和同步采用单总线数据格式一次通讯时间为4ms左右数据分为小数部分和整数部分具体格式在下面说明当前小数部分用于以后拓展现读出为0。
操作流程如下
用户MCU发送一次开始信号后DHT11从低功耗模式转换到高速模式等待主机开始信号结束后DHT11发送响应信号送出40bit的数据并触发一次信号采集用户可选择读取部分数据。
从模式下DHT11接收到开始信号触发一次温湿度采集如果没有接收到主机发送开始信号DHT11不会主动进行温湿度采集。
采集数据后转换到低速模式。
总线空闲状态为高电平主机把总线拉低等待DHT11响应主机把总线拉低必须大于18毫秒保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后等待主机开始信号结束然后发送80us低电平响应信号。
主机发送开始信号结束后延时等待20-40us后读取DHT11的响应信号主机发送开始信号后可以切换到输入模式或者输出高电平均可总线由上拉电阻拉高。
总线为低电平说明DHT11发送响应信号DHT11发送响应信号后再把总线拉高80us准备发送数据每一bit数据都以50us低电平时隙开始高电平的长短决定了数据位是0还是1。
格式如下图所示。
如果读取响应信号为高电平则DHT11没有响应请检查线路是否连接正常。
当最后一bit数据传送完毕后DHT11拉低总线50us随后总线由上拉电阻拉高进入空闲状态。
(DHT11_DQ_INretry100)//DHT11会拉低40~80us{retry;Delay_us(1);};
(!DHT11_DQ_INretry100)//DHT11拉低后会再次拉高40~80us{retry;Delay_us(1);};if(retry100)return
retry0;while(DHT11_DQ_INretry100)//等待变为低电平{retry;Delay_us(1);}retry0;while(!DHT11_DQ_INretry100)//等待变高电平{retry;Delay_us(1);}Delay_us(40);//等待40usif(DHT11_DQ_IN)return
i;DHT11_Rst();if(DHT11_Check()0){for(i0;i5;i)//读取40位数据{buf[i]DHT11_Read_Byte();}if((buf[0]buf[1]buf[2]buf[3])buf[4]){*humibuf[0];*tempbuf[2];}}else
GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,
//使能PG端口时钟GPIO_InitStructure.GPIO_Pin
//PG11端口配置GPIO_InitStructure.GPIO_Mode
//推挽输出GPIO_InitStructure.GPIO_Speed
GPIO_Speed_50MHz;GPIO_Init(GPIOB,
//初始化IO口GPIO_SetBits(GPIOB,GPIO_Pin_11);
{GPIOB-CRH0XFFFF0FFF;GPIOB-CRH|812;}
{GPIOB-CRH0XFFFF0FFF;GPIOB-CRH|312;}
DHT11_Check(void);//检测是否存在DHT11
BH1750是一种用于两线式串行总线接口的数字型光强度传感器集成电路。
所能测量的范围为1~65535Lx。
最小误差变动
名称注释GND电源地VCC电源3.3~5vSCLIIC的时钟线SDAIIC的数据线ADDR设备地址引脚空着
*********************************************************************************************************
*********************************************************************************************************
下面的时间是通过逻辑分析仪测试得到的。
工作条件CPU主频72MHz
*********************************************************************************************************
*********************************************************************************************************
*/BH1750_I2C_SDA_1();BH1750_I2C_SCL_1();i2c_Delay();BH1750_I2C_SDA_0();i2c_Delay();BH1750_I2C_SCL_0();i2c_Delay();
*********************************************************************************************************
*********************************************************************************************************
*/BH1750_I2C_SDA_0();BH1750_I2C_SCL_1();i2c_Delay();BH1750_I2C_SDA_1();
*********************************************************************************************************
*********************************************************************************************************
0x80){BH1750_I2C_SDA_1();}else{BH1750_I2C_SDA_0();}i2c_Delay();BH1750_I2C_SCL_1();i2c_Delay();
*********************************************************************************************************
*********************************************************************************************************
1;BH1750_I2C_SCL_1();i2c_Delay();if
(BH1750_I2C_SDA_READ()){value;}BH1750_I2C_SCL_0();i2c_Delay();}return
*********************************************************************************************************
*********************************************************************************************************
*/i2c_Delay();BH1750_I2C_SCL_1();
0;BH1750_I2C_SCL_0();i2c_Delay();return
*********************************************************************************************************
*********************************************************************************************************
*/i2c_Delay();BH1750_I2C_SCL_1();
*/i2c_Delay();BH1750_I2C_SCL_0();i2c_Delay();BH1750_I2C_SDA_1();
*********************************************************************************************************
*********************************************************************************************************
*/i2c_Delay();BH1750_I2C_SCL_1();
*/i2c_Delay();BH1750_I2C_SCL_0();i2c_Delay();
*********************************************************************************************************
*********************************************************************************************************
GPIO_InitStructure;RCC_APB2PeriphClockCmd(BH1750_RCC_I2C_PORT,
BH1750_I2C_SDA_PIN;GPIO_InitStructure.GPIO_Speed
GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode
*/GPIO_Init(BH1750_GPIO_PORT_I2C,
*********************************************************************************************************
检测I2C总线设备CPU向发送设备地址然后读取设备应答来判断该设备是否存在
*********************************************************************************************************
{i2c_Start();//发送写地址i2c_SendByte(BH1750_Addr|0);if(i2c_WaitAck()1)return
1;//发送控制命令i2c_SendByte(data);if(i2c_WaitAck()1)return
i2c_Start();//发送读地址i2c_SendByte(BH1750_Addr|1);if(i2c_WaitAck()1)return
0;//读取高八位receive_datai2c_ReadByte();i2c_Ack();//读取低八位receive_data(receive_data8)i2c_ReadByte();i2c_NAck();i2c_Stop();return
{BH1750_Byte_Write(MODULE_RESET);
BH1750_Byte_Write(Measure_Mode);//SysTick_Delay_ms(120);
(float)(BH1750_Read_Measure()/1.1f*Resolurtion);return
((Measure_ModeCONTINUE_H_MODE2)|(Measure_ModeONE_TIME_H_MODE2))#define
((Measure_ModeCONTINUE_H_MODE)|(Measure_ModeONE_TIME_H_MODE))#define
((Measure_ModeCONTINUE_L_MODE)|(Measure_ModeONE_TIME_L_MODE))#define
GPIO_SetBits(BH1750_GPIO_PORT_I2C,
GPIO_ResetBits(BH1750_GPIO_PORT_I2C,
GPIO_SetBits(BH1750_GPIO_PORT_I2C,
GPIO_ResetBits(BH1750_GPIO_PORT_I2C,
GPIO_ReadInputDataBit(BH1750_GPIO_PORT_I2C,
原创力文档https://max.book118.com/html/2022/0404/5140311013004211.shtm
1.代码中的dht11.c、“dht11.h”、“sys.h”、“bh1750.c”、bh1750.h可在我的博客中下载。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback