DHT11调试程序

(一)主程序

while(1)

{
DHT11_Read_Data();//读取温湿度数值
// RS485_Usart_SendArray(RS485_USARTx,temp,13);
RS485_Usart_SendString( RS485_USARTx,(char*)temp);
delay_ms(9000); 

}

(二)模块调试函数

#include "bsp_dht11.h"

#include "delay.h"
#include "bsp_485.h"
/*
 * 函数名:DHT11_GPIO_Config
 * 描述  :配置DHT11用到的I/O口
 * 输入  :无
 * 输出  :无
 */
static void DHT11_IN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* 温湿度传感器控制线浮空输入 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
/**
* @brief 设置端口为输出模式
*/
static void DHT11_OUT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* 温湿度传感器控制线模拟输入 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
/**
* @brief 初始化 DHT11,并检测,检测成功返回 0,否则返回 1
*/
static void DHT11_Rst(void)
{
DHT11_OUT_Init(); //设置引脚为输出模式
PAout(0) = 0;
delay_ms(19); //拉低至少 18ms
PAout(0) = 1; //总线拉高 20~40us,DHT11会返回一个低电平
delay_us(30);
DHT11_IN_Init();
//设置管脚为输入模式,用于读取 DHT11 的值,此时 PAin(1)为高电平
}
/**
* @brief 检测 DHT11,检测成功返回 0,否则返回 1
*/
static u8 DHT11_Check(void)
{
return PAin(0); //检测输入电平高低
}
static u8 DHT11_Read_Bit(void)
{
while(!PAin(0)); //等待变高电平,每次发送数据前都会有一个 50us 的电平信号
delay_us(40); //等待 40us
if(PAin(0) == 1)
{
while(PAin(0)); //当数据为 1 时,还得等到 1 信号结束,这里有不少人会出错
return 1;
}
else 
return 0;
}
/**
* @brief 从 DHT11 读取一个字节
*/
static u8 DHT11_Read_Byte(void)
{
u8 i;
u8 Data = 0;
for(i=0;i<8;i++)
{
Data <<= 1;
Data |= DHT11_Read_Bit();
}
return Data;
}
/*** @brief 从 DHT11 读取 8 位数据包
*/




u8 temp[15];           //dht11数据发送
void DHT11_Read_Data(void)
{
u8 Data_Buff[5];
u8 i = 0;
// char check[] = "Device Not Available\n";
// char error_data[] = "Error Data\n";

DHT11_Rst();


if (DHT11_Check() == 0) //当检测到 DHT11 给 STM32 主控芯片的输入电压为低电压时,说明 DHT11 开始响应
{
while(!PAin(0)); //等待 80us 的低电平响应信号结束
while(PAin(0)); //等待 80us 的高电平结束,开始接收数据
for (i = 0; i < 5; i++)
{
Data_Buff[i] = DHT11_Read_Byte();
}
while(!PAin(0)); //等待 40 位数据输出完后的 50us 低电平输出结束
//此处不应该再加一个50us的延时吗?最后一bit数据传送完毕后, DHT11拉低总线
//50us,随后总线由上拉电阻拉高进入空闲状态
DHT11_OUT_Init();
PAout(0) = 1;
if ((Data_Buff[0]+Data_Buff[1]+Data_Buff[2]+Data_Buff[3]) == Data_Buff[4])
{
//加入湿度的整数和小数
temp[0]=Data_Buff[0]/10+48;
temp[1]=Data_Buff[0]%10+48;
temp[2]='.';
temp[3]=Data_Buff[1]/10+48;
temp[4]=Data_Buff[1]%10+48;
temp[5]='H';
temp[6]=' ';

//加入温度的整数和小数
temp[7]=Data_Buff[2]/10+48;
temp[8]=Data_Buff[2]%10+48;
temp[9]='.';
temp[10]=Data_Buff[3]/10+48;
temp[11]=Data_Buff[3]%10+48;
temp[12]='C';
}
delay_us(400); 
}
}

(三).h文件

#ifndef __DHT11_H
#define __DHT11_H
#include "stm32f10x.h"
#include "bsp_SysTick.h"
#include "sys.h"
#include "delay.h"
#define HIGH  1
#define LOW   0
#define DHT11_CLK     RCC_APB2Periph_GPIOA
#define DHT11_PIN     GPIO_Pin_0                  
#define DHT11_PORT GPIOA
//带参宏,可以像内联函数一样使用,输出高电平或低电平
#define DHT11_DATA_OUT(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_0);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_0)
 //读取引脚的电平
#define  DHT11_DATA_IN()   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)


typedef struct
{
uint8_t  humi_int; //湿度的整数部分
uint8_t  humi_deci; //湿度的小数部分
uint8_t  temp_int; //温度的整数部分
uint8_t  temp_deci; //温度的小数部分
uint8_t  check_sum; //校验和
                
}DHT11_Data_TypeDef;


//void DHT11_GPIO_Config(void);
static void DHT11_Mode_IPU(void);
static void DHT11_Mode_Out_PP(void);
uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data);
static uint8_t Read_Byte(void);


