stm32之1602+DHT11+继电器

描述:

1、DHT11监测温室度,并显示到1602液晶上

2、通过串口打印(或通过蓝牙模块在手机上查看)

3、当温度大于24度时,开启继电器。小于时关闭继电器(继电器可连接风扇---假想O(∩_∩)O哈哈~)

一、配置

1602引脚

  • D0...D7 <---> A0...A7
  • RS        <---> B1
  • RW       <---> B2
  • EN        <---> B10
  • V0         <---> GND(正视看不到显示结果,需要侧着看。否则需要接可调电阻)

DHT11引脚:

  • DATA <---> B7

继电器引脚:

  • IN<--->B6

二、main函数

int main(void)
{
  
	char msg[16];

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

	lcd_1602_init();
	show_line(0, 0, "loading...");
  while (1)
  {
        // 根据温度决定是否开启继电器
		if(datas[2] >= 24)
			HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
		else
			HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
		// 开启温湿度检测
		trig_dht();
		receive_data();
		memset(msg, 0, sizeof(msg));
		sprintf(msg, "Temp: %d.%d", datas[2], datas[3]);
		show_line(0, 0, msg);
		sprintf(msg, "Temp: %d.%d\r\n", datas[2], datas[3]);
		printf(msg);

		sprintf(msg, "Humi: %d.%d", datas[0], datas[1]);
		show_line(1, 0, msg);
		sprintf(msg, "Humi: %d.%d\r\n", datas[0], datas[1]);
		printf(msg);
		HAL_Delay(1000);
  }
}

项目很简单,这里不过度解释。。。

三、问题点总结

  • 继电器不要接到5V,要接到3v3,否则不管电平高低都会开启
  • DHT11引脚在cubeMX 中配置成输入,否则不工作
  • 通过GPIOA->ODR,可以直接往寄存器写数据
  • 1602可以不加忙时检测,依然可以正常工作
  • 1602的写时序和51的部分延时时间不太一样,必须要加长时间才能保证正常显示

 void write_cmd(char cmd) {
    RS_W_0();
    RW_W_0();
    EN_W_0();
    WRITE_DATA(cmd);
    delay_us(1);    // 这里保持1us即可
    EN_W_1();
    delay_us(1000); // 这里时间要设置长些,否则不会显示,和51还有些不同
    EN_W_0();
}

完整代码Github

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俯仰一世_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值