3、单片机向wifi模块发送温湿度数据(每3s刷新一次数据),蓝牙可以调节温度阈值,蓝牙发送字符‘0’表示阈值+2,发送字符‘1’表示阈值-2,温度超过所设阈值t,点亮LED灯,小于则灯熄灭。同样在OLED中显示自己的组名或组长名字,在显示温湿度。
时间: 2024-02-24 07:55:59 浏览: 25
以下是一个参考代码,仅供参考:
```c
#include "stm32f10x.h"
#include "wifi.h"
#include "dht11.h"
#include "usart.h"
#include "oled.h"
#define LED_GPIO_PIN GPIO_Pin_13
#define LED_GPIO_PORT GPIOC
uint8_t wifi_state = 0;
float temperature = 0.0f;
float humidity = 0.0f;
float threshold = 25.0f; // 温度阈值,初始值为 25.0℃
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
}
int main(void)
{
SystemInit();
LED_Init();
USART1_Configuration(); // 初始化串口1
wifi_init(); // 初始化 WiFi 模块
DHT11_Init(); // 初始化温湿度传感器
OLED_Init(); // 初始化 OLED 显示屏
OLED_ShowString(0, 0, "Team Name: XXXX"); // 在 OLED 上显示组名或组长名字
while (1)
{
DHT11_Read_Data(&temperature, &humidity); // 读取温湿度数据
// 将温湿度数据转换为字符串
char temperature_str[10];
char humidity_str[10];
sprintf(temperature_str, "%.1fC", temperature);
sprintf(humidity_str, "%.1f%%", humidity);
OLED_Clear_Screen(2, 2, 5, 55); // 清空 OLED 显示屏的温湿度数据区域
OLED_ShowString(2, 2, "Temp:");
OLED_ShowString(2, 12, temperature_str);
OLED_ShowString(2, 22, "Humi:");
OLED_ShowString(2, 32, humidity_str);
wifi_state = wifi_connect("ssid", "password"); // 连接 WiFi
if (wifi_state == 1) // WiFi 连接成功
{
// 将温湿度数据发送到 WiFi 模块
char data_str[50];
sprintf(data_str, "%.1f,%.1f", temperature, humidity);
wifi_send_data(data_str);
// 接收并处理蓝牙发送的数据
char recv_data = usart1_receive_data();
if (recv_data == '0') // 调高温度阈值
{
threshold += 2.0f;
}
else if (recv_data == '1') // 调低温度阈值
{
threshold -= 2.0f;
}
if (temperature > threshold) // 如果温度超过阈值
{
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PIN); // 点亮 LED 灯
}
else
{
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PIN); // 关闭 LED 灯
}
}
else // WiFi 连接失败
{
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PIN); // 点亮 LED 灯
}
delay_ms(3000); // 延时 3s
}
}
```
需要注意的是,上述代码中的 `wifi_init()`、`wifi_send_data()` 和 `usart1_receive_data()` 函数需要根据具体的硬件和软件环境进行编写。同时,代码中使用了 OLED 显示屏来显示温湿度数据和组名或组长名字,需要根据具体的 OLED 显示屏进行相应的修改。