static void DHT11_IN_Init(void);
static void DHT11_OUT_Init(void);
static void DHT11_Rst(void);
static u8 DHT11_Check(void);
static u8 DHT11_Read_Bit(void);
static u8 DHT11_Read_Byte(void);
void DHT11_Read_Data(void);

#endif /* __DHT11_H */














    






 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: microPython是一种精简版的Python编程语言,可以在微控制器和嵌入式系统中使用。DHT11是一种温湿度传感器,通常用于测量环境温度和湿度。 要编写microPython的DHT11驱动程序,可以使用以下步骤: 1. 首先,需要连接DHT11传感器到微控制器或开发板的GPIO引脚上。具体连接方式可以参考传感器的数据手册或者开发板的引脚图。 2. 然后,需要在microPython中导入相应的库文件,例如dht库,来实现对DHT11传感器的控制和读取。 3. 接着,可以定义一个函数来读取DHT11传感器的温湿度值。例如,可以定义一个名为read_dht11的函数,该函数使用dht库中的DHT11类来实例化一个DHT11对象,并使用该对象的read()方法读取温湿度值。 4. 最后,可以在主程序中调用该函数,并将读取的温湿度值输出到终端或其他设备上,例如OLED显示屏或串口调试器。 下面是一个示例代码,展示如何使用microPython编写DHT11驱动程序: ```python import dht import machine import time d = dht.DHT11(machine.Pin(4)) def read_dht11(): d.measure() temp = d.temperature() hum = d.humidity() return temp, hum while True: temp, hum = read_dht11() print('Temperature: %d°C, Humidity: %d%%' % (temp, hum)) time.sleep(2) ``` 在上述示例代码中,我们导入了dht和machine库,其中dht库提供了DHT11类,用于实现对DHT11传感器的控制和读取。我们还定义了一个read_dht11函数,用于读取温湿度值,并将其返回。最后,在主程序中调用该函数,并使用print语句将温湿度值输出到终端上。程序会每隔2秒钟读取一次温湿度值,并不断输出到终端上。 ### 回答2: microPython是一种小型Python解释器,专为嵌入式系统开发而设计。它可以运行在各种微控制器平台上,如ESP8266和Arduino等。DHT11是一种数字温湿度传感器,常用于测量环境中的温度和湿度。 microPython DHT11驱动程序是用于与DHT11传感器通信和获取数据的代码。它实现了与DHT11传感器的协议通信,并解析传感器返回的数据,提供温度和湿度的值。 在编写microPython DHT11驱动程序时,首先需要配置传感器的引脚。传感器的数据引脚(DATA)连接到单片机的一个GPIO引脚上。然后,在驱动程序中,使用GPIO库来控制引脚状态,实现与传感器的通信。 通常,与DHT11传感器通信的协议是一种单线串行协议。驱动程序需要发送一个起始信号给传感器,等待传感器的响应。一旦传感器响应,驱动程序将接收传感器发送的数据,并进行解析。 解析传感器数据的过程有点复杂。传感器返回的数据是40位二进制编码,其中包括湿度、温度和校验位等信息。驱动程序需要按照一定的规则解析二进制编码,提取出温度和湿度的数值,并进行校验。 最后,驱动程序将提供温度和湿度的数值作为函数的返回值,以供其他程序使用。 总之,microPython DHT11驱动程序是用于与DHT11传感器通信和获取温度湿度数据的代码。它实现了与传感器的串行通信协议,并解析传感器返回的40位数据,提供准确的温度和湿度数值。驱动程序的编写需要熟悉GPIO控制和数据解析等技术。 ### 回答3: microPython是一种适用于微控制器的精简Python版本,它允许我们使用Python语言编程来控制和驱动各种硬件设备,包括DHT11温湿度传感器。 DHT11驱动程序是一个用于与DHT11传感器进行通信的软件程序。它通过传感器的数据引脚与微控制器的引脚相连,在程序中通过一系列指令来读取传感器的温度和湿度值。 在microPython中,我们可以使用相应的库或模块来实现DHT11驱动程序。例如,可以使用uPyCraft、Thonny或Mu等开发环境来编写和调试microPython代码。 具体的DHT11驱动程序实现步骤如下: 1. 导入必要的库或模块,例如machine和dht。 2. 初始化传感器,指定引脚号和传感器类型(DHT11)。 3. 执行温湿度读取操作,并将结果存储在相应的变量中。 4. 关闭传感器连接,释放资源。 5. 可以根据需求对读取到的温湿度数据进行处理和显示。例如,可以通过串口输出或使用OLED显示屏等方式将数据显示出来。 需要注意的是,不同的微控制器和开发板可能使用不同的引脚编号和库函数,因此在编写驱动程序时应根据具体的硬件和开发环境进行调整。 通过以上步骤,我们就可以实现一个microPython的DHT11驱动程序,从而方便地读取和处理传感器的温湿度数据。这种驱动程序的使用使得我们可以更加简单、高效地在嵌入式系统中利用DHT11传感器进行温湿度监测和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值